From 101cc8747f767344d38566bd229f1761ad96f744 Mon Sep 17 00:00:00 2001 From: seyko Date: Thu, 14 May 2015 01:27:46 +0300 Subject: win32/include/winapi changes from https://github.com/run4flat/tinycc.git just for testing. Is it needed? I'm not a MSYS citizen. run4flat is a tcc fork by David Mertens that knows how to work with multiple symbol tables. Excelent work. A good descriptions of the tcc internals inside a code comments. --- win32/include/winapi/ws2tcpip.h | 437 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 437 insertions(+) create mode 100644 win32/include/winapi/ws2tcpip.h (limited to 'win32/include/winapi/ws2tcpip.h') diff --git a/win32/include/winapi/ws2tcpip.h b/win32/include/winapi/ws2tcpip.h new file mode 100644 index 0000000..4e4d7a4 --- /dev/null +++ b/win32/include/winapi/ws2tcpip.h @@ -0,0 +1,437 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#ifndef _WS2TCPIP_H_ +#define _WS2TCPIP_H_ + +#include <_mingw_unicode.h> + +#include +#include + +struct ip_mreq_source { + struct in_addr imr_multiaddr; + struct in_addr imr_sourceaddr; + struct in_addr imr_interface; +}; + +struct ip_msfilter { + struct in_addr imsf_multiaddr; + struct in_addr imsf_interface; + u_long imsf_fmode; + u_long imsf_numsrc; + struct in_addr imsf_slist[1]; +}; + +#define IP_MSFILTER_SIZE(numsrc) (sizeof(struct ip_msfilter)-sizeof(struct in_addr) + (numsrc)*sizeof(struct in_addr)) + +#define SIO_GET_INTERFACE_LIST _IOR('t',127,u_long) + +#define SIO_GET_INTERFACE_LIST_EX _IOR('t',126,u_long) +#define SIO_SET_MULTICAST_FILTER _IOW('t',125,u_long) +#define SIO_GET_MULTICAST_FILTER _IOW('t',124 | IOC_IN,u_long) + +#define IP_OPTIONS 1 +#define IP_HDRINCL 2 +#define IP_TOS 3 +#define IP_TTL 4 +#define IP_MULTICAST_IF 9 +#define IP_MULTICAST_TTL 10 +#define IP_MULTICAST_LOOP 11 +#define IP_ADD_MEMBERSHIP 12 +#define IP_DROP_MEMBERSHIP 13 +#define IP_DONTFRAGMENT 14 +#define IP_ADD_SOURCE_MEMBERSHIP 15 +#define IP_DROP_SOURCE_MEMBERSHIP 16 +#define IP_BLOCK_SOURCE 17 +#define IP_UNBLOCK_SOURCE 18 +#define IP_PKTINFO 19 +#define IP_RECEIVE_BROADCAST 22 + +#define IPV6_HDRINCL 2 +#define IPV6_UNICAST_HOPS 4 +#define IPV6_MULTICAST_IF 9 +#define IPV6_MULTICAST_HOPS 10 +#define IPV6_MULTICAST_LOOP 11 +#define IPV6_ADD_MEMBERSHIP 12 +#define IPV6_DROP_MEMBERSHIP 13 +#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP +#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP +#define IPV6_PKTINFO 19 +#define IPV6_HOPLIMIT 21 +#define IPV6_PROTECTION_LEVEL 23 + +#define PROTECTION_LEVEL_UNRESTRICTED 10 +#define PROTECTION_LEVEL_DEFAULT 20 +#define PROTECTION_LEVEL_RESTRICTED 30 + +#define UDP_NOCHECKSUM 1 +#define UDP_CHECKSUM_COVERAGE 20 + +#define TCP_EXPEDITED_1122 0x0002 + + +#include + + +#define SS_PORT(ssp) (((struct sockaddr_in*)(ssp))->sin_port) + +#define IN6ADDR_ANY_INIT { 0 } +#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } + +#ifdef __cplusplus +extern "C" { +#endif + + extern const struct in6_addr in6addr_any; + extern const struct in6_addr in6addr_loopback; + +#define WS2TCPIP_INLINE __CRT_INLINE + +int IN6_ADDR_EQUAL(const struct in6_addr *,const struct in6_addr *); +int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *); +int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *); +int IN6_IS_ADDR_MULTICAST(const struct in6_addr *); +int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *); +int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *); +int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *); +int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *); +int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *); +int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *); +int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *); +int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *); +int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *); +int IN6ADDR_ISANY(const struct sockaddr_in6 *); +int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *); +void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *); +void IN6_SET_ADDR_LOOPBACK(struct in6_addr *); +void IN6ADDR_SETANY(struct sockaddr_in6 *); +void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *); + +#ifndef __CRT__NO_INLINE +WS2TCPIP_INLINE int IN6_ADDR_EQUAL(const struct in6_addr *a,const struct in6_addr *b) { return (memcmp(a,b,sizeof(struct in6_addr))==0); } +WS2TCPIP_INLINE int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && (a->s6_words[6]==0) && (a->s6_words[7]==0)); } +WS2TCPIP_INLINE int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && (a->s6_words[6]==0) && (a->s6_words[7]==0x0100)); } +WS2TCPIP_INLINE int IN6_IS_ADDR_MULTICAST(const struct in6_addr *a) { return (a->s6_bytes[0]==0xff); } +WS2TCPIP_INLINE int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0x80)); } +WS2TCPIP_INLINE int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0xc0)); } +WS2TCPIP_INLINE int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0xffff)); } +WS2TCPIP_INLINE int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && !((a->s6_words[6]==0) && (a->s6_addr[14]==0) && ((a->s6_addr[15]==0) || (a->s6_addr[15]==1)))); } +WS2TCPIP_INLINE int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==1); } +WS2TCPIP_INLINE int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==2); } +WS2TCPIP_INLINE int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==5); } +WS2TCPIP_INLINE int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==8); } +WS2TCPIP_INLINE int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==0xe); } +WS2TCPIP_INLINE int IN6ADDR_ISANY(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_UNSPECIFIED(&a->sin6_addr)); } +WS2TCPIP_INLINE int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_LOOPBACK(&a->sin6_addr)); } +WS2TCPIP_INLINE void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *a) { memset(a->s6_bytes,0,sizeof(struct in6_addr)); } +WS2TCPIP_INLINE void IN6_SET_ADDR_LOOPBACK(struct in6_addr *a) { + memset(a->s6_bytes,0,sizeof(struct in6_addr)); + a->s6_bytes[15] = 1; +} +WS2TCPIP_INLINE void IN6ADDR_SETANY(struct sockaddr_in6 *a) { + a->sin6_family = AF_INET6; + a->sin6_port = 0; + a->sin6_flowinfo = 0; + IN6_SET_ADDR_UNSPECIFIED(&a->sin6_addr); + a->sin6_scope_id = 0; +} +WS2TCPIP_INLINE void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *a) { + a->sin6_family = AF_INET6; + a->sin6_port = 0; + a->sin6_flowinfo = 0; + IN6_SET_ADDR_LOOPBACK(&a->sin6_addr); + a->sin6_scope_id = 0; +} +#endif /* !__CRT__NO_INLINE */ + +#ifdef __cplusplus +} +#endif + +typedef struct _INTERFACE_INFO_EX { + u_long iiFlags; + SOCKET_ADDRESS iiAddress; + SOCKET_ADDRESS iiBroadcastAddress; + SOCKET_ADDRESS iiNetmask; +} INTERFACE_INFO_EX,*LPINTERFACE_INFO_EX; + +#define IFF_UP 0x00000001 +#define IFF_BROADCAST 0x00000002 +#define IFF_LOOPBACK 0x00000004 +#define IFF_POINTTOPOINT 0x00000008 +#define IFF_MULTICAST 0x00000010 + +typedef struct in_pktinfo { + IN_ADDR ipi_addr; + UINT ipi_ifindex; +} IN_PKTINFO; + +C_ASSERT(sizeof(IN_PKTINFO)==8); + +typedef struct in6_pktinfo { + IN6_ADDR ipi6_addr; + UINT ipi6_ifindex; +} IN6_PKTINFO; + +C_ASSERT(sizeof(IN6_PKTINFO)==20); + +#define EAI_AGAIN WSATRY_AGAIN +#define EAI_BADFLAGS WSAEINVAL +#define EAI_FAIL WSANO_RECOVERY +#define EAI_FAMILY WSAEAFNOSUPPORT +#define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY + +#define EAI_NONAME WSAHOST_NOT_FOUND +#define EAI_SERVICE WSATYPE_NOT_FOUND +#define EAI_SOCKTYPE WSAESOCKTNOSUPPORT + +#define EAI_NODATA EAI_NONAME + +typedef struct addrinfo { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + size_t ai_addrlen; + char *ai_canonname; + struct sockaddr *ai_addr; + struct addrinfo *ai_next; +} ADDRINFOA,*PADDRINFOA; + +typedef struct addrinfoW { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + size_t ai_addrlen; + PWSTR ai_canonname; + struct sockaddr *ai_addr; + struct addrinfoW *ai_next; +} ADDRINFOW,*PADDRINFOW; + +typedef __MINGW_NAME_AW(ADDRINFO) ADDRINFOT,*PADDRINFOT; + +typedef ADDRINFOA ADDRINFO,*LPADDRINFO; + +#define AI_PASSIVE 0x1 +#define AI_CANONNAME 0x2 +#define AI_NUMERICHOST 0x4 +#if (_WIN32_WINNT >= 0x0600) +#define AI_ADDRCONFIG 0x0400 +#define AI_NON_AUTHORITATIVE 0x04000 +#define AI_SECURE 0x08000 +#define AI_RETURN_PREFERRED_NAMES 0x010000 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define GetAddrInfo __MINGW_NAME_AW(GetAddrInfo) + + WINSOCK_API_LINKAGE int WSAAPI getaddrinfo(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); + WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoW(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult); + +#define GetAddrInfoA getaddrinfo + +#if INCL_WINSOCK_API_TYPEDEFS + typedef int (WSAAPI *LPFN_GETADDRINFO)(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); + typedef int (WSAAPI *LPFN_GETADDRINFOW)(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult); + +#define LPFN_GETADDRINFOA LPFN_GETADDRINFO + +#define LPFN_GETADDRINFOT __MINGW_NAME_AW(LPFN_GETADDRINFO) +#endif + +#define FreeAddrInfo __MINGW_NAME_AW(FreeAddrInfo) + + WINSOCK_API_LINKAGE void WSAAPI freeaddrinfo(LPADDRINFO pAddrInfo); + WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo); + +#define FreeAddrInfoA freeaddrinfo + +#if INCL_WINSOCK_API_TYPEDEFS + typedef void (WSAAPI *LPFN_FREEADDRINFO)(struct addrinfo *ai); + typedef void (WSAAPI *LPFN_FREEADDRINFOW)(PADDRINFOW pAddrInfo); + +#define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO + +#define LPFN_FREEADDRINFOT __MINGW_NAME_AW(LPFN_FREEADDRINFO) +#endif + + typedef int socklen_t; + +#define GetNameInfo __MINGW_NAME_AW(GetNameInfo) + + WINSOCK_API_LINKAGE int WSAAPI getnameinfo(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags); + WINSOCK_API_LINKAGE INT WSAAPI GetNameInfoW(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags); + +#define GetNameInfoA getnameinfo + +#if INCL_WINSOCK_API_TYPEDEFS + typedef int (WSAAPI *LPFN_GETNAMEINFO)(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags); + typedef INT (WSAAPI *LPFN_GETNAMEINFOW)(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags); + +#define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO + +#define LPFN_GETNAMEINFOT __MINGW_NAME_AW(LPFN_GETNAMEINFO) +#endif + +#define gai_strerror __MINGW_NAME_AW(gai_strerror) + +#define GAI_STRERROR_BUFFER_SIZE 1024 + +char *gai_strerrorA (int); +WCHAR *gai_strerrorW(int); + +#define NI_MAXHOST 1025 +#define NI_MAXSERV 32 + +#define INET_ADDRSTRLEN 22 +#define INET6_ADDRSTRLEN 65 + +#define NI_NOFQDN 0x01 +#define NI_NUMERICHOST 0x02 +#define NI_NAMEREQD 0x04 +#define NI_NUMERICSERV 0x08 +#define NI_DGRAM 0x10 + +#include + +#if (_WIN32_WINNT >= 0x0600) +#define addrinfoEx __MINGW_NAME_AW(addrinfoEx) +#define PADDRINFOEX __MINGW_NAME_AW(PADDRINFOEX) +#define GetAddrInfoEx __MINGW_NAME_AW(GetAddrInfoEx) +#define SetAddrInfoEx __MINGW_NAME_AW(SetAddrInfoEx) +#define FreeAddrInfoEx __MINGW_NAME_AW(FreeAddrInfoEx) + + typedef struct addrinfoExA { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + size_t ai_addrlen; + LPCSTR ai_canonname; + struct sockaddr *ai_addr; + void *ai_blob; + size_t ai_bloblen; + LPGUID ai_provider; + struct addrinfoexA *ai_next; + } ADDRINFOEXA, *PADDRINFOEXA; + + typedef struct addrinfoExW { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + size_t ai_addrlen; + LPCWSTR ai_canonname; + struct sockaddr *ai_addr; + void *ai_blob; + size_t ai_bloblen; + LPGUID ai_provider; + struct addrinfoexW *ai_next; + } ADDRINFOEXW, *PADDRINFOEXW; + +typedef PVOID LPLOOKUPSERVICE_COMPLETION_ROUTINE; /*reserved*/ + +WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExA(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace, + LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult, + struct timeval *timeout,LPOVERLAPPED lpOverlapped, + LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, + LPHANDLE lpNameHandle); +WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace, + LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult, + struct timeval *timeout,LPOVERLAPPED lpOverlapped, + LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, + LPHANDLE lpNameHandle); + +WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExA(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses, + DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, + LPGUID lpNspId,struct timeval *timeout,LPOVERLAPPED lpOverlapped, + LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, + LPHANDLE lpNameHandle); +WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses, + DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, + LPGUID lpNspId,struct timeval *timeout,LPOVERLAPPED lpOverlapped, + LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, + LPHANDLE lpNameHandle); + +WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExA(PADDRINFOEXA pAddrInfo); +WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExW(PADDRINFOEXW pAddrInfo); + +#if INCL_WINSOCK_API_TYPEDEFS +#define LPFN_GETADDRINFOEX __MINGW_NAME_AW(LPFN_GETADDRINFOEX) + typedef int (WSAAPI *LPFN_GETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace, + LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult, + struct timeval *timeout,LPOVERLAPPED lpOverlapped, + LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, + LPHANDLE lpNameHandle); + typedef int (WSAAPI *LPFN_GETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace, + LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult, + struct timeval *timeout,LPOVERLAPPED lpOverlapped, + LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, + LPHANDLE lpNameHandle); + +#define LPFN_SETADDRINFOEX __MINGW_NAME_AW(LPFN_SETADDRINFOEX) + typedef int (WSAAPI *LPFN_SETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses, + DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, + LPGUID lpNspId,struct timeval *timeout,LPOVERLAPPED lpOverlapped, + LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, + LPHANDLE lpNameHandle); + typedef int (WSAAPI *LPFN_SETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses, + DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, + LPGUID lpNspId,struct timeval *timeout,LPOVERLAPPED lpOverlapped, + LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, + LPHANDLE lpNameHandle); + +#define LPFN_FREEADDRINFOEX __MINGW_NAME_AW(LPFN_FREEADDRINFOEX) + typedef void (WSAAPI *LPFN_FREEADDRINFOEXA)(PADDRINFOEXA pAddrInfo); + typedef void (WSAAPI *LPFN_FREEADDRINFOEXW)(PADDRINFOEXW pAddrInfo); +#endif /* INCL_WINSOCK_API_TYPEDEFS */ + + +WINSOCK_API_LINKAGE int WSAAPI WSAImpersonateSocketPeer( + SOCKET Socket, + const struct sockaddr *PeerAddress, + ULONG peerAddressLen +); + +WINSOCK_API_LINKAGE int WSAAPI WSAQuerySocketSecurity( + SOCKET Socket, + const SOCKET_SECURITY_QUERY_TEMPLATE *SecurityQueryTemplate, + ULONG SecurityQueryTemplateLen, + SOCKET_SECURITY_QUERY_INFO *SecurityQueryInfo, + ULONG *SecurityQueryInfoLen, + LPWSAOVERLAPPED Overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine +); + +WINSOCK_API_LINKAGE int WSAAPI WSARevertImpersonation(void); + +WINSOCK_API_LINKAGE int WSAAPI WSASetSocketPeerTargetName( + SOCKET Socket, + const SOCKET_PEER_TARGET_NAME *PeerTargetName, + ULONG PeerTargetNameLen, + LPWSAOVERLAPPED Overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine +); + +WINSOCK_API_LINKAGE int WSAAPI WSASetSocketSecurity( + SOCKET Socket, + const SOCKET_SECURITY_SETTINGS *SecuritySettings, + ULONG SecuritySettingsLen, + LPWSAOVERLAPPED Overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine +); + +#endif /*(_WIN32_WINNT >= 0x0600)*/ + +#ifdef __cplusplus +} +#endif + +#endif /* _WS2TCPIP_H_ */ -- cgit v1.3.1