1 // Copyright © 2015-2017 winapi-rs developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
5 // All files in the project carrying such notice may not be copied, modified, or distributed
6 // except according to those terms
7 //! This module contains Microsoft-specific extensions to the core Winsock definitions.
9 use shared
::basetsd
::{UINT32, UINT64, ULONG64}
;
10 use shared
::guiddef
::GUID
;
11 use shared
::in6addr
::IN6_ADDR
;
12 use shared
::inaddr
::IN_ADDR
;
13 use shared
::minwindef
::{DWORD, PULONG, PUSHORT, UCHAR, ULONG, USHORT}
;
15 INADDR_ANY
, INADDR_BROADCAST
, INADDR_NONE
, IOC_IN
, IOC_INOUT
, IOC_OUT
, IOC_VENDOR
, SOCKADDR_IN
,
18 use um
::winnt
::{BOOLEAN, LONG, LPCWSTR, PCSTR, PCWSTR, PSTR, PWSTR}
;
19 DEFINE_GUID
!{SOCKET_DEFAULT2_QM_POLICY
,
20 0xaec2ef9c, 0x3a4d, 0x4d3e, 0x88, 0x42, 0x23, 0x99, 0x42, 0xe3, 0x9a, 0x47}
21 DEFINE_GUID
!{REAL_TIME_NOTIFICATION_CAPABILITY
,
22 0x6b59819a, 0x5cae, 0x492d, 0xa9, 0x01, 0x2a, 0x3c, 0x2c, 0x50, 0x16, 0x4f}
23 DEFINE_GUID
!{REAL_TIME_NOTIFICATION_CAPABILITY_EX
,
24 0x6843da03, 0x154a, 0x4616, 0xa5, 0x08, 0x44, 0x37, 0x12, 0x95, 0xf9, 0x6b}
25 DEFINE_GUID
!{ASSOCIATE_NAMERES_CONTEXT
,
26 0x59a38b67, 0xd4fe, 0x46e1, 0xba, 0x3c, 0x87, 0xea, 0x74, 0xca, 0x30, 0x49}
41 STRUCT
!{struct TRANSPORT_SETTING_ID
{
44 pub type PTRANSPORT_SETTING_ID
= *mut TRANSPORT_SETTING_ID
;
45 STRUCT
!{struct tcp_keepalive
{
48 keepaliveinterval
: ULONG
,
50 ENUM
!{enum CONTROL_CHANNEL_TRIGGER_STATUS
{
51 CONTROL_CHANNEL_TRIGGER_STATUS_INVALID
= 0,
52 CONTROL_CHANNEL_TRIGGER_STATUS_SOFTWARE_SLOT_ALLOCATED
= 1,
53 CONTROL_CHANNEL_TRIGGER_STATUS_HARDWARE_SLOT_ALLOCATED
= 2,
54 CONTROL_CHANNEL_TRIGGER_STATUS_POLICY_ERROR
= 3,
55 CONTROL_CHANNEL_TRIGGER_STATUS_SYSTEM_ERROR
= 4,
56 CONTROL_CHANNEL_TRIGGER_STATUS_TRANSPORT_DISCONNECTED
= 5,
57 CONTROL_CHANNEL_TRIGGER_STATUS_SERVICE_UNAVAILABLE
= 6,
59 pub type PCONTROL_CHANNEL_TRIGGER_STATUS
= *mut CONTROL_CHANNEL_TRIGGER_STATUS
;
60 pub const CONTROL_CHANNEL_TRIGGER_STATUS_MAX
: u32 = CONTROL_CHANNEL_TRIGGER_STATUS_SYSTEM_ERROR
;
61 STRUCT
!{struct REAL_TIME_NOTIFICATION_SETTING_INPUT
{
62 TransportSettingId
: TRANSPORT_SETTING_ID
,
63 BrokerEventGuid
: GUID
,
65 pub type PREAL_TIME_NOTIFICATION_SETTING_INPUT
= *mut REAL_TIME_NOTIFICATION_SETTING_INPUT
;
66 STRUCT
!{struct REAL_TIME_NOTIFICATION_SETTING_INPUT_EX
{
67 TransportSettingId
: TRANSPORT_SETTING_ID
,
68 BrokerEventGuid
: GUID
,
71 pub type PREAL_TIME_NOTIFICATION_SETTING_INPUT_EX
= *mut REAL_TIME_NOTIFICATION_SETTING_INPUT_EX
;
72 STRUCT
!{struct REAL_TIME_NOTIFICATION_SETTING_OUTPUT
{
73 ChannelStatus
: CONTROL_CHANNEL_TRIGGER_STATUS
,
75 pub type PREAL_TIME_NOTIFICATION_SETTING_OUTPUT
= *mut REAL_TIME_NOTIFICATION_SETTING_OUTPUT
;
76 STRUCT
!{struct ASSOCIATE_NAMERES_CONTEXT_INPUT
{
77 TransportSettingId
: TRANSPORT_SETTING_ID
,
80 pub type PASSOCIATE_NAMERES_CONTEXT_INPUT
= *mut ASSOCIATE_NAMERES_CONTEXT_INPUT
;
81 macro_rules
! _WSAIOR { ($x:expr, $y:expr) => { IOC_OUT | $x | $y }
}
82 macro_rules
! _WSAIOW { ($x:expr, $y:expr) => { IOC_IN | $x | $y }
}
83 macro_rules
! _WSAIORW { ($x:expr, $y:expr) => { IOC_INOUT | $x | $y }
}
84 pub const SIO_RCVALL
: DWORD
= _WSAIOW
!(IOC_VENDOR
,1);
85 pub const SIO_RCVALL_MCAST
: DWORD
= _WSAIOW
!(IOC_VENDOR
,2);
86 pub const SIO_RCVALL_IGMPMCAST
: DWORD
= _WSAIOW
!(IOC_VENDOR
,3);
87 pub const SIO_KEEPALIVE_VALS
: DWORD
= _WSAIOW
!(IOC_VENDOR
,4);
88 pub const SIO_ABSORB_RTRALERT
: DWORD
= _WSAIOW
!(IOC_VENDOR
,5);
89 pub const SIO_UCAST_IF
: DWORD
= _WSAIOW
!(IOC_VENDOR
,6);
90 pub const SIO_LIMIT_BROADCASTS
: DWORD
= _WSAIOW
!(IOC_VENDOR
,7);
91 pub const SIO_INDEX_BIND
: DWORD
= _WSAIOW
!(IOC_VENDOR
,8);
92 pub const SIO_INDEX_MCASTIF
: DWORD
= _WSAIOW
!(IOC_VENDOR
,9);
93 pub const SIO_INDEX_ADD_MCAST
: DWORD
= _WSAIOW
!(IOC_VENDOR
,10);
94 pub const SIO_INDEX_DEL_MCAST
: DWORD
= _WSAIOW
!(IOC_VENDOR
,11);
95 pub const SIO_RCVALL_MCAST_IF
: DWORD
= _WSAIOW
!(IOC_VENDOR
,13);
96 pub const SIO_RCVALL_IF
: DWORD
= _WSAIOW
!(IOC_VENDOR
,14);
97 pub const SIO_LOOPBACK_FAST_PATH
: DWORD
= _WSAIOW
!(IOC_VENDOR
,16);
98 pub const SIO_TCP_INITIAL_RTO
: DWORD
= _WSAIOW
!(IOC_VENDOR
,17);
99 pub const SIO_APPLY_TRANSPORT_SETTING
: DWORD
= _WSAIOW
!(IOC_VENDOR
,19);
100 pub const SIO_QUERY_TRANSPORT_SETTING
: DWORD
= _WSAIOW
!(IOC_VENDOR
,20);
101 pub const SIO_TCP_SET_ICW
: DWORD
= _WSAIOW
!(IOC_VENDOR
,22);
102 pub const SIO_TCP_SET_ACK_FREQUENCY
: DWORD
= _WSAIOW
!(IOC_VENDOR
,23);
103 pub const SIO_TCP_INFO
: DWORD
= _WSAIORW
!(IOC_VENDOR
,39);
104 ENUM
!{enum RCVALL_VALUE
{
107 RCVALL_SOCKETLEVELONLY
= 2,
110 pub type PRCVALL_VALUE
= *mut RCVALL_VALUE
;
111 STRUCT
!{struct RCVALL_IF
{
115 pub type PRCVALL_IF
= *mut RCVALL_IF
;
116 pub const TCP_INITIAL_RTO_UNSPECIFIED_RTT
: USHORT
= -1i16 as u16;
117 pub const TCP_INITIAL_RTO_UNSPECIFIED_MAX_SYN_RETRANSMISSIONS
: UCHAR
= -1i8 as u8;
118 pub const TCP_INITIAL_RTO_DEFAULT_RTT
: USHORT
= 0;
119 pub const TCP_INITIAL_RTO_DEFAULT_MAX_SYN_RETRANSMISSIONS
: UCHAR
= 0;
120 STRUCT
!{struct TCP_INITIAL_RTO_PARAMETERS
{
122 MaxSynRetransmissions
: UCHAR
,
124 pub type PTCP_INITIAL_RTO_PARAMETERS
= *mut TCP_INITIAL_RTO_PARAMETERS
;
125 ENUM
!{enum TCP_ICW_LEVEL
{
126 TCP_ICW_LEVEL_DEFAULT
= 0,
127 TCP_ICW_LEVEL_HIGH
= 1,
128 TCP_ICW_LEVEL_VERY_HIGH
= 2,
129 TCP_ICW_LEVEL_AGGRESSIVE
= 3,
130 TCP_ICW_LEVEL_EXPERIMENTAL
= 4,
131 TCP_ICW_LEVEL_COMPAT
= 254,
132 TCP_ICW_LEVEL_MAX
= 255,
134 pub type PTCP_ICW_LEVEL
= *mut TCP_ICW_LEVEL
;
135 STRUCT
!{struct TCP_ICW_PARAMETERS
{
136 Level
: TCP_ICW_LEVEL
,
138 pub type PTCP_ICW_PARAMETERS
= *mut TCP_ICW_PARAMETERS
;
139 STRUCT
!{struct TCP_ACK_FREQUENCY_PARAMETERS
{
140 TcpDelayedAckFrequency
: UCHAR
,
142 pub type PTCP_ACK_FREQUENCY_PARAMETERS
= *mut TCP_ACK_FREQUENCY_PARAMETERS
;
143 STRUCT
!{struct TCP_INFO_v0
{
146 ConnectionTimeMs
: ULONG64
,
147 TimestampsEnabled
: BOOLEAN
,
150 BytesInFlight
: ULONG
,
157 BytesReordered
: ULONG
,
161 TimeoutEpisodes
: ULONG
,
164 pub type PTCP_INFO_v0
= *mut TCP_INFO_v0
;
165 pub const SIO_ACQUIRE_PORT_RESERVATION
: DWORD
= _WSAIOW
!(IOC_VENDOR
, 100);
166 pub const SIO_RELEASE_PORT_RESERVATION
: DWORD
= _WSAIOW
!(IOC_VENDOR
, 101);
167 pub const SIO_ASSOCIATE_PORT_RESERVATION
: DWORD
= _WSAIOW
!(IOC_VENDOR
, 102);
168 STRUCT
!{struct INET_PORT_RANGE
{
170 NumberOfPorts
: USHORT
,
172 pub type PINET_PORT_RANGE
= *mut INET_PORT_RANGE
;
173 pub type INET_PORT_RESERVATION
= INET_PORT_RANGE
;
174 pub type PINET_PORT_RESERVATION
= *mut INET_PORT_RANGE
;
175 STRUCT
!{struct INET_PORT_RESERVATION_TOKEN
{
178 pub type PINET_PORT_RESERVATION_TOKEN
= *mut INET_PORT_RESERVATION_TOKEN
;
179 STRUCT
!{struct INET_PORT_RESERVATION_INSTANCE
{
180 Reservation
: INET_PORT_RESERVATION
,
181 Token
: INET_PORT_RESERVATION_TOKEN
,
183 pub type PINET_PORT_RESERVATION_INSTANCE
= *mut INET_PORT_RESERVATION_INSTANCE
;
184 STRUCT
!{struct INET_PORT_RESERVATION_INFORMATION
{
187 pub type PINET_PORT_RESERVATION_INFORMATION
= *mut INET_PORT_RESERVATION_INFORMATION
;
188 pub const SIO_SET_SECURITY
: DWORD
= _WSAIOW
!(IOC_VENDOR
, 200);
189 pub const SIO_QUERY_SECURITY
: DWORD
= _WSAIORW
!(IOC_VENDOR
, 201);
190 pub const SIO_SET_PEER_TARGET_NAME
: DWORD
= _WSAIOW
!(IOC_VENDOR
, 202);
191 pub const SIO_DELETE_PEER_TARGET_NAME
: DWORD
= _WSAIOW
!(IOC_VENDOR
, 203);
192 pub const SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS
: DWORD
= _WSAIOW
!(IOC_VENDOR
, 220);
193 pub const SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT
: DWORD
= _WSAIOW
!(IOC_VENDOR
, 221);
194 pub const SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS
: DWORD
= _WSAIOW
!(IOC_VENDOR
, 222);
195 pub const SIO_SOCKET_USAGE_NOTIFICATION
: DWORD
= _WSAIOW
!(IOC_VENDOR
, 204);
196 ENUM
!{enum SOCKET_USAGE_TYPE
{
197 SYSTEM_CRITICAL_SOCKET
= 1,
199 ENUM
!{enum SOCKET_SECURITY_PROTOCOL
{
200 SOCKET_SECURITY_PROTOCOL_DEFAULT
,
201 SOCKET_SECURITY_PROTOCOL_IPSEC
,
202 SOCKET_SECURITY_PROTOCOL_IPSEC2
,
203 SOCKET_SECURITY_PROTOCOL_INVALID
,
205 STRUCT
!{struct SOCKET_SECURITY_SETTINGS
{
206 SecurityProtocol
: SOCKET_SECURITY_PROTOCOL
,
207 SecurityFlags
: ULONG
,
209 pub const SOCKET_SETTINGS_IPSEC_SKIP_FILTER_INSTANTIATION
: ULONG
= 0x1;
210 pub const SOCKET_SETTINGS_IPSEC_OPTIONAL_PEER_NAME_VERIFICATION
: ULONG
= 0x2;
211 pub const SOCKET_SETTINGS_IPSEC_ALLOW_FIRST_INBOUND_PKT_UNENCRYPTED
: ULONG
= 0x4;
212 pub const SOCKET_SETTINGS_IPSEC_PEER_NAME_IS_RAW_FORMAT
: ULONG
= 0x8;
213 STRUCT
!{struct SOCKET_SECURITY_SETTINGS_IPSEC
{
214 SecurityProtocol
: SOCKET_SECURITY_PROTOCOL
,
215 SecurityFlags
: ULONG
,
217 AuthipMMPolicyKey
: GUID
,
218 AuthipQMPolicyKey
: GUID
,
221 UserNameStringLen
: ULONG
,
222 DomainNameStringLen
: ULONG
,
223 PasswordStringLen
: ULONG
,
224 AllStrings
: [wchar_t
; 0],
226 STRUCT
!{struct SOCKET_PEER_TARGET_NAME
{
227 SecurityProtocol
: SOCKET_SECURITY_PROTOCOL
,
228 PeerAddress
: SOCKADDR_STORAGE
,
229 PeerTargetNameStringLen
: ULONG
,
230 AllStrings
: [wchar_t
; 0],
232 STRUCT
!{struct SOCKET_SECURITY_QUERY_TEMPLATE
{
233 SecurityProtocol
: SOCKET_SECURITY_PROTOCOL
,
234 PeerAddress
: SOCKADDR_STORAGE
,
235 PeerTokenAccessMask
: ULONG
,
237 pub const SOCKET_QUERY_IPSEC2_ABORT_CONNECTION_ON_FIELD_CHANGE
: ULONG
= 0x1;
238 pub const SOCKET_QUERY_IPSEC2_FIELD_MASK_MM_SA_ID
: ULONG
= 0x1;
239 pub const SOCKET_QUERY_IPSEC2_FIELD_MASK_QM_SA_ID
: ULONG
= 0x2;
240 STRUCT
!{struct SOCKET_SECURITY_QUERY_TEMPLATE_IPSEC2
{
241 SecurityProtocol
: SOCKET_SECURITY_PROTOCOL
,
242 PeerAddress
: SOCKADDR_STORAGE
,
243 PeerTokenAccessMask
: ULONG
,
247 pub const SOCKET_INFO_CONNECTION_SECURED
: ULONG
= 0x1;
248 pub const SOCKET_INFO_CONNECTION_ENCRYPTED
: ULONG
= 0x2;
249 pub const SOCKET_INFO_CONNECTION_IMPERSONATED
: ULONG
= 0x4;
250 STRUCT
!{struct SOCKET_SECURITY_QUERY_INFO
{
251 SecurityProtocol
: SOCKET_SECURITY_PROTOCOL
,
253 PeerApplicationAccessTokenHandle
: UINT64
,
254 PeerMachineAccessTokenHandle
: UINT64
,
256 STRUCT
!{struct SOCKET_SECURITY_QUERY_INFO_IPSEC2
{
257 SecurityProtocol
: SOCKET_SECURITY_PROTOCOL
,
259 PeerApplicationAccessTokenHandle
: UINT64
,
260 PeerMachineAccessTokenHandle
: UINT64
,
263 NegotiationWinerr
: UINT32
,
264 SaLookupContext
: GUID
,
266 pub const SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE
: DWORD
= _WSAIOR
!(IOC_VENDOR
, 205);
267 pub const SIO_QUERY_RSS_SCALABILITY_INFO
: DWORD
= _WSAIOR
!(IOC_VENDOR
, 210);
268 STRUCT
!{struct RSS_SCALABILITY_INFO
{
271 pub type PRSS_SCALABILITY_INFO
= *mut RSS_SCALABILITY_INFO
;
273 pub fn IN4_CLASSA(i
: LONG
) -> bool
{
277 pub fn IN4_CLASSB(i
: LONG
) -> bool
{
281 pub fn IN4_CLASSC(i
: LONG
) -> bool
{
285 pub fn IN4_CLASSD(i
: LONG
) -> bool
{
289 pub fn IN4_MULTICAST(i
: LONG
) -> bool
{
292 pub const IN4ADDR_ANY
: ULONG
= INADDR_ANY
;
293 pub const IN4ADDR_LOOPBACK
: ULONG
= 0x0100007f;
294 pub const IN4ADDR_BROADCAST
: ULONG
= INADDR_BROADCAST
;
295 pub const IN4ADDR_NONE
: ULONG
= INADDR_NONE
;
296 pub const IN4ADDR_LOOPBACKPREFIX_LENGTH
: usize = 8;
297 pub const IN4ADDR_LINKLOCALPREFIX_LENGTH
: usize = 16;
298 pub const IN4ADDR_MULTICASTPREFIX_LENGTH
: usize = 4;
300 pub fn IN4_ADDR_EQUAL(a
: &IN_ADDR
, b
: &IN_ADDR
) -> bool
{
301 unsafe { *a.S_un.S_addr() == *b.S_un.S_addr() }
304 pub fn IN4_UNALIGNED_ADDR_EQUAL(a
: &IN_ADDR
, b
: &IN_ADDR
) -> bool
{
305 unsafe { *a.S_un.S_addr() == *b.S_un.S_addr() }
308 pub fn IN4_IS_ADDR_UNSPECIFIED(a
: &IN_ADDR
) -> bool
{
309 unsafe { *a.S_un.S_addr() == IN4ADDR_ANY }
312 pub fn IN4_IS_UNALIGNED_ADDR_UNSPECIFIED(a
: &IN_ADDR
) -> bool
{
313 unsafe { *a.S_un.S_addr() == IN4ADDR_ANY }
316 pub fn IN4_IS_ADDR_LOOPBACK(a
: &IN_ADDR
) -> bool
{
317 unsafe { a.S_un.S_un_b().s_b1 == 0x7f }
320 pub fn IN4_IS_UNALIGNED_ADDR_LOOPBACK(a
: &IN_ADDR
) -> bool
{
321 unsafe { a.S_un.S_un_b().s_b1 == 0x7f }
324 pub fn IN4_IS_ADDR_BROADCAST(a
: &IN_ADDR
) -> bool
{
325 unsafe { *a.S_un.S_addr() == IN4ADDR_BROADCAST }
328 pub fn IN4_IS_UNALIGNED_ADDR_BROADCAST(a
: &IN_ADDR
) -> bool
{
329 unsafe { *a.S_un.S_addr() == IN4ADDR_BROADCAST }
332 pub fn IN4_IS_ADDR_MULTICAST(a
: &IN_ADDR
) -> bool
{
333 IN4_MULTICAST(unsafe { *a.S_un.S_addr() as LONG }
)
336 pub fn IN4_IS_UNALIGNED_ADDR_MULTICAST(a
: &IN_ADDR
) -> bool
{
337 IN4_MULTICAST(unsafe { *a.S_un.S_addr() as LONG }
)
340 pub fn IN4_IS_ADDR_LINKLOCAL(a
: &IN_ADDR
) -> bool
{
341 unsafe { (*a.S_un.S_addr() & 0xffff) == 0xfea9 }
344 pub fn IN4_IS_UNALIGNED_ADDR_LINKLOCAL(a
: &IN_ADDR
) -> bool
{
345 unsafe { (*a.S_un.S_addr() & 0xffff) == 0xfea9 }
348 pub fn IN4_IS_ADDR_SITELOCAL(_
: &IN_ADDR
) -> bool
{
352 pub fn IN4_IS_UNALIGNED_ADDR_SITELOCAL(_
: &IN_ADDR
) -> bool
{
356 pub fn IN4_IS_ADDR_RFC1918(a
: &IN_ADDR
) -> bool
{
357 let s_addr
= unsafe { *a.S_un.S_addr() }
;
358 ((s_addr
& 0x00ff) == 0x0a) || ((s_addr
& 0xf0ff) == 0x10ac) || ((s_addr
& 0xffff) == 0xa8c0)
361 pub fn IN4_IS_UNALIGNED_ADDR_RFC1918(a
: &IN_ADDR
) -> bool
{
362 IN4_IS_ADDR_RFC1918(a
)
365 pub fn IN4_IS_ADDR_MC_LINKLOCAL(a
: &IN_ADDR
) -> bool
{
366 unsafe { (*a.S_un.S_addr() & 0xffffff) == 0xe0 }
369 pub fn IN4_IS_ADDR_MC_ADMINLOCAL(a
: &IN_ADDR
) -> bool
{
370 unsafe { (*a.S_un.S_addr() & 0xffff) == 0xffef }
373 pub fn IN4_IS_ADDR_MC_SITELOCAL(a
: &IN_ADDR
) -> bool
{
374 let first
= unsafe { (*a.S_un.S_addr() & 0xff) == 0xef }
;
375 first
&& !IN4_IS_ADDR_MC_ADMINLOCAL(a
)
378 pub fn IN4ADDR_ISANY(a
: &SOCKADDR_IN
) -> bool
{
379 IN4_IS_ADDR_UNSPECIFIED(&a
.sin_addr
)
382 pub fn IN4ADDR_ISLOOPBACK(a
: &SOCKADDR_IN
) -> bool
{
383 IN4_IS_ADDR_LOOPBACK(&a
.sin_addr
)
386 pub fn RtlIpv4AddressToStringA(
387 Addr
: *const IN_ADDR
,
390 pub fn RtlIpv4AddressToStringExA(
391 Address
: *const IN_ADDR
,
394 AddressStringLength
: PULONG
,
396 pub fn RtlIpv4AddressToStringW(
397 Addr
: *const IN_ADDR
,
400 pub fn RtlIpv4AddressToStringExW(
401 Address
: *const IN_ADDR
,
403 AddressString
: PWSTR
,
404 AddressStringLength
: PULONG
,
406 pub fn RtlIpv4StringToAddressA(
409 Terminator
: *mut PCSTR
,
412 pub fn RtlIpv4StringToAddressExA(
413 AddressString
: PCSTR
,
415 Address
: *mut IN_ADDR
,
418 pub fn RtlIpv4StringToAddressW(
421 Terminator
: *mut LPCWSTR
,
424 pub fn RtlIpv4StringToAddressExW(
425 AddressString
: PCWSTR
,
427 Address
: *mut IN_ADDR
,
430 pub fn RtlIpv6AddressToStringA(
431 Addr
: *const IN6_ADDR
,
434 pub fn RtlIpv6AddressToStringExA(
435 Address
: *const IN6_ADDR
,
439 AddressStringLength
: PULONG
,
441 pub fn RtlIpv6AddressToStringW(
442 Addr
: *const IN6_ADDR
,
445 pub fn RtlIpv6AddressToStringExW(
446 Address
: *const IN6_ADDR
,
449 AddressString
: PWSTR
,
450 AddressStringLength
: PULONG
,
452 pub fn RtlIpv6StringToAddressA(
454 Terminator
: *mut PCSTR
,
457 pub fn RtlIpv6StringToAddressExA(
458 AddressString
: PCSTR
,
459 Address
: *mut IN6_ADDR
,
463 pub fn RtlIpv6StringToAddressW(
465 Terminator
: *mut PCWSTR
,
468 pub fn RtlIpv6StringToAddressExW(
469 AddressString
: PCWSTR
,
470 Address
: *mut IN6_ADDR
,
475 DECLARE_HANDLE
!{DL_EUI48, _DL_EUI48}
476 pub type PDL_EUI48
= *mut DL_EUI48
;
478 pub fn RtlEthernetAddressToStringA(
479 Addr
: *const DL_EUI48
,
482 pub fn RtlEthernetAddressToStringW(
483 Addr
: *const DL_EUI48
,
486 pub fn RtlEthernetStringToAddressA(
488 Terminator
: *mut PCSTR
,
491 pub fn RtlEthernetStringToAddressW(
493 Terminator
: *mut LPCWSTR
,