#ifndef _IPHLPAPI_H
#define _IPHLPAPI_H

/* TCP/IP configuration definitions */

#ifdef __cplusplus
extern "C" {
#endif

#include <iprtrmib.h>
#include <ipexport.h>
#include <iptypes.h>

DWORD WINAPI GetNumberOfInterfaces(PDWORD);
DWORD WINAPI GetIfEntry(PMIB_IFROW);
DWORD WINAPI GetIfTable(PMIB_IFTABLE,PULONG,BOOL);
DWORD WINAPI GetIpAddrTable(PMIB_IPADDRTABLE,PULONG,BOOL);
DWORD WINAPI GetIpNetTable(PMIB_IPNETTABLE,PULONG,BOOL);
DWORD WINAPI GetIpForwardTable(PMIB_IPFORWARDTABLE,PULONG,BOOL);
DWORD WINAPI GetTcpTable(PMIB_TCPTABLE,PDWORD,BOOL);
DWORD WINAPI GetUdpTable(PMIB_UDPTABLE,PDWORD,BOOL);
DWORD WINAPI GetIpStatistics(PMIB_IPSTATS);
DWORD WINAPI GetIpStatisticsEx(PMIB_IPSTATS,DWORD);
DWORD WINAPI GetIcmpStatistics(PMIB_ICMP);
DWORD WINAPI GetIcmpStatisticsEx(PMIB_ICMP_EX,DWORD);
DWORD WINAPI GetTcpStatistics(PMIB_TCPSTATS);
DWORD WINAPI GetTcpStatisticsEx(PMIB_TCPSTATS,DWORD);
DWORD WINAPI GetUdpStatistics(PMIB_UDPSTATS);
DWORD WINAPI GetUdpStatisticsEx(PMIB_UDPSTATS,DWORD);
DWORD WINAPI SetIfEntry(PMIB_IFROW);
DWORD WINAPI CreateIpForwardEntry(PMIB_IPFORWARDROW);
DWORD WINAPI SetIpForwardEntry(PMIB_IPFORWARDROW);
DWORD WINAPI DeleteIpForwardEntry(PMIB_IPFORWARDROW);
DWORD WINAPI SetIpStatistics(PMIB_IPSTATS);
DWORD WINAPI SetIpTTL(UINT);
DWORD WINAPI CreateIpNetEntry(PMIB_IPNETROW);
DWORD WINAPI SetIpNetEntry(PMIB_IPNETROW);
DWORD WINAPI DeleteIpNetEntry(PMIB_IPNETROW);
DWORD WINAPI FlushIpNetTable(DWORD);
DWORD WINAPI CreateProxyArpEntry(DWORD,DWORD,DWORD);
DWORD WINAPI DeleteProxyArpEntry(DWORD,DWORD,DWORD);
DWORD WINAPI SetTcpEntry(PMIB_TCPROW);
DWORD WINAPI GetInterfaceInfo(PIP_INTERFACE_INFO,PULONG);
DWORD WINAPI GetUniDirectionalAdapterInfo(PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS,PULONG);
DWORD WINAPI GetBestInterface(IPAddr,PDWORD);
DWORD WINAPI GetBestInterfaceEx(struct sockaddr*,PDWORD);
DWORD WINAPI GetBestRoute(DWORD,DWORD,PMIB_IPFORWARDROW);
DWORD WINAPI NotifyAddrChange(PHANDLE,LPOVERLAPPED);
DWORD WINAPI NotifyRouteChange(PHANDLE,LPOVERLAPPED);
BOOL WINAPI CancelIPChangeNotify(LPOVERLAPPED);
DWORD WINAPI GetAdapterIndex(LPWSTR,PULONG);
DWORD WINAPI AddIPAddress(IPAddr,IPMask,DWORD,PULONG,PULONG);
DWORD WINAPI DeleteIPAddress(ULONG);
DWORD WINAPI GetNetworkParams(PFIXED_INFO,PULONG);
DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO,PULONG);
PIP_ADAPTER_ORDER_MAP WINAPI GetAdapterOrderMap(void);
#ifdef _WINSOCK2_H
DWORD WINAPI GetAdaptersAddresses(ULONG,DWORD,PVOID,PIP_ADAPTER_ADDRESSES,PULONG);
#endif /* _WINSOCK2_H */
DWORD WINAPI GetPerAdapterInfo(ULONG,PIP_PER_ADAPTER_INFO,PULONG);
DWORD WINAPI IpReleaseAddress(PIP_ADAPTER_INDEX_MAP);
DWORD WINAPI IpRenewAddress(PIP_ADAPTER_INDEX_MAP);
DWORD WINAPI SendARP(IPAddr,IPAddr,PULONG,PULONG);
BOOL WINAPI GetRTTAndHopCount(IPAddr,PULONG,ULONG,PULONG);
DWORD WINAPI GetFriendlyIfIndex(DWORD);
DWORD WINAPI EnableRouter(HANDLE*,OVERLAPPED*);
DWORD WINAPI UnenableRouter(OVERLAPPED*,LPDWORD);
DWORD WINAPI DisableMediaSense(HANDLE*,OVERLAPPED*);
DWORD WINAPI RestoreMediaSense(OVERLAPPED*,LPDWORD);
DWORD WINAPI GetIpErrorString(IP_STATUS,PWCHAR,PDWORD);

#ifdef __cplusplus
}
#endif

#endif /* _IPHLPAPI_H */


