1 /**
2  * This file is part of the mingw-w64 runtime package.
3  * No warranty is given; refer to the file DISCLAIMER within this pack
4  */
5 
6 #ifndef _NETIOAPI_H_
7 #define _NETIOAPI_H_
8 
9 #include <winapifamily.h>
10 
11 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 #ifndef ANY_SIZE
18 #define ANY_SIZE 1
19 #endif
20 
21 #ifdef __IPHLPAPI_H__
22 #define NETIO_STATUS DWORD
23 #define NETIO_SUCCESS(x) ((x) == NO_ERROR)
24 #define NETIOAPI_API_ WINAPI
25 #else
26 #include <ws2def.h>
27 #ifndef __CYGWIN__
28 #include <ws2ipdef.h>
29 #endif
30 #include <iprtrmib.h>
31 #include <ifdef.h>
32 #include <nldef.h>
33 
34 #define NETIO_STATUS NTSTATUS
35 #define NETIO_SUCCESS(x) NT_SUCCESS (x)
36 #define NETIOAPI_API_ NTAPI
37 #endif
38 
39 #define _NETIOAPI_SUCCESS_
40 #define NETIOAPI_API NETIO_STATUS NETIOAPI_API_
41 
42 #define IF_NAMESIZE NDIS_IF_MAX_STRING_SIZE
43 
44   typedef enum _MIB_NOTIFICATION_TYPE {
45     MibParameterNotification,
46     MibAddInstance,
47     MibDeleteInstance,
48     MibInitialNotification
49   } MIB_NOTIFICATION_TYPE,*PMIB_NOTIFICATION_TYPE;
50 
51 #ifdef _WS2IPDEF_
52 #include <ntddndis.h>
53 
54 #define MIB_INVALID_TEREDO_PORT_NUMBER 0
55 
56   typedef enum _MIB_IF_TABLE_LEVEL {
57     MibIfTableNormal,
58     MibIfTableRaw
59   } MIB_IF_TABLE_LEVEL, *PMIB_IF_TABLE_LEVEL;
60 
61   typedef struct _MIB_IF_ROW2 {
62     NET_LUID InterfaceLuid;
63     NET_IFINDEX InterfaceIndex;
64     GUID InterfaceGuid;
65     WCHAR Alias[IF_MAX_STRING_SIZE + 1];
66     WCHAR Description[IF_MAX_STRING_SIZE + 1];
67     ULONG PhysicalAddressLength;
68     UCHAR PhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
69     UCHAR PermanentPhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
70     ULONG Mtu;
71     IFTYPE Type;
72     TUNNEL_TYPE TunnelType;
73     NDIS_MEDIUM MediaType;
74     NDIS_PHYSICAL_MEDIUM PhysicalMediumType;
75     NET_IF_ACCESS_TYPE AccessType;
76     NET_IF_DIRECTION_TYPE DirectionType;
77     struct {
78       BOOLEAN HardwareInterface : 1;
79       BOOLEAN FilterInterface : 1;
80       BOOLEAN ConnectorPresent : 1;
81       BOOLEAN NotAuthenticated : 1;
82       BOOLEAN NotMediaConnected : 1;
83       BOOLEAN Paused : 1;
84       BOOLEAN LowPower : 1;
85       BOOLEAN EndPointInterface : 1;
86     } InterfaceAndOperStatusFlags;
87     IF_OPER_STATUS OperStatus;
88     NET_IF_ADMIN_STATUS AdminStatus;
89     NET_IF_MEDIA_CONNECT_STATE MediaConnectState;
90     NET_IF_NETWORK_GUID NetworkGuid;
91     NET_IF_CONNECTION_TYPE ConnectionType;
92     ULONG64 TransmitLinkSpeed;
93     ULONG64 ReceiveLinkSpeed;
94     ULONG64 InOctets;
95     ULONG64 InUcastPkts;
96     ULONG64 InNUcastPkts;
97     ULONG64 InDiscards;
98     ULONG64 InErrors;
99     ULONG64 InUnknownProtos;
100     ULONG64 InUcastOctets;
101     ULONG64 InMulticastOctets;
102     ULONG64 InBroadcastOctets;
103     ULONG64 OutOctets;
104     ULONG64 OutUcastPkts;
105     ULONG64 OutNUcastPkts;
106     ULONG64 OutDiscards;
107     ULONG64 OutErrors;
108     ULONG64 OutUcastOctets;
109     ULONG64 OutMulticastOctets;
110     ULONG64 OutBroadcastOctets;
111     ULONG64 OutQLen;
112   } MIB_IF_ROW2,*PMIB_IF_ROW2;
113 
114   typedef struct _MIB_IF_TABLE2 {
115     ULONG NumEntries;
116     MIB_IF_ROW2 Table[ANY_SIZE];
117   } MIB_IF_TABLE2, *PMIB_IF_TABLE2;
118 
119   typedef struct _MIB_IPINTERFACE_ROW {
120     ADDRESS_FAMILY Family;
121     NET_LUID InterfaceLuid;
122     NET_IFINDEX InterfaceIndex;
123     ULONG MaxReassemblySize;
124     ULONG64 InterfaceIdentifier;
125     ULONG MinRouterAdvertisementInterval;
126     ULONG MaxRouterAdvertisementInterval;
127     BOOLEAN AdvertisingEnabled;
128     BOOLEAN ForwardingEnabled;
129     BOOLEAN WeakHostSend;
130     BOOLEAN WeakHostReceive;
131     BOOLEAN UseAutomaticMetric;
132     BOOLEAN UseNeighborUnreachabilityDetection;
133     BOOLEAN ManagedAddressConfigurationSupported;
134     BOOLEAN OtherStatefulConfigurationSupported;
135     BOOLEAN AdvertiseDefaultRoute;
136     NL_ROUTER_DISCOVERY_BEHAVIOR RouterDiscoveryBehavior;
137     ULONG DadTransmits;
138     ULONG BaseReachableTime;
139     ULONG RetransmitTime;
140     ULONG PathMtuDiscoveryTimeout;
141     NL_LINK_LOCAL_ADDRESS_BEHAVIOR LinkLocalAddressBehavior;
142     ULONG LinkLocalAddressTimeout;
143     ULONG ZoneIndices[ScopeLevelCount];
144     ULONG SitePrefixLength;
145     ULONG Metric;
146     ULONG NlMtu;
147     BOOLEAN Connected;
148     BOOLEAN SupportsWakeUpPatterns;
149     BOOLEAN SupportsNeighborDiscovery;
150     BOOLEAN SupportsRouterDiscovery;
151     ULONG ReachableTime;
152     NL_INTERFACE_OFFLOAD_ROD TransmitOffload;
153     NL_INTERFACE_OFFLOAD_ROD ReceiveOffload;
154     BOOLEAN DisableDefaultRoutes;
155   } MIB_IPINTERFACE_ROW,*PMIB_IPINTERFACE_ROW;
156 
157   typedef struct _MIB_IPINTERFACE_TABLE {
158     ULONG NumEntries;
159     MIB_IPINTERFACE_ROW Table[ANY_SIZE];
160   } MIB_IPINTERFACE_TABLE,*PMIB_IPINTERFACE_TABLE;
161 
162   typedef struct _MIB_IFSTACK_ROW {
163     NET_IFINDEX HigherLayerInterfaceIndex;
164     NET_IFINDEX LowerLayerInterfaceIndex;
165   } MIB_IFSTACK_ROW,*PMIB_IFSTACK_ROW;
166 
167   typedef struct _MIB_INVERTEDIFSTACK_ROW {
168     NET_IFINDEX LowerLayerInterfaceIndex;
169     NET_IFINDEX HigherLayerInterfaceIndex;
170   } MIB_INVERTEDIFSTACK_ROW,*PMIB_INVERTEDIFSTACK_ROW;
171 
172   typedef struct _MIB_IFSTACK_TABLE {
173     ULONG NumEntries;
174     MIB_IFSTACK_ROW Table[ANY_SIZE];
175   } MIB_IFSTACK_TABLE,*PMIB_IFSTACK_TABLE;
176 
177   typedef struct _MIB_INVERTEDIFSTACK_TABLE {
178     ULONG NumEntries;
179     MIB_INVERTEDIFSTACK_ROW Table[ANY_SIZE];
180   } MIB_INVERTEDIFSTACK_TABLE,*PMIB_INVERTEDIFSTACK_TABLE;
181 
182   typedef struct _MIB_IP_NETWORK_CONNECTION_BANDWIDTH_ESTIMATES {
183     NL_BANDWIDTH_INFORMATION InboundBandwidthInformation;
184     NL_BANDWIDTH_INFORMATION OutboundBandwidthInformation;
185   } MIB_IP_NETWORK_CONNECTION_BANDWIDTH_ESTIMATES, *PMIB_IP_NETWORK_CONNECTION_BANDWIDTH_ESTIMATES;
186 
187   typedef struct _MIB_UNICASTIPADDRESS_ROW {
188     SOCKADDR_INET Address;
189     NET_LUID InterfaceLuid;
190     NET_IFINDEX InterfaceIndex;
191     NL_PREFIX_ORIGIN PrefixOrigin;
192     NL_SUFFIX_ORIGIN SuffixOrigin;
193     ULONG ValidLifetime;
194     ULONG PreferredLifetime;
195     UINT8 OnLinkPrefixLength;
196     BOOLEAN SkipAsSource;
197     NL_DAD_STATE DadState;
198     SCOPE_ID ScopeId;
199     LARGE_INTEGER CreationTimeStamp;
200   } MIB_UNICASTIPADDRESS_ROW,*PMIB_UNICASTIPADDRESS_ROW;
201 
202   typedef struct _MIB_UNICASTIPADDRESS_TABLE {
203     ULONG NumEntries;
204     MIB_UNICASTIPADDRESS_ROW Table[ANY_SIZE];
205   } MIB_UNICASTIPADDRESS_TABLE,*PMIB_UNICASTIPADDRESS_TABLE;
206 
207   typedef struct _MIB_ANYCASTIPADDRESS_ROW {
208     SOCKADDR_INET Address;
209     NET_LUID InterfaceLuid;
210     NET_IFINDEX InterfaceIndex;
211     SCOPE_ID ScopeId;
212   } MIB_ANYCASTIPADDRESS_ROW,*PMIB_ANYCASTIPADDRESS_ROW;
213 
214   typedef struct _MIB_ANYCASTIPADDRESS_TABLE {
215     ULONG NumEntries;
216     MIB_ANYCASTIPADDRESS_ROW Table[ANY_SIZE];
217   } MIB_ANYCASTIPADDRESS_TABLE,*PMIB_ANYCASTIPADDRESS_TABLE;
218 
219   typedef struct _MIB_MULTICASTIPADDRESS_ROW {
220     SOCKADDR_INET Address;
221     NET_IFINDEX InterfaceIndex;
222     NET_LUID InterfaceLuid;
223     SCOPE_ID ScopeId;
224   } MIB_MULTICASTIPADDRESS_ROW,*PMIB_MULTICASTIPADDRESS_ROW;
225 
226   typedef struct _MIB_MULTICASTIPADDRESS_TABLE {
227     ULONG NumEntries;
228     MIB_MULTICASTIPADDRESS_ROW Table[ANY_SIZE];
229   } MIB_MULTICASTIPADDRESS_TABLE,*PMIB_MULTICASTIPADDRESS_TABLE;
230 
231   typedef struct _IP_ADDRESS_PREFIX {
232     SOCKADDR_INET Prefix;
233     UINT8 PrefixLength;
234   } IP_ADDRESS_PREFIX,*PIP_ADDRESS_PREFIX;
235 
236   typedef struct _MIB_IPFORWARD_ROW2 {
237     NET_LUID InterfaceLuid;
238     NET_IFINDEX InterfaceIndex;
239     IP_ADDRESS_PREFIX DestinationPrefix;
240     SOCKADDR_INET NextHop;
241     UCHAR SitePrefixLength;
242     ULONG ValidLifetime;
243     ULONG PreferredLifetime;
244     ULONG Metric;
245     NL_ROUTE_PROTOCOL Protocol;
246     BOOLEAN Loopback;
247     BOOLEAN AutoconfigureAddress;
248     BOOLEAN Publish;
249     BOOLEAN Immortal;
250     ULONG Age;
251     NL_ROUTE_ORIGIN Origin;
252   } MIB_IPFORWARD_ROW2,*PMIB_IPFORWARD_ROW2;
253 
254   typedef struct _MIB_IPFORWARD_TABLE2 {
255     ULONG NumEntries;
256     MIB_IPFORWARD_ROW2 Table[ANY_SIZE];
257   } MIB_IPFORWARD_TABLE2,*PMIB_IPFORWARD_TABLE2;
258 
259   typedef struct _MIB_IPPATH_ROW {
260     SOCKADDR_INET Source;
261     SOCKADDR_INET Destination;
262     NET_LUID InterfaceLuid;
263     NET_IFINDEX InterfaceIndex;
264     SOCKADDR_INET CurrentNextHop;
265     ULONG PathMtu;
266     ULONG RttMean;
267     ULONG RttDeviation;
268     __C89_NAMELESS union {
269       ULONG LastReachable;
270       ULONG LastUnreachable;
271     };
272     BOOLEAN IsReachable;
273     ULONG64 LinkTransmitSpeed;
274     ULONG64 LinkReceiveSpeed;
275   } MIB_IPPATH_ROW,*PMIB_IPPATH_ROW;
276 
277   typedef struct _MIB_IPPATH_TABLE {
278     ULONG NumEntries;
279     MIB_IPPATH_ROW Table[ANY_SIZE];
280   } MIB_IPPATH_TABLE,*PMIB_IPPATH_TABLE;
281 
282   typedef struct _MIB_IPNET_ROW2 {
283     SOCKADDR_INET Address;
284     NET_IFINDEX InterfaceIndex;
285     NET_LUID InterfaceLuid;
286     UCHAR PhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
287     ULONG PhysicalAddressLength;
288     NL_NEIGHBOR_STATE State;
289     __C89_NAMELESS union {
290       __C89_NAMELESS struct {
291 	BOOLEAN IsRouter : 1;
292 	BOOLEAN IsUnreachable : 1;
293       };
294       UCHAR Flags;
295     };
296     union {
297       ULONG LastReachable;
298       ULONG LastUnreachable;
299     } ReachabilityTime;
300   } MIB_IPNET_ROW2, *PMIB_IPNET_ROW2;
301 
302   typedef struct _MIB_IPNET_TABLE2 {
303     ULONG NumEntries;
304     MIB_IPNET_ROW2 Table[ANY_SIZE];
305   } MIB_IPNET_TABLE2, *PMIB_IPNET_TABLE2;
306 
307   typedef VOID (NETIOAPI_API_ *PIPINTERFACE_CHANGE_CALLBACK) (PVOID CallerContext, PMIB_IPINTERFACE_ROW Row, MIB_NOTIFICATION_TYPE NotificationType);
308   typedef VOID (NETIOAPI_API_ *PUNICAST_IPADDRESS_CHANGE_CALLBACK) (PVOID CallerContext, PMIB_UNICASTIPADDRESS_ROW Row, MIB_NOTIFICATION_TYPE NotificationType);
309   typedef VOID (NETIOAPI_API_ *PSTABLE_UNICAST_IPADDRESS_TABLE_CALLBACK) (PVOID CallerContext, PMIB_UNICASTIPADDRESS_TABLE AddressTable);
310 
311   typedef VOID (NETIOAPI_API_ *PTEREDO_PORT_CHANGE_CALLBACK) (PVOID CallerContext, USHORT Port, MIB_NOTIFICATION_TYPE NotificationType);
312   typedef VOID (NETIOAPI_API_ *PIPFORWARD_CHANGE_CALLBACK) (PVOID CallerContext, PMIB_IPFORWARD_ROW2 Row, MIB_NOTIFICATION_TYPE NotificationType);
313 
314   NETIO_STATUS NETIOAPI_API_ GetIfEntry2 (PMIB_IF_ROW2 Row);
315   NETIO_STATUS NETIOAPI_API_ GetIfTable2 (PMIB_IF_TABLE2 *Table);
316   NETIO_STATUS NETIOAPI_API_ GetIfTable2Ex (MIB_IF_TABLE_LEVEL Level, PMIB_IF_TABLE2 *Table);
317   NETIO_STATUS NETIOAPI_API_ GetIfStackTable (PMIB_IFSTACK_TABLE *Table);
318   NETIO_STATUS NETIOAPI_API_ GetInvertedIfStackTable (PMIB_INVERTEDIFSTACK_TABLE *Table);
319   NETIO_STATUS NETIOAPI_API_ GetIpInterfaceEntry (PMIB_IPINTERFACE_ROW Row);
320   NETIO_STATUS NETIOAPI_API_ GetIpInterfaceTable (ADDRESS_FAMILY Family, PMIB_IPINTERFACE_TABLE *Table);
321   VOID NETIOAPI_API_ InitializeIpInterfaceEntry (PMIB_IPINTERFACE_ROW Row);
322   NETIO_STATUS NETIOAPI_API_ NotifyIpInterfaceChange (ADDRESS_FAMILY Family, PIPINTERFACE_CHANGE_CALLBACK Callback, PVOID CallerContext, BOOLEAN InitialNotification, HANDLE *NotificationHandle);
323   NETIO_STATUS NETIOAPI_API_ SetIpInterfaceEntry (PMIB_IPINTERFACE_ROW Row);
324   NETIO_STATUS NETIOAPI_API_ GetIpNetworkConnectionBandwidthEstimates (NET_IFINDEX InterfaceIndex, ADDRESS_FAMILY AddressFamily, PMIB_IP_NETWORK_CONNECTION_BANDWIDTH_ESTIMATES BandwidthEstimates);
325   NETIO_STATUS NETIOAPI_API_ CreateUnicastIpAddressEntry (CONST MIB_UNICASTIPADDRESS_ROW *Row);
326   NETIO_STATUS NETIOAPI_API_ DeleteUnicastIpAddressEntry (CONST MIB_UNICASTIPADDRESS_ROW *Row);
327   NETIO_STATUS NETIOAPI_API_ GetUnicastIpAddressEntry (PMIB_UNICASTIPADDRESS_ROW Row);
328   NETIO_STATUS NETIOAPI_API_ GetUnicastIpAddressTable (ADDRESS_FAMILY Family, PMIB_UNICASTIPADDRESS_TABLE *Table);
329   VOID NETIOAPI_API_ InitializeUnicastIpAddressEntry (PMIB_UNICASTIPADDRESS_ROW Row);
330   NETIO_STATUS NETIOAPI_API_ NotifyUnicastIpAddressChange (ADDRESS_FAMILY Family, PUNICAST_IPADDRESS_CHANGE_CALLBACK Callback, PVOID CallerContext, BOOLEAN InitialNotification, HANDLE *NotificationHandle);
331   NETIO_STATUS NETIOAPI_API_ CreateAnycastIpAddressEntry (CONST MIB_ANYCASTIPADDRESS_ROW *Row);
332   NETIO_STATUS NETIOAPI_API_ DeleteAnycastIpAddressEntry (CONST MIB_ANYCASTIPADDRESS_ROW *Row);
333   NETIO_STATUS NETIOAPI_API_ GetAnycastIpAddressEntry (PMIB_ANYCASTIPADDRESS_ROW Row);
334   NETIO_STATUS NETIOAPI_API_ GetAnycastIpAddressTable (ADDRESS_FAMILY Family, PMIB_ANYCASTIPADDRESS_TABLE *Table);
335   NETIO_STATUS NETIOAPI_API_ NotifyStableUnicastIpAddressTable (ADDRESS_FAMILY Family, PMIB_UNICASTIPADDRESS_TABLE *Table, PSTABLE_UNICAST_IPADDRESS_TABLE_CALLBACK CallerCallback, PVOID CallerContext, HANDLE *NotificationHandle);
336   NETIO_STATUS NETIOAPI_API_ SetUnicastIpAddressEntry (CONST MIB_UNICASTIPADDRESS_ROW *Row);
337   NETIO_STATUS NETIOAPI_API_ GetMulticastIpAddressEntry (PMIB_MULTICASTIPADDRESS_ROW Row);
338   NETIO_STATUS NETIOAPI_API_ GetMulticastIpAddressTable (ADDRESS_FAMILY Family, PMIB_MULTICASTIPADDRESS_TABLE *Table);
339   NETIO_STATUS NETIOAPI_API_ CreateIpForwardEntry2 (CONST MIB_IPFORWARD_ROW2 *Row);
340   NETIO_STATUS NETIOAPI_API_ DeleteIpForwardEntry2 (CONST MIB_IPFORWARD_ROW2 *Row);
341   NETIO_STATUS NETIOAPI_API_ GetBestRoute2 (NET_LUID *InterfaceLuid, NET_IFINDEX InterfaceIndex, CONST SOCKADDR_INET *SourceAddress, CONST SOCKADDR_INET *DestinationAddress, ULONG AddressSortOptions, PMIB_IPFORWARD_ROW2 BestRoute, SOCKADDR_INET *BestSourceAddress);
342   NETIO_STATUS NETIOAPI_API_ GetIpForwardEntry2 (PMIB_IPFORWARD_ROW2 Row);
343   NETIO_STATUS NETIOAPI_API_ GetIpForwardTable2 (ADDRESS_FAMILY Family, PMIB_IPFORWARD_TABLE2 *Table);
344   VOID NETIOAPI_API_ InitializeIpForwardEntry (PMIB_IPFORWARD_ROW2 Row);
345   NETIO_STATUS NETIOAPI_API_ NotifyRouteChange2 (ADDRESS_FAMILY AddressFamily, PIPFORWARD_CHANGE_CALLBACK Callback, PVOID CallerContext, BOOLEAN InitialNotification, HANDLE *NotificationHandle);
346   NETIO_STATUS NETIOAPI_API_ SetIpForwardEntry2 (CONST MIB_IPFORWARD_ROW2 *Route);
347   NETIO_STATUS NETIOAPI_API_ FlushIpPathTable (ADDRESS_FAMILY Family);
348   NETIO_STATUS NETIOAPI_API_ GetIpPathEntry (PMIB_IPPATH_ROW Row);
349   NETIO_STATUS NETIOAPI_API_ GetIpPathTable (ADDRESS_FAMILY Family, PMIB_IPPATH_TABLE *Table);
350   NETIO_STATUS NETIOAPI_API_ CreateIpNetEntry2 (CONST MIB_IPNET_ROW2 *Row);
351   NETIO_STATUS NETIOAPI_API_ DeleteIpNetEntry2 (CONST MIB_IPNET_ROW2 *Row);
352   NETIO_STATUS NETIOAPI_API_ FlushIpNetTable2 (ADDRESS_FAMILY Family, NET_IFINDEX InterfaceIndex);
353   NETIO_STATUS NETIOAPI_API_ GetIpNetEntry2 (PMIB_IPNET_ROW2 Row);
354   NETIO_STATUS NETIOAPI_API_ GetIpNetTable2 (ADDRESS_FAMILY Family, PMIB_IPNET_TABLE2 *Table);
355   NETIO_STATUS NETIOAPI_API_ ResolveIpNetEntry2 (PMIB_IPNET_ROW2 Row, CONST SOCKADDR_INET *SourceAddress);
356   NETIO_STATUS NETIOAPI_API_ SetIpNetEntry2 (PMIB_IPNET_ROW2 Row);
357   NETIO_STATUS NETIOAPI_API_ NotifyTeredoPortChange (PTEREDO_PORT_CHANGE_CALLBACK Callback, PVOID CallerContext, BOOLEAN InitialNotification, HANDLE *NotificationHandle);
358   NETIO_STATUS NETIOAPI_API_ GetTeredoPort (USHORT *Port);
359   NETIO_STATUS NETIOAPI_API_ CancelMibChangeNotify2 (HANDLE NotificationHandle);
360   VOID NETIOAPI_API_ FreeMibTable (PVOID Memory);
361   NETIO_STATUS NETIOAPI_API_ CreateSortedAddressPairs (const PSOCKADDR_IN6 SourceAddressList, ULONG SourceAddressCount, const PSOCKADDR_IN6 DestinationAddressList, ULONG DestinationAddressCount, ULONG AddressSortOptions, PSOCKADDR_IN6_PAIR *SortedAddressPairList, ULONG *SortedAddressPairCount);
362 #endif
363 
364   NETIO_STATUS NETIOAPI_API_ ConvertInterfaceNameToLuidA (CONST CHAR *InterfaceName, NET_LUID *InterfaceLuid);
365   NETIO_STATUS NETIOAPI_API_ ConvertInterfaceNameToLuidW (CONST WCHAR *InterfaceName, NET_LUID *InterfaceLuid);
366   NETIO_STATUS NETIOAPI_API_ ConvertInterfaceLuidToNameA (CONST NET_LUID *InterfaceLuid, PSTR InterfaceName, SIZE_T Length);
367   NETIO_STATUS NETIOAPI_API_ ConvertInterfaceLuidToNameW (CONST NET_LUID *InterfaceLuid, PWSTR InterfaceName, SIZE_T Length);
368   NETIO_STATUS NETIOAPI_API_ ConvertInterfaceLuidToIndex (CONST NET_LUID *InterfaceLuid, PNET_IFINDEX InterfaceIndex);
369   NETIO_STATUS NETIOAPI_API_ ConvertInterfaceIndexToLuid (NET_IFINDEX InterfaceIndex, PNET_LUID InterfaceLuid);
370   NETIO_STATUS NETIOAPI_API_ ConvertInterfaceLuidToAlias (CONST NET_LUID *InterfaceLuid, PWSTR InterfaceAlias, SIZE_T Length);
371   NETIO_STATUS NETIOAPI_API_ ConvertInterfaceAliasToLuid (CONST WCHAR *InterfaceAlias, PNET_LUID InterfaceLuid);
372   NETIO_STATUS NETIOAPI_API_ ConvertInterfaceLuidToGuid (CONST NET_LUID *InterfaceLuid, GUID *InterfaceGuid);
373   NETIO_STATUS NETIOAPI_API_ ConvertInterfaceGuidToLuid (CONST GUID *InterfaceGuid, PNET_LUID InterfaceLuid);
374   NET_IFINDEX NETIOAPI_API_ if_nametoindex (PCSTR InterfaceName);
375   PCHAR NETIOAPI_API_ if_indextoname (NET_IFINDEX InterfaceIndex, PCHAR InterfaceName);
376   NET_IF_COMPARTMENT_ID NETIOAPI_API_ GetCurrentThreadCompartmentId (VOID);
377   NETIO_STATUS NETIOAPI_API_ SetCurrentThreadCompartmentId (NET_IF_COMPARTMENT_ID CompartmentId);
378   NET_IF_COMPARTMENT_ID NETIOAPI_API_ GetSessionCompartmentId (ULONG SessionId);
379   NETIO_STATUS NETIOAPI_API_ SetSessionCompartmentId (ULONG SessionId, NET_IF_COMPARTMENT_ID CompartmentId);
380   NETIO_STATUS NETIOAPI_API_ GetNetworkInformation (CONST NET_IF_NETWORK_GUID *NetworkGuid, PNET_IF_COMPARTMENT_ID CompartmentId, PULONG SiteId, PWCHAR NetworkName, ULONG Length);
381   NETIO_STATUS NETIOAPI_API_ SetNetworkInformation (CONST NET_IF_NETWORK_GUID *NetworkGuid, NET_IF_COMPARTMENT_ID CompartmentId, CONST WCHAR *NetworkName);
382   NETIO_STATUS NETIOAPI_API_ ConvertLengthToIpv4Mask (ULONG MaskLength, PULONG Mask);
383   NETIO_STATUS NETIOAPI_API_ ConvertIpv4MaskToLength (ULONG Mask, PUINT8 MaskLength);
384 
385 #ifdef __cplusplus
386 }
387 #endif
388 
389 #endif
390 #endif
391