1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 use shared::basetsd::{UINT8, ULONG64};
7 use shared::guiddef::GUID;
8 use shared::ifdef::{
9     IF_INDEX, IF_LUID, IF_OPER_STATUS, NET_IF_COMPARTMENT_ID, NET_IF_CONNECTION_TYPE,
10     NET_IF_NETWORK_GUID, TUNNEL_TYPE
11 };
12 use shared::ipifcons::IFTYPE;
13 use shared::minwindef::{BOOL, BYTE, DWORD, UCHAR, UINT};
14 use shared::nldef::{NL_DAD_STATE, NL_PREFIX_ORIGIN, NL_SUFFIX_ORIGIN};
15 use shared::ntdef::{CHAR, PCHAR, PWCHAR, ULONG, ULONGLONG, WCHAR};
16 use shared::ws2def::SOCKET_ADDRESS;
17 use ucrt::corecrt::time_t;
18 pub const MAX_ADAPTER_DESCRIPTION_LENGTH: usize = 128;
19 pub const MAX_ADAPTER_NAME_LENGTH: usize = 256;
20 pub const MAX_ADAPTER_ADDRESS_LENGTH: usize = 8;
21 pub const DEFAULT_MINIMUM_ENTITIES: usize = 32;
22 pub const MAX_HOSTNAME_LEN: usize = 128;
23 pub const MAX_DOMAIN_NAME_LEN: usize = 128;
24 pub const MAX_SCOPE_ID_LEN: usize = 256;
25 pub const MAX_DHCPV6_DUID_LENGTH: usize = 130;
26 pub const MAX_DNS_SUFFIX_STRING_LENGTH: usize = 256;
27 pub const BROADCAST_NODETYPE: usize = 1;
28 pub const PEER_TO_PEER_NODETYPE: usize = 2;
29 pub const MIXED_NODETYPE: usize = 4;
30 pub const HYBRID_NODETYPE: usize = 8;
31 STRUCT!{struct IP_ADDRESS_STRING {
32     String: [CHAR; 4*4],
33 }}
34 pub type PIP_ADDRESS_STRING = *mut IP_ADDRESS_STRING;
35 pub type IP_MASK_STRING = IP_ADDRESS_STRING;
36 pub type PIP_MASK_STRING = *mut IP_MASK_STRING;
37 STRUCT!{struct IP_ADDR_STRING {
38     Next: *mut IP_ADDR_STRING,
39     IpAddress: IP_ADDRESS_STRING,
40     IpMask: IP_MASK_STRING,
41     Context: DWORD,
42 }}
43 pub type PIP_ADDR_STRING = *mut IP_ADDR_STRING;
44 STRUCT!{struct IP_ADAPTER_INFO {
45     Next: *mut IP_ADAPTER_INFO,
46     ComboIndex: DWORD,
47     AdapterName: [CHAR; MAX_ADAPTER_NAME_LENGTH + 4],
48     Description: [CHAR; MAX_ADAPTER_DESCRIPTION_LENGTH + 4],
49     AddressLength: UINT,
50     Address: [BYTE; MAX_ADAPTER_ADDRESS_LENGTH],
51     Index: DWORD,
52     Type: UINT,
53     DhcpEnabled: UINT,
54     CurrentIpAddress: PIP_ADDR_STRING,
55     IpAddressList: IP_ADDR_STRING,
56     GatewayList: IP_ADDR_STRING,
57     DhcpServer: IP_ADDR_STRING,
58     HaveWins: BOOL,
59     PrimaryWinsServer: IP_ADDR_STRING,
60     SecondaryWinsServer: IP_ADDR_STRING,
61     LeaseObtained: time_t,
62     LeaseExpires: time_t,
63 }}
64 pub type PIP_ADAPTER_INFO = *mut IP_ADAPTER_INFO;
65 pub type IP_PREFIX_ORIGIN = NL_PREFIX_ORIGIN;
66 pub type IP_SUFFIX_ORIGIN = NL_SUFFIX_ORIGIN;
67 pub type IP_DAD_STATE = NL_DAD_STATE;
68 STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_LH_u_s {
69     Length: ULONG,
70     Flags: DWORD,
71 }}
72 UNION!{union IP_ADAPTER_UNICAST_ADDRESS_LH_u {
73     [u64; 1],
74     Alignment Alignment_mut: ULONGLONG,
75     s s_mut: IP_ADAPTER_UNICAST_ADDRESS_LH_u_s,
76 }}
77 STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_LH {
78     u: IP_ADAPTER_UNICAST_ADDRESS_LH_u,
79     Next: *mut IP_ADAPTER_UNICAST_ADDRESS_LH,
80     Address: SOCKET_ADDRESS,
81     PrefixOrigin: IP_PREFIX_ORIGIN,
82     SuffixOrigin: IP_SUFFIX_ORIGIN,
83     DadState: IP_DAD_STATE,
84     ValidLifetime: ULONG,
85     PreferredLifetime: ULONG,
86     LeaseLifetime: ULONG,
87     OnLinkPrefixLength: UINT8,
88 }}
89 pub type PIP_ADAPTER_UNICAST_ADDRESS_LH = *mut IP_ADAPTER_UNICAST_ADDRESS_LH;
90 STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_XP_u_s {
91     Length: ULONG,
92     Flags: DWORD,
93 }}
94 UNION!{union IP_ADAPTER_UNICAST_ADDRESS_XP_u {
95     [u64; 1],
96     Alignment Alignment_mut: ULONGLONG,
97     s s_mut: IP_ADAPTER_UNICAST_ADDRESS_XP_u_s,
98 }}
99 STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_XP {
100     u: IP_ADAPTER_UNICAST_ADDRESS_XP_u,
101     Next: *mut IP_ADAPTER_UNICAST_ADDRESS_XP,
102     Address: SOCKET_ADDRESS,
103     PrefixOrigin: IP_PREFIX_ORIGIN,
104     SuffixOrigin: IP_SUFFIX_ORIGIN,
105     DadState: IP_DAD_STATE,
106     ValidLifetime: ULONG,
107     PreferredLifetime: ULONG,
108     LeaseLifetime: ULONG,
109 }}
110 pub type PIP_ADAPTER_UNICAST_ADDRESS_XP = *mut IP_ADAPTER_UNICAST_ADDRESS_XP;
111 pub type IP_ADAPTER_UNICAST_ADDRESS = IP_ADAPTER_UNICAST_ADDRESS_LH;
112 // pub type IP_ADAPTER_UNICAST_ADDRESS = IP_ADAPTER_UNICAST_ADDRESS_XP;
113 pub type PIP_ADAPTER_UNICAST_ADDRESS = *mut IP_ADAPTER_UNICAST_ADDRESS;
114 pub const IP_ADAPTER_ADDRESS_DNS_ELIGIBLE: usize = 0x01;
115 pub const IP_ADAPTER_ADDRESS_TRANSIENT: usize = 0x02;
116 STRUCT!{struct IP_ADAPTER_ANYCAST_ADDRESS_XP_u_s {
117     Length: ULONG,
118     Flags: DWORD,
119 }}
120 UNION!{union IP_ADAPTER_ANYCAST_ADDRESS_XP_u {
121     [u64; 1],
122     Alignment Alignment_mut: ULONGLONG,
123     s s_mut: IP_ADAPTER_ANYCAST_ADDRESS_XP_u_s,
124 }}
125 STRUCT!{struct IP_ADAPTER_ANYCAST_ADDRESS_XP {
126     u: IP_ADAPTER_ANYCAST_ADDRESS_XP_u,
127     Next: *mut IP_ADAPTER_ANYCAST_ADDRESS_XP,
128     Address: SOCKET_ADDRESS,
129 }}
130 pub type PIP_ADAPTER_ANYCAST_ADDRESS_XP = *mut IP_ADAPTER_ANYCAST_ADDRESS_XP;
131 pub type IP_ADAPTER_ANYCAST_ADDRESS = IP_ADAPTER_ANYCAST_ADDRESS_XP;
132 pub type PIP_ADAPTER_ANYCAST_ADDRESS = *mut IP_ADAPTER_ANYCAST_ADDRESS;
133 STRUCT!{struct IP_ADAPTER_MULTICAST_ADDRESS_XP_u_s {
134     Length: ULONG,
135     Flags: DWORD,
136 }}
137 UNION!{union IP_ADAPTER_MULTICAST_ADDRESS_XP_u {
138     [u64; 1],
139     Alignment Alignment_mut: ULONGLONG,
140     s s_mut: IP_ADAPTER_MULTICAST_ADDRESS_XP_u_s,
141 }}
142 STRUCT!{struct IP_ADAPTER_MULTICAST_ADDRESS_XP {
143     u: IP_ADAPTER_MULTICAST_ADDRESS_XP_u,
144     Next: *mut IP_ADAPTER_MULTICAST_ADDRESS_XP,
145     Address: SOCKET_ADDRESS,
146 }}
147 pub type PIP_ADAPTER_MULTICAST_ADDRESS_XP = *mut IP_ADAPTER_MULTICAST_ADDRESS_XP;
148 pub type IP_ADAPTER_MULTICAST_ADDRESS = IP_ADAPTER_MULTICAST_ADDRESS_XP;
149 pub type PIP_ADAPTER_MULTICAST_ADDRESS = *mut IP_ADAPTER_MULTICAST_ADDRESS_XP;
150 STRUCT!{struct IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u_s {
151     Length: ULONG,
152     Reserved: DWORD,
153 }}
154 UNION!{union IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u {
155     [u64; 1],
156     Alignment Alignment_mut: ULONGLONG,
157     s s_mut: IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u_s,
158 }}
159 STRUCT!{struct IP_ADAPTER_DNS_SERVER_ADDRESS_XP {
160     u: IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u,
161     Next: *mut IP_ADAPTER_DNS_SERVER_ADDRESS_XP,
162     Address: SOCKET_ADDRESS,
163 }}
164 pub type PIP_ADAPTER_DNS_SERVER_ADDRESS_XP = *mut IP_ADAPTER_DNS_SERVER_ADDRESS_XP;
165 pub type IP_ADAPTER_DNS_SERVER_ADDRESS = IP_ADAPTER_DNS_SERVER_ADDRESS_XP;
166 pub type PIP_ADAPTER_DNS_SERVER_ADDRESS = *mut IP_ADAPTER_DNS_SERVER_ADDRESS_XP;
167 STRUCT!{struct IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u_s {
168     Length: ULONG,
169     Reserved: DWORD,
170 }}
171 UNION!{union IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u {
172     [u64; 1],
173     Alignment Alignment_mut: ULONGLONG,
174     s s_mut: IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u_s,
175 }}
176 STRUCT!{struct IP_ADAPTER_WINS_SERVER_ADDRESS_LH {
177     u: IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u,
178     Next: *mut IP_ADAPTER_WINS_SERVER_ADDRESS_LH,
179     Address: SOCKET_ADDRESS,
180 }}
181 pub type PIP_ADAPTER_WINS_SERVER_ADDRESS_LH = *mut IP_ADAPTER_WINS_SERVER_ADDRESS_LH;
182 pub type IP_ADAPTER_WINS_SERVER_ADDRESS = IP_ADAPTER_WINS_SERVER_ADDRESS_LH;
183 pub type PIP_ADAPTER_WINS_SERVER_ADDRESS = *mut IP_ADAPTER_WINS_SERVER_ADDRESS_LH;
184 STRUCT!{struct IP_ADAPTER_GATEWAY_ADDRESS_LH_u_s {
185     Length: ULONG,
186     Reserved: DWORD,
187 }}
188 UNION!{union IP_ADAPTER_GATEWAY_ADDRESS_LH_u {
189     [u64; 1],
190     Alignment Alignment_mut: ULONGLONG,
191     s s_mut: IP_ADAPTER_GATEWAY_ADDRESS_LH_u_s,
192 }}
193 STRUCT!{struct IP_ADAPTER_GATEWAY_ADDRESS_LH {
194     u: IP_ADAPTER_GATEWAY_ADDRESS_LH_u,
195     Next: *mut IP_ADAPTER_GATEWAY_ADDRESS_LH,
196     Address: SOCKET_ADDRESS,
197 }}
198 pub type PIP_ADAPTER_GATEWAY_ADDRESS_LH = *mut IP_ADAPTER_GATEWAY_ADDRESS_LH;
199 pub type IP_ADAPTER_GATEWAY_ADDRESS = IP_ADAPTER_GATEWAY_ADDRESS_LH;
200 pub type PIP_ADAPTER_GATEWAY_ADDRESS = *mut IP_ADAPTER_GATEWAY_ADDRESS_LH;
201 STRUCT!{struct IP_ADAPTER_PREFIX_XP_u_s {
202     Length: ULONG,
203     Flags: DWORD,
204 }}
205 UNION!{union IP_ADAPTER_PREFIX_XP_u {
206     [u64; 1],
207     Alignment Alignment_mut: ULONGLONG,
208     s s_mut: IP_ADAPTER_PREFIX_XP_u_s,
209 }}
210 STRUCT!{struct IP_ADAPTER_PREFIX_XP {
211     u: IP_ADAPTER_PREFIX_XP_u,
212     Next: *mut IP_ADAPTER_PREFIX_XP,
213     Address: SOCKET_ADDRESS,
214     PrefixLength: ULONG,
215 }}
216 pub type PIP_ADAPTER_PREFIX_XP = *mut IP_ADAPTER_PREFIX_XP;
217 pub type IP_ADAPTER_PREFIX = IP_ADAPTER_PREFIX_XP;
218 pub type PIP_ADAPTER_PREFIX = *mut IP_ADAPTER_PREFIX_XP;
219 STRUCT!{struct IP_ADAPTER_DNS_SUFFIX {
220     Next: *mut IP_ADAPTER_DNS_SUFFIX,
221     String: [WCHAR; MAX_DNS_SUFFIX_STRING_LENGTH],
222 }}
223 pub type PIP_ADAPTER_DNS_SUFFIX = *mut IP_ADAPTER_DNS_SUFFIX;
224 pub const IP_ADAPTER_DDNS_ENABLED: DWORD = 0x00000001;
225 pub const IP_ADAPTER_REGISTER_ADAPTER_SUFFIX: DWORD = 0x00000002;
226 pub const IP_ADAPTER_DHCP_ENABLED: DWORD = 0x00000004;
227 pub const IP_ADAPTER_RECEIVE_ONLY: DWORD = 0x00000008;
228 pub const IP_ADAPTER_NO_MULTICAST: DWORD = 0x00000010;
229 pub const IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG: DWORD = 0x00000020;
230 pub const IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED: DWORD = 0x00000040;
231 pub const IP_ADAPTER_IPV4_ENABLED: DWORD = 0x00000080;
232 pub const IP_ADAPTER_IPV6_ENABLED: DWORD = 0x00000100;
233 pub const IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG: DWORD = 0x00000200;
234 STRUCT!{struct IP_ADAPTER_ADDRESSES_LH_u_s {
235     Length: ULONG,
236     IfIndex: IF_INDEX,
237 }}
238 UNION!{union IP_ADAPTER_ADDRESSES_LH_u {
239     [u64; 1],
240     Alignment Alignment_mut: ULONGLONG,
241     s s_mut: IP_ADAPTER_ADDRESSES_LH_u_s,
242 }}
243 STRUCT!{struct IP_ADAPTER_ADDRESSES_LH {
244     u: IP_ADAPTER_ADDRESSES_LH_u,
245     Next: *mut IP_ADAPTER_ADDRESSES_LH,
246     AdapterName: PCHAR,
247     FirstUnicastAddress: PIP_ADAPTER_UNICAST_ADDRESS_LH,
248     FirstAnycastAddress: PIP_ADAPTER_ANYCAST_ADDRESS_XP,
249     FirstMulticastAddress: PIP_ADAPTER_MULTICAST_ADDRESS_XP,
250     FirstDnsServerAddress: PIP_ADAPTER_DNS_SERVER_ADDRESS_XP,
251     DnsSuffix: PWCHAR,
252     Description: PWCHAR,
253     FriendlyName: PWCHAR,
254     PhysicalAddress: [BYTE; MAX_ADAPTER_ADDRESS_LENGTH],
255     PhysicalAddressLength: ULONG,
256     Flags: ULONG,
257     Mtu: ULONG,
258     IfType: IFTYPE,
259     OperStatus: IF_OPER_STATUS,
260     Ipv6IfIndex: IF_INDEX,
261     ZoneIndices: [ULONG; 16],
262     FirstPrefix: PIP_ADAPTER_PREFIX_XP,
263     TransmitLinkSpeed: ULONG64,
264     ReceiveLinkSpeed: ULONG64,
265     FirstWinsServerAddress: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH,
266     FirstGatewayAddress: PIP_ADAPTER_GATEWAY_ADDRESS_LH,
267     Ipv4Metric: ULONG,
268     Ipv6Metric: ULONG,
269     Luid: IF_LUID,
270     Dhcpv4Server: SOCKET_ADDRESS,
271     CompartmentId: NET_IF_COMPARTMENT_ID,
272     NetworkGuid: NET_IF_NETWORK_GUID,
273     ConnectionType: NET_IF_CONNECTION_TYPE,
274     TunnelType: TUNNEL_TYPE,
275     Dhcpv6Server: SOCKET_ADDRESS,
276     Dhcpv6ClientDuid: [BYTE; MAX_DHCPV6_DUID_LENGTH],
277     Dhcpv6ClientDuidLength: ULONG,
278     Dhcpv6Iaid: ULONG,
279     FirstDnsSuffix: PIP_ADAPTER_DNS_SUFFIX,
280 }}
281 BITFIELD!{IP_ADAPTER_ADDRESSES_LH Flags: ULONG [
282     DdnsEnabled set_DdnsEnabled[0..1],
283     RegisterAdapterSuffix set_RegisterAdapterSuffix[1..2],
284     Dhcpv4Enabled set_Dhcpv4Enabled[2..3],
285     ReceiveOnly set_ReceiveOnly[3..4],
286     NoMulticast set_NoMulticast[4..5],
287     Ipv6OtherStatefulConfig set_Ipv6OtherStatefulConfig[5..6],
288     NetbiosOverTcpipEnabled set_NetbiosOverTcpipEnabled[6..7],
289     Ipv4Enabled set_Ipv4Enabled[7..8],
290     Ipv6Enabled set_Ipv6Enabled[8..9],
291     Ipv6ManagedAddressConfigurationSupported set_Ipv6ManagedAddressConfigurationSupported[9..10],
292 ]}
293 pub type PIP_ADAPTER_ADDRESSES_LH = *mut IP_ADAPTER_ADDRESSES_LH;
294 STRUCT!{struct IP_ADAPTER_ADDRESSES_XP_u_s {
295     Length: ULONG,
296     IfIndex: DWORD,
297 }}
298 UNION!{union IP_ADAPTER_ADDRESSES_XP_u {
299     [u64; 1],
300     Alignment Alignment_mut: ULONGLONG,
301     s s_mut: IP_ADAPTER_ADDRESSES_XP_u_s,
302 }}
303 STRUCT!{struct IP_ADAPTER_ADDRESSES_XP {
304     u: IP_ADAPTER_ADDRESSES_XP_u,
305     Next: *mut IP_ADAPTER_ADDRESSES_XP,
306     AdapterName: PCHAR,
307     FirstUnicastAddress: PIP_ADAPTER_UNICAST_ADDRESS_XP,
308     FirstAnycastAddress: PIP_ADAPTER_ANYCAST_ADDRESS_XP,
309     FirstMulticastAddress: PIP_ADAPTER_MULTICAST_ADDRESS_XP,
310     FirstDnsServerAddress: PIP_ADAPTER_DNS_SERVER_ADDRESS_XP,
311     DnsSuffix: PWCHAR,
312     Description: PWCHAR,
313     FriendlyName: PWCHAR,
314     PhysicalAddress: [BYTE; MAX_ADAPTER_ADDRESS_LENGTH],
315     PhysicalAddressLength: DWORD,
316     Flags: DWORD,
317     Mtu: DWORD,
318     IfType: DWORD,
319     OperStatus: IF_OPER_STATUS,
320     Ipv6IfIndex: DWORD,
321     ZoneIndices: [DWORD; 16],
322     FirstPrefix: PIP_ADAPTER_PREFIX_XP,
323 }}
324 pub type PIP_ADAPTER_ADDRESSES_XP = *mut IP_ADAPTER_ADDRESSES_XP;
325 pub type IP_ADAPTER_ADDRESSES = IP_ADAPTER_ADDRESSES_LH;
326 // pub type IP_ADAPTER_ADDRESSES = IP_ADAPTER_ADDRESSES_XP;
327 pub type PIP_ADAPTER_ADDRESSES = *mut IP_ADAPTER_ADDRESSES;
328 pub const GAA_FLAG_SKIP_UNICAST: ULONG = 0x0001;
329 pub const GAA_FLAG_SKIP_ANYCAST: ULONG = 0x0002;
330 pub const GAA_FLAG_SKIP_MULTICAST: ULONG = 0x0004;
331 pub const GAA_FLAG_SKIP_DNS_SERVER: ULONG = 0x0008;
332 pub const GAA_FLAG_INCLUDE_PREFIX: ULONG = 0x0010;
333 pub const GAA_FLAG_SKIP_FRIENDLY_NAME: ULONG = 0x0020;
334 pub const GAA_FLAG_INCLUDE_WINS_INFO: ULONG = 0x0040;
335 pub const GAA_FLAG_INCLUDE_GATEWAYS: ULONG = 0x0080;
336 pub const GAA_FLAG_INCLUDE_ALL_INTERFACES: ULONG = 0x0100;
337 pub const GAA_FLAG_INCLUDE_ALL_COMPARTMENTS: ULONG = 0x0200;
338 pub const GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER: ULONG = 0x0400;
339 STRUCT!{struct IP_PER_ADAPTER_INFO_W2KSP1 {
340     AutoconfigEnabled: UINT,
341     AutoconfigActive: UINT,
342     CurrentDnsServer: PIP_ADDR_STRING,
343     DnsServerList: IP_ADDR_STRING,
344 }}
345 pub type PIP_PER_ADAPTER_INFO_W2KSP1 = *mut IP_PER_ADAPTER_INFO_W2KSP1;
346 pub type IP_PER_ADAPTER_INFO = IP_PER_ADAPTER_INFO_W2KSP1;
347 pub type PIP_PER_ADAPTER_INFO = *mut IP_PER_ADAPTER_INFO;
348 STRUCT!{struct FIXED_INFO_W2KSP1 {
349     HostName: [CHAR; MAX_HOSTNAME_LEN + 4],
350     DomainName: [CHAR; MAX_DOMAIN_NAME_LEN + 4],
351     CurrentDnsServer: PIP_ADDR_STRING,
352     DnsServerList: IP_ADDR_STRING,
353     NodeType: UINT,
354     ScopeId: [CHAR; MAX_SCOPE_ID_LEN + 4],
355     EnableRouting: UINT,
356     EnableProxy: UINT,
357     EnableDns: UINT,
358 }}
359 pub type PFIXED_INFO_W2KSP1 = *mut FIXED_INFO_W2KSP1;
360 pub type FIXED_INFO = FIXED_INFO_W2KSP1;
361 pub type PFIXED_INFO = *mut FIXED_INFO;
362 STRUCT!{struct IP_INTERFACE_NAME_INFO_W2KSP1 {
363     Index: ULONG,
364     MediaType: ULONG,
365     ConnectionType: UCHAR,
366     AccessType: UCHAR,
367     DeviceGuid: GUID,
368     InterfaceGuid: GUID,
369 }}
370 pub type PIP_INTERFACE_NAME_INFO_W2KSP1 = *mut IP_INTERFACE_NAME_INFO_W2KSP1;
371 pub type IP_INTERFACE_NAME_INFO = IP_INTERFACE_NAME_INFO_W2KSP1;
372 pub type PIP_INTERFACE_NAME_INFO = *mut IP_INTERFACE_NAME_INFO;
373