495 lines
14 KiB
C
495 lines
14 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1997-1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
public\sdk\inc\iphlpapi.h
|
||
|
|
||
|
Abstract:
|
||
|
Header file for functions to interact with the IP Stack for MIB-II and
|
||
|
related functionality
|
||
|
|
||
|
Revision History:
|
||
|
Amritansh Raghav Created
|
||
|
NK Srinivas Added
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef __IPHLPAPI_H__
|
||
|
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
|
||
|
#define __IPHLPAPI_H__
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// IPRTRMIB.H has the definitions of the strcutures used to set and get //
|
||
|
// information //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include <iprtrmib.h>
|
||
|
#include <ipexport.h>
|
||
|
#include <iptypes.h>
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// The GetXXXTable APIs take a buffer and a size of buffer. If the buffer //
|
||
|
// is not large enough, they APIs return ERROR_INSUFFICIENT_BUFFER and //
|
||
|
// *pdwSize is the required buffer size //
|
||
|
// The bOrder is a BOOLEAN, which if TRUE sorts the table according to //
|
||
|
// MIB-II (RFC XXXX) //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Retrieves the number of interfaces in the system. These include LAN and //
|
||
|
// WAN interfaces //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetNumberOfInterfaces(
|
||
|
OUT PDWORD pdwNumIf
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Gets the MIB-II ifEntry //
|
||
|
// The dwIndex field of the MIB_IFROW should be set to the index of the //
|
||
|
// interface being queried //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetIfEntry(
|
||
|
IN OUT PMIB_IFROW pIfRow
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Gets the MIB-II IfTable //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetIfTable(
|
||
|
OUT PMIB_IFTABLE pIfTable,
|
||
|
IN OUT PULONG pdwSize,
|
||
|
IN BOOL bOrder
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Gets the Interface to IP Address mapping //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetIpAddrTable(
|
||
|
OUT PMIB_IPADDRTABLE pIpAddrTable,
|
||
|
IN OUT PULONG pdwSize,
|
||
|
IN BOOL bOrder
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Gets the current IP Address to Physical Address (ARP) mapping //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetIpNetTable(
|
||
|
OUT PMIB_IPNETTABLE pIpNetTable,
|
||
|
IN OUT PULONG pdwSize,
|
||
|
IN BOOL bOrder
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Gets the IP Routing Table (RFX XXXX) //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetIpForwardTable(
|
||
|
OUT PMIB_IPFORWARDTABLE pIpForwardTable,
|
||
|
IN OUT PULONG pdwSize,
|
||
|
IN BOOL bOrder
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Gets TCP Connection/UDP Listener Table //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetTcpTable(
|
||
|
OUT PMIB_TCPTABLE pTcpTable,
|
||
|
IN OUT PDWORD pdwSize,
|
||
|
IN BOOL bOrder
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetUdpTable(
|
||
|
OUT PMIB_UDPTABLE pUdpTable,
|
||
|
IN OUT PDWORD pdwSize,
|
||
|
IN BOOL bOrder
|
||
|
);
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Gets IP/ICMP/TCP/UDP Statistics //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetIpStatistics(
|
||
|
OUT PMIB_IPSTATS pStats
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetIcmpStatistics(
|
||
|
OUT PMIB_ICMP pStats
|
||
|
);
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetTcpStatistics(
|
||
|
OUT PMIB_TCPSTATS pStats
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetUdpStatistics(
|
||
|
OUT PMIB_UDPSTATS pStats
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Used to set the ifAdminStatus on an interface. The only fields of the //
|
||
|
// MIB_IFROW that are relevant are the dwIndex (index of the interface //
|
||
|
// whose status needs to be set) and the dwAdminStatus which can be either //
|
||
|
// MIB_IF_ADMIN_STATUS_UP or MIB_IF_ADMIN_STATUS_DOWN //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
SetIfEntry(
|
||
|
IN PMIB_IFROW pIfRow
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Used to create, modify or delete a route. In all cases the //
|
||
|
// dwForwardIfIndex, dwForwardDest, dwForwardMask, dwForwardNextHop and //
|
||
|
// dwForwardPolicy MUST BE SPECIFIED. Currently dwForwardPolicy is unused //
|
||
|
// and MUST BE 0. //
|
||
|
// For a set, the complete MIB_IPFORWARDROW structure must be specified //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
CreateIpForwardEntry(
|
||
|
IN PMIB_IPFORWARDROW pRoute
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
SetIpForwardEntry(
|
||
|
IN PMIB_IPFORWARDROW pRoute
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
DeleteIpForwardEntry(
|
||
|
IN PMIB_IPFORWARDROW pRoute
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Used to set the ipForwarding to ON or OFF (currently only ON->OFF is //
|
||
|
// allowed) and to set the defaultTTL. If only one of the fields needs to //
|
||
|
// be modified and the other needs to be the same as before the other field //
|
||
|
// needs to be set to MIB_USE_CURRENT_TTL or MIB_USE_CURRENT_FORWARDING as //
|
||
|
// the case may be //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
SetIpStatistics(
|
||
|
IN PMIB_IPSTATS pIpStats
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Used to set the defaultTTL. //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
SetIpTTL(
|
||
|
UINT nTTL
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Used to create, modify or delete an ARP entry. In all cases the dwIndex //
|
||
|
// dwAddr field MUST BE SPECIFIED. //
|
||
|
// For a set, the complete MIB_IPNETROW structure must be specified //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
CreateIpNetEntry(
|
||
|
IN PMIB_IPNETROW pArpEntry
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
SetIpNetEntry(
|
||
|
IN PMIB_IPNETROW pArpEntry
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
DeleteIpNetEntry(
|
||
|
IN PMIB_IPNETROW pArpEntry
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FlushIpNetTable(
|
||
|
IN DWORD dwIfIndex
|
||
|
);
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Used to create or delete a Proxy ARP entry. The dwIndex is the index of //
|
||
|
// the interface on which to PARP for the dwAddress. If the interface is //
|
||
|
// of a type that doesnt support ARP, e.g. PPP, then the call will fail //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
CreateProxyArpEntry(
|
||
|
IN DWORD dwAddress,
|
||
|
IN DWORD dwMask,
|
||
|
IN DWORD dwIfIndex
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
DeleteProxyArpEntry(
|
||
|
IN DWORD dwAddress,
|
||
|
IN DWORD dwMask,
|
||
|
IN DWORD dwIfIndex
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Used to set the state of a TCP Connection. The only state that it can be //
|
||
|
// set to is MIB_TCP_STATE_DELETE_TCB. The complete MIB_TCPROW structure //
|
||
|
// MUST BE SPECIFIED //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
SetTcpEntry(
|
||
|
IN PMIB_TCPROW pTcpRow
|
||
|
);
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetInterfaceInfo(
|
||
|
IN PIP_INTERFACE_INFO pIfTable,
|
||
|
OUT PULONG dwOutBufLen
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetUniDirectionalAdapterInfo(OUT PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo,
|
||
|
OUT PULONG dwOutBufLen
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Gets the "best" outgoing interface for the specified destination address //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetBestInterface(
|
||
|
IN IPAddr dwDestAddr,
|
||
|
OUT PDWORD pdwBestIfIndex
|
||
|
);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Gets the best (longest matching prefix) route for the given destination //
|
||
|
// If the source address is also specified (i.e. is not 0x00000000), and //
|
||
|
// there are multiple "best" routes to the given destination, the returned //
|
||
|
// route will be one that goes out over the interface which has an address //
|
||
|
// that matches the source address //
|
||
|
// //
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetBestRoute(
|
||
|
IN DWORD dwDestAddr,
|
||
|
IN DWORD dwSourceAddr, OPTIONAL
|
||
|
OUT PMIB_IPFORWARDROW pBestRoute
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
NotifyAddrChange(
|
||
|
OUT PHANDLE Handle,
|
||
|
IN LPOVERLAPPED overlapped
|
||
|
);
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
NotifyRouteChange(
|
||
|
OUT PHANDLE Handle,
|
||
|
IN LPOVERLAPPED overlapped
|
||
|
);
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetAdapterIndex(
|
||
|
IN LPWSTR AdapterName,
|
||
|
OUT PULONG IfIndex
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
AddIPAddress(
|
||
|
IPAddr Address,
|
||
|
IPMask IpMask,
|
||
|
DWORD IfIndex,
|
||
|
PULONG NTEContext,
|
||
|
PULONG NTEInstance
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
DeleteIPAddress(
|
||
|
ULONG NTEContext
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetNetworkParams(
|
||
|
PFIXED_INFO pFixedInfo, PULONG pOutBufLen
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetAdaptersInfo(
|
||
|
PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetPerAdapterInfo(
|
||
|
ULONG IfIndex, PIP_PER_ADAPTER_INFO pPerAdapterInfo, PULONG pOutBufLen
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
IpReleaseAddress(
|
||
|
PIP_ADAPTER_INDEX_MAP AdapterInfo
|
||
|
);
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
IpRenewAddress(
|
||
|
PIP_ADAPTER_INDEX_MAP AdapterInfo
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
SendARP(
|
||
|
IPAddr DestIP,
|
||
|
IPAddr SrcIP,
|
||
|
PULONG pMacAddr,
|
||
|
PULONG PhyAddrLen
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
GetRTTAndHopCount(
|
||
|
IPAddr DestIpAddress,
|
||
|
PULONG HopCount,
|
||
|
ULONG MaxHops,
|
||
|
PULONG RTT
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
GetFriendlyIfIndex(
|
||
|
DWORD IfIndex
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
EnableRouter(
|
||
|
HANDLE* pHandle,
|
||
|
OVERLAPPED* pOverlapped
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
UnenableRouter(
|
||
|
OVERLAPPED* pOverlapped,
|
||
|
LPDWORD lpdwEnableCount OPTIONAL
|
||
|
);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#pragma option pop /*P_O_Pop*/
|
||
|
#endif //__IPHLPAPI_H__
|
||
|
|
||
|
|