Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _INC_NETIOAPI
      7 #define _INC_NETIOAPI
      8 
      9 #include <ws2def.h>
     10 #include <iprtrmib.h>
     11 #include <ifdef.h>
     12 #include <ntddndis.h>
     13 
     14 #ifndef ANY_SIZE
     15 #define ANY_SIZE 1
     16 #endif
     17 
     18 #if (_WIN32_WINNT >= 0x0600)
     19 
     20 #ifdef __cplusplus
     21 extern "C" {
     22 #endif
     23 
     24 #ifdef __IPHLPAPI_H__
     25 #define NETIO_STATUS DWORD
     26 #define NETIOAPI_API_ WINAPI
     27 #else
     28 #define NETIO_STATUS NTSTATUS
     29 #define NETIOAPI_API_ NTAPI
     30 #endif
     31 
     32 #define NETIOAPI_API NETIO_STATUS NETIOAPI_API_
     33 #define ConvertInterfaceLuidToName __MINGW_NAME_AW(ConvertInterfaceLuidToName)
     34 #define ConvertInterfaceNameToLuid __MINGW_NAME_AW(ConvertInterfaceNameToLuid)
     35 
     36 typedef enum _MIB_NOTIFICATION_TYPE {
     37   MibParameterNotification   = 0,
     38   MibAddInstance             = 1,
     39   MibDeleteInstance          = 2,
     40   MibInitialNotification     = 3
     41 } MIB_NOTIFICATION_TYPE, *PMIB_NOTIFICATION_TYPE;
     42 
     43 typedef struct _MIB_ANYCASTIPADDRESS_ROW {
     44   SOCKADDR_INET Address;
     45   NET_LUID      InterfaceLuid;
     46   NET_IFINDEX   InterfaceIndex;
     47   SCOPE_ID      ScopeId;
     48 } MIB_ANYCASTIPADDRESS_ROW, *PMIB_ANYCASTIPADDRESS_ROW;
     49 
     50 typedef struct _MIB_ANYCASTIPADDRESS_TABLE {
     51   ULONG                    NumEntries;
     52   MIB_ANYCASTIPADDRESS_ROW Table[ANY_SIZE];
     53 } MIB_ANYCASTIPADDRESS_TABLE, *PMIB_ANYCASTIPADDRESS_TABLE;
     54 
     55 typedef struct _IP_ADDRESS_PREFIX {
     56   SOCKADDR_INET Prefix;
     57   UINT8         PrefixLength;
     58 } IP_ADDRESS_PREFIX, *PIP_ADDRESS_PREFIX;
     59 
     60 typedef struct _MIB_IPFORWARD_ROW2 {
     61   NET_LUID          InterfaceLuid;
     62   NET_IFINDEX       InterfaceIndex;
     63   IP_ADDRESS_PREFIX DestinationPrefix;
     64   SOCKADDR_INET     NextHop;
     65   UCHAR             SitePrefixLength;
     66   ULONG             ValidLifetime;
     67   ULONG             PreferredLifetime;
     68   ULONG             Metric;
     69   NL_ROUTE_PROTOCOL Protocol;
     70   BOOLEAN           Loopback;
     71   BOOLEAN           AutoconfigureAddress;
     72   BOOLEAN           Publish;
     73   BOOLEAN           Immortal;
     74   ULONG             Age;
     75   NL_ROUTE_ORIGIN   Origin;
     76 } MIB_IPFORWARD_ROW2, *PMIB_IPFORWARD_ROW2;
     77 
     78 typedef struct _MIB_IPNET_ROW2 {
     79   SOCKADDR_INET     Address;
     80   NET_IFINDEX       InterfaceIndex;
     81   NET_LUID          InterfaceLuid;
     82   UCHAR             PhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
     83   ULONG             PhysicalAddressLength;
     84   NL_NEIGHBOR_STATE State;
     85   __C89_NAMELESS union {
     86     __C89_NAMELESS struct {
     87       BOOLEAN IsRouter  :1;
     88       BOOLEAN IsUnreachable  :1;
     89     };
     90     UCHAR  Flags;
     91   };
     92   union {
     93     ULONG LastReachable;
     94     ULONG LastUnreachable;
     95   } ReachabilityTime;
     96 } MIB_IPNET_ROW2, *PMIB_IPNET_ROW2;
     97 
     98 typedef struct _MIB_IPNET_TABLE2 {
     99   ULONG          NumEntries;
    100   MIB_IPNET_ROW2 Table[ANY_SIZE];
    101 } MIB_IPNET_TABLE2, *PMIB_IPNET_TABLE2;
    102 
    103 typedef struct _MIB_IPFORWARD_TABLE2 {
    104   ULONG              NumEntries;
    105   MIB_IPFORWARD_ROW2 Table[ANY_SIZE];
    106 } MIB_IPFORWARD_TABLE2, *PMIB_IPFORWARD_TABLE2;
    107 
    108 typedef struct _MIB_IPINTERFACE_ROW {
    109   ADDRESS_FAMILY                 Family;
    110   NET_LUID                       InterfaceLuid;
    111   NET_IFINDEX                    InterfaceIndex;
    112   ULONG                          MaxReassemblySize;
    113   ULONG64                        InterfaceIdentifier;
    114   ULONG                          MinRouterAdvertisementInterval;
    115   ULONG                          MaxRouterAdvertisementInterval;
    116   BOOLEAN                        AdvertisingEnabled;
    117   BOOLEAN                        ForwardingEnabled;
    118   BOOLEAN                        WeakHostSend;
    119   BOOLEAN                        WeakHostReceive;
    120   BOOLEAN                        UseAutomaticMetric;
    121   BOOLEAN                        UseNeighborUnreachabilityDetection;
    122   BOOLEAN                        ManagedAddressConfigurationSupported;
    123   BOOLEAN                        OtherStatefulConfigurationSupported;
    124   BOOLEAN                        AdvertiseDefaultRoute;
    125   NL_ROUTER_DISCOVERY_BEHAVIOR   RouterDiscoveryBehavior;
    126   ULONG                          DadTransmits;
    127   ULONG                          BaseReachableTime;
    128   ULONG                          RetransmitTime;
    129   ULONG                          PathMtuDiscoveryTimeout;
    130   NL_LINK_LOCAL_ADDRESS_BEHAVIOR LinkLocalAddressBehavior;
    131   ULONG                          LinkLocalAddressTimeout;
    132   ULONG                          ZoneIndices[ScopeLevelCount];
    133   ULONG                          SitePrefixLength;
    134   ULONG                          Metric;
    135   ULONG                          NlMtu;
    136   BOOLEAN                        Connected;
    137   BOOLEAN                        SupportsWakeUpPatterns;
    138   BOOLEAN                        SupportsNeighborDiscovery;
    139   BOOLEAN                        SupportsRouterDiscovery;
    140   ULONG                          ReachableTime;
    141   NL_INTERFACE_OFFLOAD_ROD       TransmitOffload;
    142   NL_INTERFACE_OFFLOAD_ROD       ReceiveOffload;
    143   BOOLEAN                        DisableDefaultRoutes;
    144 } MIB_IPINTERFACE_ROW, *PMIB_IPINTERFACE_ROW;
    145 
    146 typedef struct _MIB_IPINTERFACE_TABLE {
    147   ULONG               NumEntries;
    148   MIB_IPINTERFACE_ROW Table[ANY_SIZE];
    149 } MIB_IPINTERFACE_TABLE, *PMIB_IPINTERFACE_TABLE;
    150 
    151 typedef struct _MIB_UNICASTIPADDRESS_ROW {
    152   SOCKADDR_INET    Address;
    153   NET_LUID         InterfaceLuid;
    154   NET_IFINDEX      InterfaceIndex;
    155   NL_PREFIX_ORIGIN PrefixOrigin;
    156   NL_SUFFIX_ORIGIN SuffixOrigin;
    157   ULONG            ValidLifetime;
    158   ULONG            PreferredLifetime;
    159   UINT8            OnLinkPrefixLength;
    160   BOOLEAN          SkipAsSource;
    161   NL_DAD_STATE     DadState;
    162   SCOPE_ID         ScopeId;
    163   LARGE_INTEGER    CreationTimeStamp;
    164 } MIB_UNICASTIPADDRESS_ROW, *PMIB_UNICASTIPADDRESS_ROW;
    165 
    166 typedef struct _MIB_UNICASTIPADDRESS_TABLE {
    167   ULONG                    NumEntries;
    168   MIB_UNICASTIPADDRESS_ROW Table[ANY_SIZE];
    169 } MIB_UNICASTIPADDRESS_TABLE, *PMIB_UNICASTIPADDRESS_TABLE;
    170 
    171 typedef struct _MIB_IF_ROW2 {
    172   NET_LUID                   InterfaceLuid;
    173   NET_IFINDEX                InterfaceIndex;
    174   GUID                       InterfaceGuid;
    175   WCHAR                      Alias[IF_MAX_STRING_SIZE + 1];
    176   WCHAR                      Description[IF_MAX_STRING_SIZE + 1];
    177   ULONG                      PhysicalAddressLength;
    178    UCHAR                     PhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
    179    UCHAR                     PermanentPhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
    180   ULONG                      Mtu;
    181   IFTYPE                     Type;
    182   TUNNEL_TYPE                TunnelType;
    183   NDIS_MEDIUM                MediaType;
    184   NDIS_PHYSICAL_MEDIUM       PhysicalMediumType;
    185   NET_IF_ACCESS_TYPE         AccessType;
    186   NET_IF_DIRECTION_TYPE      DirectionType;
    187   struct {
    188     BOOLEAN HardwareInterface  :1;
    189     BOOLEAN FilterInterface  :1;
    190     BOOLEAN ConnectorPresent   :1;
    191     BOOLEAN NotAuthenticated  :1;
    192     BOOLEAN NotMediaConnected  :1;
    193     BOOLEAN Paused  :1;
    194     BOOLEAN LowPower  :1;
    195     BOOLEAN EndPointInterface  :1;
    196   } InterfaceAndOperStatusFlags;
    197   IF_OPER_STATUS             OperStatus;
    198   NET_IF_ADMIN_STATUS        AdminStatus;
    199   NET_IF_MEDIA_CONNECT_STATE MediaConnectState;
    200   NET_IF_NETWORK_GUID        NetworkGuid;
    201   NET_IF_CONNECTION_TYPE     ConnectionType;
    202   ULONG64                    TransmitLinkSpeed;
    203   ULONG64                    ReceiveLinkSpeed;
    204   ULONG64                    InOctets;
    205   ULONG64                    InUcastPkts;
    206   ULONG64                    InNUcastPkts;
    207   ULONG64                    InDiscards;
    208   ULONG64                    InErrors;
    209   ULONG64                    InUnknownProtos;
    210   ULONG64                    InUcastOctets;
    211   ULONG64                    InMulticastOctets;
    212   ULONG64                    InBroadcastOctets;
    213   ULONG64                    OutOctets;
    214   ULONG64                    OutUcastPkts;
    215   ULONG64                    OutNUcastPkts;
    216   ULONG64                    OutDiscards;
    217   ULONG64                    OutErrors;
    218   ULONG64                    OutUcastOctets;
    219   ULONG64                    OutMulticastOctets;
    220   ULONG64                    OutBroadcastOctets;
    221   ULONG64                    OutQLen;
    222 } MIB_IF_ROW2, *PMIB_IF_ROW2;
    223 
    224 typedef struct _MIB_IF_TABLE2 {
    225   ULONG       NumEntries;
    226   MIB_IF_ROW2 Table[ANY_SIZE];
    227 } MIB_IF_TABLE2, *PMIB_IF_TABLE2;
    228 
    229 typedef struct _MIB_IFSTACK_ROW {
    230   NET_IFINDEX HigherLayerInterfaceIndex;
    231   NET_IFINDEX LowerLayerInterfaceIndex;
    232 } MIB_IFSTACK_ROW, *PMIB_IFSTACK_ROW;
    233 
    234 typedef struct _MIB_IFSTACK_TABLE {
    235   ULONG           NumEntries;
    236   MIB_IFSTACK_ROW Table[ANY_SIZE];
    237 } MIB_IFSTACK_TABLE, *PMIB_IFSTACK_TABLE;
    238 
    239 typedef struct _MIB_INVERTEDIFSTACK_ROW {
    240   NET_IFINDEX LowerLayerInterfaceIndex;
    241   NET_IFINDEX HigherLayerInterfaceIndex;
    242 } MIB_INVERTEDIFSTACK_ROW, *PMIB_INVERTEDIFSTACK_ROW;
    243 
    244 typedef struct _MIB_INVERTEDIFSTACK_TABLE {
    245   ULONG                   NumEntries;
    246   MIB_INVERTEDIFSTACK_ROW Table[ANY_SIZE];
    247 } MIB_INVERTEDIFSTACK_TABLE, *PMIB_INVERTEDIFSTACK_TABLE;
    248 
    249 typedef struct _MIB_IPPATH_ROW {
    250   SOCKADDR_INET Source;
    251   SOCKADDR_INET Destination;
    252   NET_LUID      InterfaceLuid;
    253   NET_IFINDEX   InterfaceIndex;
    254   SOCKADDR_INET CurrentNextHop;
    255   ULONG         PathMtu;
    256   ULONG         RttMean;
    257   ULONG         RttDeviation;
    258   __C89_NAMELESS union {
    259     ULONG LastReachable;
    260     ULONG LastUnreachable;
    261   };
    262   BOOLEAN       IsReachable;
    263   ULONG64       LinkTransmitSpeed;
    264   ULONG64       LinkReceiveSpeed;
    265 } MIB_IPPATH_ROW, *PMIB_IPPATH_ROW;
    266 
    267 typedef struct _MIB_IPPATH_TABLE {
    268   ULONG          NumEntries;
    269   MIB_IPPATH_ROW Table[ANY_SIZE];
    270 } MIB_IPPATH_TABLE, *PMIB_IPPATH_TABLE;
    271 
    272 typedef struct _MIB_MULTICASTIPADDRESS_ROW {
    273   SOCKADDR_INET Address;
    274   NET_IFINDEX   InterfaceIndex;
    275   NET_LUID      InterfaceLuid;
    276   SCOPE_ID      ScopeId;
    277 } MIB_MULTICASTIPADDRESS_ROW, *PMIB_MULTICASTIPADDRESS_ROW;
    278 
    279 typedef struct _MIB_MULTICASTIPADDRESS_TABLE {
    280   ULONG                      NumEntries;
    281   MIB_MULTICASTIPADDRESS_ROW Table[ANY_SIZE];
    282 } MIB_MULTICASTIPADDRESS_TABLE, *PMIB_MULTICASTIPADDRESS_TABLE;
    283 
    284 NETIOAPI_API CancelMibChangeNotify2(
    285   HANDLE NotificationHandle
    286 );
    287 
    288 NETIO_STATUS WINAPI ConvertInterfaceAliasToLuid(
    289   const WCHAR *InterfaceAlias,
    290   PNET_LUID InterfaceLuid
    291 );
    292 
    293 NETIO_STATUS WINAPI ConvertInterfaceLuidToNameA(
    294   const NET_LUID *InterfaceLuid,
    295   PSTR InterfaceName,
    296   SIZE_T Length
    297 );
    298 
    299 NETIO_STATUS WINAPI ConvertInterfaceLuidToNameW(
    300   const NET_LUID *InterfaceLuid,
    301   PWSTR InterfaceName,
    302   SIZE_T Length
    303 );
    304 
    305 NETIO_STATUS WINAPI ConvertInterfaceNameToLuidA(
    306   const CHAR *InterfaceName,
    307   PNET_LUID InterfaceLuid
    308 );
    309 
    310 NETIO_STATUS WINAPI ConvertInterfaceNameToLuidW(
    311   const WCHAR *InterfaceName,
    312   PNET_LUID InterfaceLuid
    313 );
    314 
    315 PCHAR WINAPI if_indextoname(
    316   NET_IFINDEX InterfaceIndex,
    317   PCHAR InterfaceName
    318 );
    319 
    320 NET_IFINDEX WINAPI if_nametoindex(
    321   PCSTR InterfaceName
    322 );
    323 
    324 NETIO_STATUS WINAPI ConvertInterfaceGuidToLuid(
    325   const GUID *InterfaceGuid,
    326   PNET_LUID InterfaceLuid
    327 );
    328 
    329 NETIO_STATUS WINAPI ConvertInterfaceIndexToLuid(
    330   NET_IFINDEX InterfaceIndex,
    331   PNET_LUID InterfaceLuid
    332 );
    333 
    334 NETIO_STATUS WINAPI ConvertInterfaceLuidToAlias(
    335   const NET_LUID *InterfaceLuid,
    336   PWSTR InterfaceAlias,
    337   SIZE_T Length
    338 );
    339 
    340 NETIO_STATUS WINAPI ConvertInterfaceLuidToGuid(
    341   const NET_LUID *InterfaceLuid,
    342   GUID *InterfaceGuid
    343 );
    344 
    345 NETIO_STATUS WINAPI ConvertInterfaceLuidToIndex(
    346   const NET_LUID *InterfaceLuid,
    347   PNET_IFINDEX InterfaceIndex
    348 );
    349 
    350 NETIO_STATUS WINAPI ConvertIpv4MaskToLength(
    351   ULONG Mask,
    352   PUINT8 MaskLength
    353 );
    354 
    355 NETIO_STATUS WINAPI ConvertLengthToIpv4Mask(
    356   ULONG MaskLength,
    357   PULONG Mask
    358 );
    359 
    360 NETIOAPI_API CreateAnycastIpAddressEntry(
    361   const MIB_ANYCASTIPADDRESS_ROW *Row
    362 );
    363 
    364 NETIOAPI_API CreateIpForwardEntry2(
    365   const MIB_IPFORWARD_ROW2 *Row
    366 );
    367 
    368 NETIOAPI_API GetIpNetTable2(
    369   ADDRESS_FAMILY Family,
    370   PMIB_IPNET_TABLE2 *Table
    371 );
    372 
    373 NETIOAPI_API GetIpNetEntry2(
    374   PMIB_IPNET_ROW2 Row
    375 );
    376 
    377 NETIOAPI_API CreateIpNetEntry2(
    378   const MIB_IPNET_ROW2 *Row
    379 );
    380 
    381 NETIOAPI_API CreateSortedAddressPairs(
    382   const PSOCKADDR_IN6 SourceAddressList,
    383   ULONG SourceAddressCount,
    384   const PSOCKADDR_IN6 DestinationAddressList,
    385   ULONG DestinationAddressCount,
    386   ULONG AddressSortOptions,
    387   PSOCKADDR_IN6_PAIR *SortedAddressPairList,
    388   ULONG *SortedAddressPairCount
    389 );
    390 
    391 NETIOAPI_API CreateIpNetEntry2(
    392   const MIB_IPNET_ROW2 *Row
    393 );
    394 
    395 NETIOAPI_API CreateUnicastIpAddressEntry(
    396   const MIB_UNICASTIPADDRESS_ROW *Row
    397 );
    398 
    399 NETIOAPI_API DeleteIpForwardEntry2(
    400   const MIB_IPFORWARD_ROW2 *Row
    401 );
    402 
    403 NETIOAPI_API GetIpForwardTable2(
    404   ADDRESS_FAMILY  Family,
    405   PMIB_IPFORWARD_TABLE2 *Table
    406 );
    407 
    408 VOID NETIOAPI_API_ FreeMibTable(
    409   PVOID Memory
    410 );
    411 
    412 NETIOAPI_API DeleteIpNetEntry2(
    413   const MIB_IPNET_ROW2 *Row
    414 );
    415 
    416 NETIOAPI_API GetIpNetTable2(
    417   ADDRESS_FAMILY  Family,
    418   PMIB_IPNET_TABLE2 *Table
    419 );
    420 
    421 NETIOAPI_API DeleteUnicastIpAddressEntry(
    422   const MIB_UNICASTIPADDRESS_ROW *Row
    423 );
    424 
    425 NETIOAPI_API GetUnicastIpAddressEntry(
    426   PMIB_UNICASTIPADDRESS_ROW Row
    427 );
    428 
    429 NETIOAPI_API DeleteAnycastIpAddressEntry(
    430   const MIB_ANYCASTIPADDRESS_ROW *Row
    431 );
    432 
    433 NETIOAPI_API FlushIpNetTable2(
    434   ADDRESS_FAMILY  Family,
    435   NET_IFINDEX InterfaceIndex
    436 );
    437 
    438 NETIOAPI_API FlushIpPathTable(
    439   ADDRESS_FAMILY  Family
    440 );
    441 
    442 NETIOAPI_API GetAnycastIpAddressEntry(
    443   PMIB_ANYCASTIPADDRESS_ROW Row
    444 );
    445 
    446 NETIOAPI_API GetAnycastIpAddressTable(
    447   ADDRESS_FAMILY  Family,
    448   PMIB_ANYCASTIPADDRESS_TABLE *Table
    449 );
    450 
    451 NETIOAPI_API GetBestRoute2(
    452   NET_LUID *InterfaceLuid,
    453   NET_IFINDEX InterfaceIndex,
    454   const SOCKADDR_INET *SourceAddress,
    455   const SOCKADDR_INET *DestinationAddress,
    456   ULONG AddressSortOptions,
    457   PMIB_IPFORWARD_ROW2 BestRoute,
    458   SOCKADDR_INET *BestSourceAddress
    459 );
    460 
    461 NETIOAPI_API GetIfEntry2(
    462   PMIB_IF_ROW2 Row
    463 );
    464 
    465 NETIOAPI_API GetIfTable2(
    466   PMIB_IF_TABLE2 *Table
    467 );
    468 
    469 NETIOAPI_API  GetIfStackTable(
    470   PMIB_IFSTACK_TABLE *Table
    471 );
    472 
    473 typedef enum _MIB_IF_TABLE_LEVEL {
    474   MibIfTableNormal = 0,
    475   MibIfTableRaw    = 1
    476 } MIB_IF_TABLE_LEVEL, *PMIB_IF_TABLE_LEVEL;
    477 
    478 NETIOAPI_API GetIfTable2Ex(
    479   MIB_IF_TABLE_LEVEL Level,
    480   PMIB_IF_TABLE2 *Table
    481 );
    482 
    483 NETIOAPI_API  GetInvertedIfStackTable(
    484   PMIB_INVERTEDIFSTACK_TABLE *Table
    485 );
    486 
    487 NETIOAPI_API GetIpForwardEntry2(
    488   PMIB_IPFORWARD_ROW2 Row
    489 );
    490 
    491 NETIOAPI_API GetIpInterfaceEntry(
    492   PMIB_IPINTERFACE_ROW Row
    493 );
    494 
    495 NETIOAPI_API  GetIpInterfaceTable(
    496   ADDRESS_FAMILY  Family,
    497   PMIB_IPINTERFACE_TABLE *Table
    498 );
    499 
    500 NETIOAPI_API GetIpNetEntry2(
    501   PMIB_IPNET_ROW2 Row
    502 );
    503 
    504 NETIOAPI_API GetIpPathEntry(
    505   PMIB_IPPATH_ROW Row
    506 );
    507 
    508 NETIOAPI_API GetIpPathTable(
    509   ADDRESS_FAMILY  Family,
    510   PMIB_IPPATH_TABLE *Table
    511 );
    512 
    513 NETIOAPI_API GetMulticastIpAddressEntry(
    514   PMIB_MULTICASTIPADDRESS_ROW Row
    515 );
    516 
    517 NETIOAPI_API GetMulticastIpAddressTable(
    518   ADDRESS_FAMILY  Family,
    519   PMIB_MULTICASTIPADDRESS_TABLE *Table
    520 );
    521 
    522 NETIOAPI_API GetTeredoPort(
    523   USHORT *Port
    524 );
    525 
    526 typedef void (WINAPI *PTEREDO_PORT_CHANGE_CALLBACK)(void* callerContext, USHORT Port, MIB_NOTIFICATION_TYPE type);
    527 
    528 NETIOAPI_API NotifyTeredoPortChange(
    529   PTEREDO_PORT_CHANGE_CALLBACK Callback,
    530   PVOID CallerContext,
    531   BOOLEAN InitialNotification,
    532   HANDLE *NotificationHandle
    533 );
    534 
    535 typedef void (WINAPI *PSTABLE_UNICAST_IPADDRESS_TABLE_CALLBACK)(void* callerContext, MIB_UNICASTIPADDRESS_TABLE *AddressTable);
    536 
    537 NETIOAPI_API NotifyStableUnicastIpAddressTable(
    538   ADDRESS_FAMILY  Family,
    539   PMIB_UNICASTIPADDRESS_TABLE *Table,
    540   PSTABLE_UNICAST_IPADDRESS_TABLE_CALLBACK CallerCallback,
    541   PVOID CallerContext,
    542   HANDLE *NotificationHandle
    543 );
    544 
    545 typedef void (WINAPI *PUNICAST_IPADDRESS_CHANGE_CALLBACK)(void* callerContext, PMIB_UNICASTIPADDRESS_ROW row, MIB_NOTIFICATION_TYPE type);
    546 
    547 NETIOAPI_API NotifyUnicastIpAddressChange(
    548   ADDRESS_FAMILY Family,
    549   PUNICAST_IPADDRESS_CHANGE_CALLBACK Callback,
    550   PVOID CallerContext,
    551   BOOLEAN InitialNotification,
    552   HANDLE *NotificationHandle
    553 );
    554 
    555 NETIOAPI_API GetUnicastIpAddressTable(
    556   ADDRESS_FAMILY  Family,
    557   PMIB_UNICASTIPADDRESS_TABLE *Table
    558 );
    559 
    560 typedef VOID (*PIPINTERFACE_CHANGE_CALLBACK) (
    561   PVOID CallerContext, PMIB_IPINTERFACE_ROW Row,
    562   MIB_NOTIFICATION_TYPE NotificationType
    563 );
    564 
    565 NETIOAPI_API NotifyIpInterfaceChange(
    566   ADDRESS_FAMILY Family,
    567   PIPINTERFACE_CHANGE_CALLBACK Callback,
    568   PVOID CallerContext,
    569   BOOLEAN InitialNotification,
    570   HANDLE *NotificationHandle
    571 );
    572 
    573 typedef LPVOID PIPFORWARD_CHANGE_CALLBACK;
    574 
    575 NETIOAPI_API NotifyRouteChange2(
    576   ADDRESS_FAMILY Family,
    577   PIPFORWARD_CHANGE_CALLBACK Callback,
    578   PVOID CallerContext,
    579   BOOLEAN InitialNotification,
    580   HANDLE *NotificationHandle
    581 );
    582 
    583 NETIOAPI_API ResolveIpNetEntry2(
    584   PMIB_IPNET_ROW2 Row,
    585   const SOCKADDR_INET *SourceAddress
    586 );
    587 
    588 NETIOAPI_API SetIpForwardEntry2(
    589   const MIB_IPFORWARD_ROW2 *Route
    590 );
    591 
    592 NETIOAPI_API SetIpInterfaceEntry(
    593   PMIB_IPINTERFACE_ROW Row
    594 );
    595 
    596 NETIOAPI_API SetIpNetEntry2(
    597   PMIB_IPNET_ROW2 Row
    598 );
    599 
    600 NETIOAPI_API SetUnicastIpAddressEntry(
    601   const MIB_UNICASTIPADDRESS_ROW *Row
    602 );
    603 
    604 #ifdef __cplusplus
    605 }
    606 #endif
    607 
    608 #endif /*(_WIN32_WINNT >= 0x0600)*/
    609 
    610 #endif /*_INC_NETIOAPI*/
    611