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