Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  mstcpip.rs   Sprache: unbekannt

 
// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms
//! This module contains Microsoft-specific extensions to the core Winsock definitions.
use ctypes::wchar_t;
use shared::basetsd::{UINT32, UINT64, ULONG64};
use shared::guiddef::GUID;
use shared::in6addr::IN6_ADDR;
use shared::inaddr::IN_ADDR;
use shared::minwindef::{DWORD, PULONG, PUSHORT, UCHAR, ULONG, USHORT};
use shared::ws2def::{
    INADDR_ANY, INADDR_BROADCAST, INADDR_NONE, IOC_VENDOR, SOCKADDR_IN,
    SOCKADDR_STORAGE,
};
use um::winnt::{BOOLEAN, LONG, LPCWSTR, PCSTR, PCWSTR, PSTR, PWSTR};
DEFINE_GUID!{SOCKET_DEFAULT2_QM_POLICY,
    0xaec2ef9c, 0x3a4d, 0x4d3e, 0x88, 0x42, 0x23, 0x99, 0x42, 0xe3, 0x9a, 0x47}
DEFINE_GUID!{REAL_TIME_NOTIFICATION_CAPABILITY,
    0x6b59819a, 0x5cae, 0x492d, 0xa9, 0x01, 0x2a, 0x3c, 0x2c, 0x50, 0x16, 0x4f}
DEFINE_GUID!{REAL_TIME_NOTIFICATION_CAPABILITY_EX,
    0x6843da03, 0x154a, 0x4616, 0xa5, 0x08, 0x44, 0x37, 0x12, 0x95, 0xf9, 0x6b}
DEFINE_GUID!{ASSOCIATE_NAMERES_CONTEXT,
    0x59a38b67, 0xd4fe, 0x46e1, 0xba, 0x3c, 0x87, 0xea, 0x74, 0xca, 0x30, 0x49}
ENUM!{enum TCPSTATE {
    TCPSTATE_CLOSED,
    TCPSTATE_LISTEN,
    TCPSTATE_SYN_SENT,
    TCPSTATE_SYN_RCVD,
    TCPSTATE_ESTABLISHED,
    TCPSTATE_FIN_WAIT_1,
    TCPSTATE_FIN_WAIT_2,
    TCPSTATE_CLOSE_WAIT,
    TCPSTATE_CLOSING,
    TCPSTATE_LAST_ACK,
    TCPSTATE_TIME_WAIT,
    TCPSTATE_MAX,
}}
STRUCT!{struct TRANSPORT_SETTING_ID {
    Guid: GUID,
}}
pub type PTRANSPORT_SETTING_ID = *mut TRANSPORT_SETTING_ID;
STRUCT!{struct tcp_keepalive {
    onoff: ULONG,
    keepalivetime: ULONG,
    keepaliveinterval: ULONG,
}}
ENUM!{enum CONTROL_CHANNEL_TRIGGER_STATUS {
    CONTROL_CHANNEL_TRIGGER_STATUS_INVALID = 0,
    CONTROL_CHANNEL_TRIGGER_STATUS_SOFTWARE_SLOT_ALLOCATED = 1,
    CONTROL_CHANNEL_TRIGGER_STATUS_HARDWARE_SLOT_ALLOCATED = 2,
    CONTROL_CHANNEL_TRIGGER_STATUS_POLICY_ERROR = 3,
    CONTROL_CHANNEL_TRIGGER_STATUS_SYSTEM_ERROR = 4,
    CONTROL_CHANNEL_TRIGGER_STATUS_TRANSPORT_DISCONNECTED = 5,
    CONTROL_CHANNEL_TRIGGER_STATUS_SERVICE_UNAVAILABLE = 6,
}}
pub type PCONTROL_CHANNEL_TRIGGER_STATUS = *mut CONTROL_CHANNEL_TRIGGER_STATUS;
pub const CONTROL_CHANNEL_TRIGGER_STATUS_MAX: u32 = CONTROL_CHANNEL_TRIGGER_STATUS_SYSTEM_ERROR;
STRUCT!{struct REAL_TIME_NOTIFICATION_SETTING_INPUT {
    TransportSettingId: TRANSPORT_SETTING_ID,
    BrokerEventGuid: GUID,
}}
pub type PREAL_TIME_NOTIFICATION_SETTING_INPUT = *mut REAL_TIME_NOTIFICATION_SETTING_INPUT;
STRUCT!{struct REAL_TIME_NOTIFICATION_SETTING_INPUT_EX {
    TransportSettingId: TRANSPORT_SETTING_ID,
    BrokerEventGuid: GUID,
    Unmark: BOOLEAN,
}}
pub type PREAL_TIME_NOTIFICATION_SETTING_INPUT_EX = *mut REAL_TIME_NOTIFICATION_SETTING_INPUT_EX;
STRUCT!{struct REAL_TIME_NOTIFICATION_SETTING_OUTPUT {
    ChannelStatus: CONTROL_CHANNEL_TRIGGER_STATUS,
}}
pub type PREAL_TIME_NOTIFICATION_SETTING_OUTPUT = *mut REAL_TIME_NOTIFICATION_SETTING_OUTPUT;
STRUCT!{struct ASSOCIATE_NAMERES_CONTEXT_INPUT {
    TransportSettingId: TRANSPORT_SETTING_ID,
    Handle: UINT64,
}}
pub type PASSOCIATE_NAMERES_CONTEXT_INPUT = *mut ASSOCIATE_NAMERES_CONTEXT_INPUT;
pub const SIO_RCVALL: DWORD = _WSAIOW!(IOC_VENDOR,1);
pub const SIO_RCVALL_MCAST: DWORD = _WSAIOW!(IOC_VENDOR,2);
pub const SIO_RCVALL_IGMPMCAST: DWORD = _WSAIOW!(IOC_VENDOR,3);
pub const SIO_KEEPALIVE_VALS: DWORD = _WSAIOW!(IOC_VENDOR,4);
pub const SIO_ABSORB_RTRALERT: DWORD = _WSAIOW!(IOC_VENDOR,5);
pub const SIO_UCAST_IF: DWORD = _WSAIOW!(IOC_VENDOR,6);
pub const SIO_LIMIT_BROADCASTS: DWORD = _WSAIOW!(IOC_VENDOR,7);
pub const SIO_INDEX_BIND: DWORD = _WSAIOW!(IOC_VENDOR,8);
pub const SIO_INDEX_MCASTIF: DWORD = _WSAIOW!(IOC_VENDOR,9);
pub const SIO_INDEX_ADD_MCAST: DWORD = _WSAIOW!(IOC_VENDOR,10);
pub const SIO_INDEX_DEL_MCAST: DWORD = _WSAIOW!(IOC_VENDOR,11);
pub const SIO_RCVALL_MCAST_IF: DWORD = _WSAIOW!(IOC_VENDOR,13);
pub const SIO_RCVALL_IF: DWORD = _WSAIOW!(IOC_VENDOR,14);
pub const SIO_LOOPBACK_FAST_PATH: DWORD = _WSAIOW!(IOC_VENDOR,16);
pub const SIO_TCP_INITIAL_RTO: DWORD = _WSAIOW!(IOC_VENDOR,17);
pub const SIO_APPLY_TRANSPORT_SETTING: DWORD = _WSAIOW!(IOC_VENDOR,19);
pub const SIO_QUERY_TRANSPORT_SETTING: DWORD = _WSAIOW!(IOC_VENDOR,20);
pub const SIO_TCP_SET_ICW: DWORD = _WSAIOW!(IOC_VENDOR,22);
pub const SIO_TCP_SET_ACK_FREQUENCY: DWORD = _WSAIOW!(IOC_VENDOR,23);
pub const SIO_TCP_INFO: DWORD = _WSAIORW!(IOC_VENDOR,39);
ENUM!{enum RCVALL_VALUE {
    RCVALL_OFF = 0,
    RCVALL_ON = 1,
    RCVALL_SOCKETLEVELONLY = 2,
    RCVALL_IPLEVEL = 3,
}}
pub type PRCVALL_VALUE = *mut RCVALL_VALUE;
STRUCT!{struct RCVALL_IF {
    Mode: RCVALL_VALUE,
    Interface: ULONG,
}}
pub type PRCVALL_IF = *mut RCVALL_IF;
pub const TCP_INITIAL_RTO_UNSPECIFIED_RTT: USHORT = -1i16 as u16;
pub const TCP_INITIAL_RTO_UNSPECIFIED_MAX_SYN_RETRANSMISSIONS: UCHAR = -1i8 as u8;
pub const TCP_INITIAL_RTO_DEFAULT_RTT: USHORT = 0;
pub const TCP_INITIAL_RTO_DEFAULT_MAX_SYN_RETRANSMISSIONS: UCHAR = 0;
STRUCT!{struct TCP_INITIAL_RTO_PARAMETERS {
    Rtt: USHORT,
    MaxSynRetransmissions: UCHAR,
}}
pub type PTCP_INITIAL_RTO_PARAMETERS = *mut TCP_INITIAL_RTO_PARAMETERS;
ENUM!{enum TCP_ICW_LEVEL {
    TCP_ICW_LEVEL_DEFAULT = 0,
    TCP_ICW_LEVEL_HIGH = 1,
    TCP_ICW_LEVEL_VERY_HIGH = 2,
    TCP_ICW_LEVEL_AGGRESSIVE = 3,
    TCP_ICW_LEVEL_EXPERIMENTAL = 4,
    TCP_ICW_LEVEL_COMPAT = 254,
    TCP_ICW_LEVEL_MAX = 255,
}}
pub type PTCP_ICW_LEVEL = *mut TCP_ICW_LEVEL;
STRUCT!{struct TCP_ICW_PARAMETERS {
    Level: TCP_ICW_LEVEL,
}}
pub type PTCP_ICW_PARAMETERS = *mut TCP_ICW_PARAMETERS;
STRUCT!{struct TCP_ACK_FREQUENCY_PARAMETERS {
    TcpDelayedAckFrequency: UCHAR,
}}
pub type PTCP_ACK_FREQUENCY_PARAMETERS = *mut TCP_ACK_FREQUENCY_PARAMETERS;
STRUCT!{struct TCP_INFO_v0 {
    State: TCPSTATE,
    Mss: ULONG,
    ConnectionTimeMs: ULONG64,
    TimestampsEnabled: BOOLEAN,
    RttUs: ULONG,
    MinRttUs: ULONG,
    BytesInFlight: ULONG,
    Cwnd: ULONG,
    SndWnd: ULONG,
    RcvWnd: ULONG,
    RcvBuf: ULONG,
    BytesOut: ULONG64,
    BytesIn: ULONG64,
    BytesReordered: ULONG,
    BytesRetrans: ULONG,
    FastRetrans: ULONG,
    DupAcksIn: ULONG,
    TimeoutEpisodes: ULONG,
    SynRetrans: UCHAR,
}}
pub type PTCP_INFO_v0 = *mut TCP_INFO_v0;
pub const SIO_ACQUIRE_PORT_RESERVATION: DWORD = _WSAIOW!(IOC_VENDOR, 100);
pub const SIO_RELEASE_PORT_RESERVATION: DWORD = _WSAIOW!(IOC_VENDOR, 101);
pub const SIO_ASSOCIATE_PORT_RESERVATION: DWORD = _WSAIOW!(IOC_VENDOR, 102);
STRUCT!{struct INET_PORT_RANGE {
    StartPort: USHORT,
    NumberOfPorts: USHORT,
}}
pub type PINET_PORT_RANGE = *mut INET_PORT_RANGE;
pub type INET_PORT_RESERVATION = INET_PORT_RANGE;
pub type PINET_PORT_RESERVATION = *mut INET_PORT_RANGE;
STRUCT!{struct INET_PORT_RESERVATION_TOKEN {
    Token: ULONG64,
}}
pub type PINET_PORT_RESERVATION_TOKEN = *mut INET_PORT_RESERVATION_TOKEN;
STRUCT!{struct INET_PORT_RESERVATION_INSTANCE {
    Reservation: INET_PORT_RESERVATION,
    Token: INET_PORT_RESERVATION_TOKEN,
}}
pub type PINET_PORT_RESERVATION_INSTANCE = *mut INET_PORT_RESERVATION_INSTANCE;
STRUCT!{struct INET_PORT_RESERVATION_INFORMATION {
    OwningPid: ULONG,
}}
pub type PINET_PORT_RESERVATION_INFORMATION = *mut INET_PORT_RESERVATION_INFORMATION;
pub const SIO_SET_SECURITY: DWORD = _WSAIOW!(IOC_VENDOR, 200);
pub const SIO_QUERY_SECURITY: DWORD = _WSAIORW!(IOC_VENDOR, 201);
pub const SIO_SET_PEER_TARGET_NAME: DWORD = _WSAIOW!(IOC_VENDOR, 202);
pub const SIO_DELETE_PEER_TARGET_NAME: DWORD = _WSAIOW!(IOC_VENDOR, 203);
pub const SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS: DWORD = _WSAIOW!(IOC_VENDOR, 220);
pub const SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT: DWORD = _WSAIOW!(IOC_VENDOR, 221);
pub const SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS: DWORD = _WSAIOW!(IOC_VENDOR, 222);
pub const SIO_SOCKET_USAGE_NOTIFICATION: DWORD = _WSAIOW!(IOC_VENDOR, 204);
ENUM!{enum SOCKET_USAGE_TYPE {
    SYSTEM_CRITICAL_SOCKET = 1,
}}
ENUM!{enum SOCKET_SECURITY_PROTOCOL {
    SOCKET_SECURITY_PROTOCOL_DEFAULT,
    SOCKET_SECURITY_PROTOCOL_IPSEC,
    SOCKET_SECURITY_PROTOCOL_IPSEC2,
    SOCKET_SECURITY_PROTOCOL_INVALID,
}}
STRUCT!{struct SOCKET_SECURITY_SETTINGS {
    SecurityProtocol: SOCKET_SECURITY_PROTOCOL,
    SecurityFlags: ULONG,
}}
pub const SOCKET_SETTINGS_IPSEC_SKIP_FILTER_INSTANTIATION: ULONG = 0x1;
pub const SOCKET_SETTINGS_IPSEC_OPTIONAL_PEER_NAME_VERIFICATION: ULONG = 0x2;
pub const SOCKET_SETTINGS_IPSEC_ALLOW_FIRST_INBOUND_PKT_UNENCRYPTED: ULONG = 0x4;
pub const SOCKET_SETTINGS_IPSEC_PEER_NAME_IS_RAW_FORMAT: ULONG = 0x8;
STRUCT!{struct SOCKET_SECURITY_SETTINGS_IPSEC {
    SecurityProtocol: SOCKET_SECURITY_PROTOCOL,
    SecurityFlags: ULONG,
    IpsecFlags: ULONG,
    AuthipMMPolicyKey: GUID,
    AuthipQMPolicyKey: GUID,
    Reserved: GUID,
    Reserved2: UINT64,
    UserNameStringLen: ULONG,
    DomainNameStringLen: ULONG,
    PasswordStringLen: ULONG,
    AllStrings: [wchar_t; 0],
}}
STRUCT!{struct SOCKET_PEER_TARGET_NAME {
    SecurityProtocol: SOCKET_SECURITY_PROTOCOL,
    PeerAddress: SOCKADDR_STORAGE,
    PeerTargetNameStringLen: ULONG,
    AllStrings: [wchar_t; 0],
}}
STRUCT!{struct SOCKET_SECURITY_QUERY_TEMPLATE {
    SecurityProtocol: SOCKET_SECURITY_PROTOCOL,
    PeerAddress: SOCKADDR_STORAGE,
    PeerTokenAccessMask: ULONG,
}}
pub const SOCKET_QUERY_IPSEC2_ABORT_CONNECTION_ON_FIELD_CHANGE: ULONG = 0x1;
pub const SOCKET_QUERY_IPSEC2_FIELD_MASK_MM_SA_ID: ULONG = 0x1;
pub const SOCKET_QUERY_IPSEC2_FIELD_MASK_QM_SA_ID: ULONG = 0x2;
STRUCT!{struct SOCKET_SECURITY_QUERY_TEMPLATE_IPSEC2 {
    SecurityProtocol: SOCKET_SECURITY_PROTOCOL,
    PeerAddress: SOCKADDR_STORAGE,
    PeerTokenAccessMask: ULONG,
    Flags: ULONG,
    FieldMask: ULONG,
}}
pub const SOCKET_INFO_CONNECTION_SECURED: ULONG = 0x1;
pub const SOCKET_INFO_CONNECTION_ENCRYPTED: ULONG = 0x2;
pub const SOCKET_INFO_CONNECTION_IMPERSONATED: ULONG = 0x4;
STRUCT!{struct SOCKET_SECURITY_QUERY_INFO {
    SecurityProtocol: SOCKET_SECURITY_PROTOCOL,
    Flags: ULONG,
    PeerApplicationAccessTokenHandle: UINT64,
    PeerMachineAccessTokenHandle: UINT64,
}}
STRUCT!{struct SOCKET_SECURITY_QUERY_INFO_IPSEC2 {
    SecurityProtocol: SOCKET_SECURITY_PROTOCOL,
    Flags: ULONG,
    PeerApplicationAccessTokenHandle: UINT64,
    PeerMachineAccessTokenHandle: UINT64,
    MmSaId: UINT64,
    QmSaId: UINT64,
    NegotiationWinerr: UINT32,
    SaLookupContext: GUID,
}}
pub const SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE: DWORD = _WSAIOR!(IOC_VENDOR, 205);
pub const SIO_QUERY_RSS_SCALABILITY_INFO: DWORD = _WSAIOR!(IOC_VENDOR, 210);
STRUCT!{struct RSS_SCALABILITY_INFO {
    RssEnabled: BOOLEAN,
}}
pub type PRSS_SCALABILITY_INFO = *mut RSS_SCALABILITY_INFO;
#[inline]
pub fn IN4_CLASSA(i: LONG) -> bool {
    (i & 0x80) == 0
}
#[inline]
pub fn IN4_CLASSB(i: LONG) -> bool {
    (i & 0xc0) == 0x80
}
#[inline]
pub fn IN4_CLASSC(i: LONG) -> bool {
    (i & 0xe0) == 0xc0
}
#[inline]
pub fn IN4_CLASSD(i: LONG) -> bool {
    (i & 0xf0) == 0xe0
}
#[inline]
pub fn IN4_MULTICAST(i: LONG) -> bool {
    IN4_CLASSD(i)
}
pub const IN4ADDR_ANY: ULONG = INADDR_ANY;
pub const IN4ADDR_LOOPBACK: ULONG = 0x0100007f;
pub const IN4ADDR_BROADCAST: ULONG = INADDR_BROADCAST;
pub const IN4ADDR_NONE: ULONG = INADDR_NONE;
pub const IN4ADDR_LOOPBACKPREFIX_LENGTH: usize = 8;
pub const IN4ADDR_LINKLOCALPREFIX_LENGTH: usize = 16;
pub const IN4ADDR_MULTICASTPREFIX_LENGTH: usize = 4;
#[inline]
pub fn IN4_ADDR_EQUAL(a: &IN_ADDR, b: &IN_ADDR) -> bool {
    unsafe { *a.S_un.S_addr() == *b.S_un.S_addr() }
}
#[inline]
pub fn IN4_UNALIGNED_ADDR_EQUAL(a: &IN_ADDR, b: &IN_ADDR) -> bool {
    unsafe { *a.S_un.S_addr() == *b.S_un.S_addr() }
}
#[inline]
pub fn IN4_IS_ADDR_UNSPECIFIED(a: &IN_ADDR) -> bool {
    unsafe { *a.S_un.S_addr() == IN4ADDR_ANY }
}
#[inline]
pub fn IN4_IS_UNALIGNED_ADDR_UNSPECIFIED(a: &IN_ADDR) -> bool {
    unsafe { *a.S_un.S_addr() == IN4ADDR_ANY }
}
#[inline]
pub fn IN4_IS_ADDR_LOOPBACK(a: &IN_ADDR) -> bool {
    unsafe { a.S_un.S_un_b().s_b1 == 0x7f }
}
#[inline]
pub fn IN4_IS_UNALIGNED_ADDR_LOOPBACK(a: &IN_ADDR) -> bool {
    unsafe { a.S_un.S_un_b().s_b1 == 0x7f }
}
#[inline]
pub fn IN4_IS_ADDR_BROADCAST(a: &IN_ADDR) -> bool {
    unsafe { *a.S_un.S_addr() == IN4ADDR_BROADCAST }
}
#[inline]
pub fn IN4_IS_UNALIGNED_ADDR_BROADCAST(a: &IN_ADDR) -> bool {
    unsafe { *a.S_un.S_addr() == IN4ADDR_BROADCAST }
}
#[inline]
pub fn IN4_IS_ADDR_MULTICAST(a: &IN_ADDR) -> bool {
    IN4_MULTICAST(unsafe { *a.S_un.S_addr() as LONG })
}
#[inline]
pub fn IN4_IS_UNALIGNED_ADDR_MULTICAST(a: &IN_ADDR) -> bool {
    IN4_MULTICAST(unsafe { *a.S_un.S_addr() as LONG })
}
#[inline]
pub fn IN4_IS_ADDR_LINKLOCAL(a: &IN_ADDR) -> bool {
    unsafe { (*a.S_un.S_addr() & 0xffff) == 0xfea9 }
}
#[inline]
pub fn IN4_IS_UNALIGNED_ADDR_LINKLOCAL(a: &IN_ADDR) -> bool {
    unsafe { (*a.S_un.S_addr() & 0xffff) == 0xfea9 }
}
#[inline]
pub fn IN4_IS_ADDR_SITELOCAL(_: &IN_ADDR) -> bool {
    false
}
#[inline]
pub fn IN4_IS_UNALIGNED_ADDR_SITELOCAL(_: &IN_ADDR) -> bool {
    false
}
#[inline]
pub fn IN4_IS_ADDR_RFC1918(a: &IN_ADDR) -> bool {
    let s_addr = unsafe { *a.S_un.S_addr() };
    ((s_addr & 0x00ff) == 0x0a) || ((s_addr & 0xf0ff) == 0x10ac) || ((s_addr & 0xffff) == 0xa8c0)
}
#[inline]
pub fn IN4_IS_UNALIGNED_ADDR_RFC1918(a: &IN_ADDR) -> bool {
    IN4_IS_ADDR_RFC1918(a)
}
#[inline]
pub fn IN4_IS_ADDR_MC_LINKLOCAL(a: &IN_ADDR) -> bool {
    unsafe { (*a.S_un.S_addr() & 0xffffff) == 0xe0 }
}
#[inline]
pub fn IN4_IS_ADDR_MC_ADMINLOCAL(a: &IN_ADDR) -> bool {
    unsafe { (*a.S_un.S_addr() & 0xffff) == 0xffef }
}
#[inline]
pub fn IN4_IS_ADDR_MC_SITELOCAL(a: &IN_ADDR) -> bool {
    let first = unsafe { (*a.S_un.S_addr() & 0xff) == 0xef };
    first && !IN4_IS_ADDR_MC_ADMINLOCAL(a)
}
#[inline]
pub fn IN4ADDR_ISANY(a: &SOCKADDR_IN) -> bool {
    IN4_IS_ADDR_UNSPECIFIED(&a.sin_addr)
}
#[inline]
pub fn IN4ADDR_ISLOOPBACK(a: &SOCKADDR_IN) -> bool {
    IN4_IS_ADDR_LOOPBACK(&a.sin_addr)
}
extern "system" {
    pub fn RtlIpv4AddressToStringA(
        Addr: *const IN_ADDR,
        S: PSTR,
    ) -> PSTR;
    pub fn RtlIpv4AddressToStringExA(
        Address: *const IN_ADDR,
        Port: USHORT,
        AddressString: PSTR,
        AddressStringLength: PULONG,
    ) -> LONG;
    pub fn RtlIpv4AddressToStringW(
        Addr: *const IN_ADDR,
        S: PWSTR,
    ) -> PWSTR;
    pub fn RtlIpv4AddressToStringExW(
        Address: *const IN_ADDR,
        Port: USHORT,
        AddressString: PWSTR,
        AddressStringLength: PULONG,
    ) -> LONG;
    pub fn RtlIpv4StringToAddressA(
        S: PCSTR,
        Strict: BOOLEAN,
        Terminator: *mut PCSTR,
        Addr: *mut IN_ADDR,
    ) -> LONG;
    pub fn RtlIpv4StringToAddressExA(
        AddressString: PCSTR,
        Strict: BOOLEAN,
        Address: *mut IN_ADDR,
        Port: PUSHORT,
    ) -> LONG;
    pub fn RtlIpv4StringToAddressW(
        S: PCWSTR,
        Strict: BOOLEAN,
        Terminator: *mut LPCWSTR,
        Addr: *mut IN_ADDR,
    ) -> LONG;
    pub fn RtlIpv4StringToAddressExW(
        AddressString: PCWSTR,
        Strict: BOOLEAN,
        Address: *mut IN_ADDR,
        Port: PUSHORT,
    ) -> LONG;
    pub fn RtlIpv6AddressToStringA(
        Addr: *const IN6_ADDR,
        S: PSTR,
    ) -> PSTR;
    pub fn RtlIpv6AddressToStringExA(
        Address: *const IN6_ADDR,
        ScopeId: ULONG,
        Port: USHORT,
        AddressString: PSTR,
        AddressStringLength: PULONG,
    ) -> LONG;
    pub fn RtlIpv6AddressToStringW(
        Addr: *const IN6_ADDR,
        S: PWSTR,
    ) -> PWSTR;
    pub fn RtlIpv6AddressToStringExW(
        Address: *const IN6_ADDR,
        ScopeId: ULONG,
        Port: USHORT,
        AddressString: PWSTR,
        AddressStringLength: PULONG,
    ) -> LONG;
    pub fn RtlIpv6StringToAddressA(
        S: PCSTR,
        Terminator: *mut PCSTR,
        Addr: *mut IN6_ADDR,
    ) -> LONG;
    pub fn RtlIpv6StringToAddressExA(
        AddressString: PCSTR,
        Address: *mut IN6_ADDR,
        ScopeId: PULONG,
        Port: PUSHORT,
    ) -> LONG;
    pub fn RtlIpv6StringToAddressW(
        S: PCWSTR,
        Terminator: *mut PCWSTR,
        Addr: *mut IN6_ADDR,
    ) -> LONG;
    pub fn RtlIpv6StringToAddressExW(
        AddressString: PCWSTR,
        Address: *mut IN6_ADDR,
        ScopeId: PULONG,
        Port: PUSHORT,
    ) -> LONG;
}
DECLARE_HANDLE!{DL_EUI48, _DL_EUI48}
pub type PDL_EUI48 = *mut DL_EUI48;
extern "system" {
    pub fn RtlEthernetAddressToStringA(
        Addr: *const DL_EUI48,
        S: PSTR,
    ) -> PSTR;
    pub fn RtlEthernetAddressToStringW(
        Addr: *const DL_EUI48,
        S: PWSTR,
    ) -> PWSTR;
    pub fn RtlEthernetStringToAddressA(
        S: PCSTR,
        Terminator: *mut PCSTR,
        Addr: *mut DL_EUI48,
    ) -> LONG;
    pub fn RtlEthernetStringToAddressW(
        S: PCWSTR,
        Terminator: *mut LPCWSTR,
        Addr: *mut DL_EUI48,
    ) -> LONG;
}

[ Dauer der Verarbeitung: 0.3 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge