1 /** 2 * This file is part of the mingw-w64 runtime package. 3 * No warranty is given; refer to the file DISCLAIMER within this package. 4 */ 5 6 #ifndef __IPHLPAPI_H__ 7 #define __IPHLPAPI_H__ 8 9 #include <winapifamily.h> 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 #include <iprtrmib.h> 16 #include <ipexport.h> 17 #include <iptypes.h> 18 #include <tcpestats.h> 19 20 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= 0x0A00 21 22 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) 23 24 DWORD WINAPI GetNumberOfInterfaces (PDWORD pdwNumIf); 25 DWORD WINAPI GetIfEntry (PMIB_IFROW pIfRow); 26 DWORD WINAPI GetIfTable (PMIB_IFTABLE pIfTable, PULONG pdwSize, WINBOOL bOrder); 27 DWORD WINAPI GetIpAddrTable (PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize, WINBOOL bOrder); 28 ULONG WINAPI GetIpNetTable (PMIB_IPNETTABLE IpNetTable, PULONG SizePointer, WINBOOL Order); 29 DWORD WINAPI GetIpForwardTable (PMIB_IPFORWARDTABLE pIpForwardTable, PULONG pdwSize, WINBOOL bOrder); 30 ULONG WINAPI GetTcpTable (PMIB_TCPTABLE TcpTable, PULONG SizePointer, WINBOOL Order); 31 DWORD WINAPI GetExtendedTcpTable (PVOID pTcpTable, PDWORD pdwSize, WINBOOL bOrder, ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Reserved); 32 DWORD WINAPI GetOwnerModuleFromTcpEntry (PMIB_TCPROW_OWNER_MODULE pTcpEntry, TCPIP_OWNER_MODULE_INFO_CLASS Class, PVOID pBuffer, PDWORD pdwSize); 33 ULONG WINAPI GetUdpTable (PMIB_UDPTABLE UdpTable, PULONG SizePointer, WINBOOL Order); 34 DWORD WINAPI GetExtendedUdpTable (PVOID pUdpTable, PDWORD pdwSize, WINBOOL bOrder, ULONG ulAf, UDP_TABLE_CLASS TableClass, ULONG Reserved); 35 DWORD WINAPI GetOwnerModuleFromUdpEntry (PMIB_UDPROW_OWNER_MODULE pUdpEntry, TCPIP_OWNER_MODULE_INFO_CLASS Class, PVOID pBuffer, PDWORD pdwSize); 36 #if NTDDI_VERSION < 0x06000000 37 DWORD AllocateAndGetTcpExTableFromStack (PVOID *ppTcpTable, WINBOOL bOrder, HANDLE hHeap, DWORD dwFlags, DWORD dwFamily); 38 DWORD AllocateAndGetUdpExTableFromStack (PVOID *ppUdpTable, WINBOOL bOrder, HANDLE hHeap, DWORD dwFlags, DWORD dwFamily); 39 #else 40 ULONG WINAPI GetTcpTable2 (PMIB_TCPTABLE2 TcpTable, PULONG SizePointer, WINBOOL Order); 41 #endif 42 43 #ifdef _WS2IPDEF_ 44 45 #if NTDDI_VERSION >= 0x06000000 46 ULONG WINAPI GetTcp6Table (PMIB_TCP6TABLE TcpTable, PULONG SizePointer, WINBOOL Order); 47 ULONG WINAPI GetTcp6Table2 (PMIB_TCP6TABLE2 TcpTable, PULONG SizePointer, WINBOOL Order); 48 ULONG WINAPI GetPerTcpConnectionEStats (PMIB_TCPROW Row, TCP_ESTATS_TYPE EstatsType, PUCHAR Rw, ULONG RwVersion, ULONG RwSize, PUCHAR Ros, ULONG RosVersion, ULONG RosSize, PUCHAR Rod, ULONG RodVersion, ULONG RodSize); 49 ULONG WINAPI SetPerTcpConnectionEStats (PMIB_TCPROW Row, TCP_ESTATS_TYPE EstatsType, PUCHAR Rw, ULONG RwVersion, ULONG RwSize, ULONG Offset); 50 ULONG WINAPI GetPerTcp6ConnectionEStats (PMIB_TCP6ROW Row, TCP_ESTATS_TYPE EstatsType, PUCHAR Rw, ULONG RwVersion, ULONG RwSize, PUCHAR Ros, ULONG RosVersion, ULONG RosSize, PUCHAR Rod, ULONG RodVersion, ULONG RodSize); 51 ULONG WINAPI SetPerTcp6ConnectionEStats (PMIB_TCP6ROW Row, TCP_ESTATS_TYPE EstatsType, PUCHAR Rw, ULONG RwVersion, ULONG RwSize, ULONG Offset); 52 ULONG WINAPI GetUdp6Table (PMIB_UDP6TABLE Udp6Table, PULONG SizePointer, WINBOOL Order); 53 #endif 54 DWORD WINAPI GetOwnerModuleFromTcp6Entry (PMIB_TCP6ROW_OWNER_MODULE pTcpEntry, TCPIP_OWNER_MODULE_INFO_CLASS Class, PVOID pBuffer, PDWORD pdwSize); 55 DWORD WINAPI GetOwnerModuleFromUdp6Entry (PMIB_UDP6ROW_OWNER_MODULE pUdpEntry, TCPIP_OWNER_MODULE_INFO_CLASS Class, PVOID pBuffer, PDWORD pdwSize); 56 #endif 57 DWORD GetOwnerModuleFromPidAndInfo (ULONG ulPid, ULONGLONG *pInfo, TCPIP_OWNER_MODULE_INFO_CLASS Class, PVOID pBuffer, PDWORD pdwSize); 58 ULONG WINAPI GetIpStatistics (PMIB_IPSTATS Statistics); 59 ULONG WINAPI GetIcmpStatistics (PMIB_ICMP Statistics); 60 ULONG WINAPI GetTcpStatistics (PMIB_TCPSTATS Statistics); 61 ULONG WINAPI GetUdpStatistics (PMIB_UDPSTATS Stats); 62 ULONG WINAPI GetIpStatisticsEx (PMIB_IPSTATS Statistics, ULONG Family); 63 ULONG WINAPI SetIpStatisticsEx (PMIB_IPSTATS Statistics, ULONG Family); 64 ULONG WINAPI GetIcmpStatisticsEx (PMIB_ICMP_EX Statistics, ULONG Family); 65 ULONG WINAPI GetTcpStatisticsEx (PMIB_TCPSTATS Statistics, ULONG Family); 66 ULONG WINAPI GetUdpStatisticsEx (PMIB_UDPSTATS Statistics, ULONG Family); 67 DWORD WINAPI SetIfEntry (PMIB_IFROW pIfRow); 68 DWORD WINAPI CreateIpForwardEntry (PMIB_IPFORWARDROW pRoute); 69 DWORD WINAPI SetIpForwardEntry (PMIB_IPFORWARDROW pRoute); 70 DWORD WINAPI DeleteIpForwardEntry (PMIB_IPFORWARDROW pRoute); 71 DWORD WINAPI SetIpStatistics (PMIB_IPSTATS pIpStats); 72 DWORD WINAPI SetIpTTL (UINT nTTL); 73 DWORD WINAPI CreateIpNetEntry (PMIB_IPNETROW pArpEntry); 74 DWORD WINAPI SetIpNetEntry (PMIB_IPNETROW pArpEntry); 75 DWORD WINAPI DeleteIpNetEntry (PMIB_IPNETROW pArpEntry); 76 DWORD WINAPI FlushIpNetTable (DWORD dwIfIndex); 77 DWORD WINAPI CreateProxyArpEntry (DWORD dwAddress, DWORD dwMask, DWORD dwIfIndex); 78 DWORD WINAPI DeleteProxyArpEntry (DWORD dwAddress, DWORD dwMask, DWORD dwIfIndex); 79 DWORD WINAPI SetTcpEntry (PMIB_TCPROW pTcpRow); 80 DWORD WINAPI GetInterfaceInfo (PIP_INTERFACE_INFO pIfTable, PULONG dwOutBufLen); 81 DWORD WINAPI GetUniDirectionalAdapterInfo (PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo, PULONG dwOutBufLen); 82 #ifndef NHPALLOCATEANDGETINTERFACEINFOFROMSTACK_DEFINED 83 #define NHPALLOCATEANDGETINTERFACEINFOFROMSTACK_DEFINED 84 DWORD WINAPI NhpAllocateAndGetInterfaceInfoFromStack (IP_INTERFACE_NAME_INFO **ppTable, PDWORD pdwCount, WINBOOL bOrder, HANDLE hHeap, DWORD dwFlags); 85 #endif 86 DWORD WINAPI GetBestInterface (IPAddr dwDestAddr, PDWORD pdwBestIfIndex); 87 DWORD WINAPI GetBestInterfaceEx (struct sockaddr *pDestAddr, PDWORD pdwBestIfIndex); 88 DWORD WINAPI GetBestRoute (DWORD dwDestAddr, DWORD dwSourceAddr, PMIB_IPFORWARDROW pBestRoute); 89 DWORD WINAPI NotifyAddrChange (PHANDLE Handle, LPOVERLAPPED overlapped); 90 DWORD WINAPI NotifyRouteChange (PHANDLE Handle, LPOVERLAPPED overlapped); 91 WINBOOL WINAPI CancelIPChangeNotify (LPOVERLAPPED notifyOverlapped); 92 DWORD WINAPI GetAdapterIndex (LPWSTR AdapterName, PULONG IfIndex); 93 DWORD WINAPI AddIPAddress (IPAddr Address, IPMask IpMask, DWORD IfIndex, PULONG NTEContext, PULONG NTEInstance); 94 DWORD WINAPI DeleteIPAddress (ULONG NTEContext); 95 DWORD WINAPI GetNetworkParams (PFIXED_INFO pFixedInfo, PULONG pOutBufLen); 96 ULONG WINAPI GetAdaptersInfo (PIP_ADAPTER_INFO AdapterInfo, PULONG SizePointer); 97 PIP_ADAPTER_ORDER_MAP WINAPI GetAdapterOrderMap (VOID); 98 99 #endif /* WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) */ 100 101 #ifdef _WINSOCK2API_ 102 ULONG WINAPI GetAdaptersAddresses (ULONG Family, ULONG Flags, PVOID Reserved, PIP_ADAPTER_ADDRESSES AdapterAddresses, PULONG SizePointer); 103 #endif 104 105 DWORD WINAPI GetPerAdapterInfo (ULONG IfIndex, PIP_PER_ADAPTER_INFO pPerAdapterInfo, PULONG pOutBufLen); 106 DWORD WINAPI IpReleaseAddress (PIP_ADAPTER_INDEX_MAP AdapterInfo); 107 DWORD WINAPI IpRenewAddress (PIP_ADAPTER_INDEX_MAP AdapterInfo); 108 DWORD WINAPI SendARP (IPAddr DestIP, IPAddr SrcIP, PVOID pMacAddr, PULONG PhyAddrLen); 109 WINBOOL WINAPI GetRTTAndHopCount (IPAddr DestIpAddress, PULONG HopCount, ULONG MaxHops, PULONG RTT); 110 DWORD WINAPI GetFriendlyIfIndex (DWORD IfIndex); 111 DWORD WINAPI EnableRouter (HANDLE *pHandle, OVERLAPPED *pOverlapped); 112 DWORD WINAPI UnenableRouter (OVERLAPPED *pOverlapped, LPDWORD lpdwEnableCount); 113 DWORD WINAPI DisableMediaSense (HANDLE *pHandle, OVERLAPPED *pOverLapped); 114 DWORD WINAPI RestoreMediaSense (OVERLAPPED *pOverlapped, LPDWORD lpdwEnableCount); 115 116 #if NTDDI_VERSION >= 0x06000000 117 #define NET_STRING_IPV4_ADDRESS 0x00000001 118 #define NET_STRING_IPV4_SERVICE 0x00000002 119 #define NET_STRING_IPV4_NETWORK 0x00000004 120 #define NET_STRING_IPV6_ADDRESS 0x00000008 121 #define NET_STRING_IPV6_ADDRESS_NO_SCOPE 0x00000010 122 #define NET_STRING_IPV6_SERVICE 0x00000020 123 #define NET_STRING_IPV6_SERVICE_NO_SCOPE 0x00000040 124 #define NET_STRING_IPV6_NETWORK 0x00000080 125 #define NET_STRING_NAMED_ADDRESS 0x00000100 126 #define NET_STRING_NAMED_SERVICE 0x00000200 127 128 #define NET_STRING_IP_ADDRESS (NET_STRING_IPV4_ADDRESS | NET_STRING_IPV6_ADDRESS) 129 #define NET_STRING_IP_ADDRESS_NO_SCOPE (NET_STRING_IPV4_ADDRESS | NET_STRING_IPV6_ADDRESS_NO_SCOPE) 130 #define NET_STRING_IP_SERVICE (NET_STRING_IPV4_SERVICE | NET_STRING_IPV6_SERVICE) 131 #define NET_STRING_IP_SERVICE_NO_SCOPE (NET_STRING_IPV4_SERVICE | NET_STRING_IPV6_SERVICE_NO_SCOPE) 132 #define NET_STRING_IP_NETWORK (NET_STRING_IPV4_NETWORK | NET_STRING_IPV6_NETWORK) 133 #define NET_STRING_ANY_ADDRESS (NET_STRING_NAMED_ADDRESS | NET_STRING_IP_ADDRESS) 134 #define NET_STRING_ANY_ADDRESS_NO_SCOPE (NET_STRING_NAMED_ADDRESS | NET_STRING_IP_ADDRESS_NO_SCOPE) 135 #define NET_STRING_ANY_SERVICE (NET_STRING_NAMED_SERVICE | NET_STRING_IP_SERVICE) 136 #define NET_STRING_ANY_SERVICE_NO_SCOPE (NET_STRING_NAMED_SERVICE | NET_STRING_IP_SERVICE_NO_SCOPE) 137 138 typedef enum NET_ADDRESS_FORMAT_ { 139 NET_ADDRESS_FORMAT_UNSPECIFIED = 0, 140 NET_ADDRESS_DNS_NAME, 141 NET_ADDRESS_IPV4, 142 NET_ADDRESS_IPV6 143 } NET_ADDRESS_FORMAT; 144 145 #if defined (_WS2DEF_) && defined (_WS2IPDEF_) && defined (_WINDNS_INCLUDED_) 146 typedef struct NET_ADDRESS_INFO_ { 147 NET_ADDRESS_FORMAT Format; 148 __C89_NAMELESS union { 149 struct { 150 WCHAR Address[DNS_MAX_NAME_BUFFER_LENGTH]; 151 WCHAR Port[6]; 152 } NamedAddress; 153 SOCKADDR_IN Ipv4Address; 154 SOCKADDR_IN6 Ipv6Address; 155 SOCKADDR IpAddress; 156 }; 157 } NET_ADDRESS_INFO,*PNET_ADDRESS_INFO; 158 159 DWORD WINAPI ParseNetworkString (CONST WCHAR *NetworkString, DWORD Types, PNET_ADDRESS_INFO AddressInfo, USHORT *PortNumber, BYTE *PrefixLength); 160 #endif 161 DWORD WINAPI GetIpErrorString (IP_STATUS ErrorCode, PWSTR Buffer, PDWORD Size); 162 #ifdef _WS2DEF_ 163 ULONG WINAPI ResolveNeighbor (SOCKADDR *NetworkAddress, PVOID PhysicalAddress, PULONG PhysicalAddressLength); 164 #endif 165 ULONG WINAPI CreatePersistentTcpPortReservation (USHORT StartPort, USHORT NumberOfPorts, PULONG64 Token); 166 ULONG WINAPI CreatePersistentUdpPortReservation (USHORT StartPort, USHORT NumberOfPorts, PULONG64 Token); 167 ULONG WINAPI DeletePersistentTcpPortReservation (USHORT StartPort, USHORT NumberOfPorts); 168 ULONG WINAPI DeletePersistentUdpPortReservation (USHORT StartPort, USHORT NumberOfPorts); 169 ULONG WINAPI LookupPersistentTcpPortReservation (USHORT StartPort, USHORT NumberOfPorts, PULONG64 Token); 170 ULONG WINAPI LookupPersistentUdpPortReservation (USHORT StartPort, USHORT NumberOfPorts, PULONG64 Token); 171 #endif 172 173 #if NTDDI_VERSION >= 0x06000000 174 #include <netioapi.h> 175 #endif 176 177 #endif /* WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= 0x0A00 */ 178 179 #ifdef __cplusplus 180 } 181 #endif 182 183 #endif 184