aboutsummaryrefslogtreecommitdiff
path: root/win32/include/winapi/ws2tcpip.h
diff options
context:
space:
mode:
authorseyko <seyko2@gmail.com>2015-05-14 01:27:46 +0300
committerseyko <seyko2@gmail.com>2015-05-14 01:27:46 +0300
commit101cc8747f767344d38566bd229f1761ad96f744 (patch)
treeef800583f7994bb56c6c32bf4256f44727c5d48d /win32/include/winapi/ws2tcpip.h
parent80322adaa0544eedc7198ed4c529a41856f66f43 (diff)
downloadtinycc-101cc8747f767344d38566bd229f1761ad96f744.tar.gz
tinycc-101cc8747f767344d38566bd229f1761ad96f744.tar.bz2
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.
Diffstat (limited to 'win32/include/winapi/ws2tcpip.h')
-rw-r--r--win32/include/winapi/ws2tcpip.h437
1 files changed, 437 insertions, 0 deletions
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 <winsock2.h>
+#include <psdk_inc/_ip_mreq1.h>
+
+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 <ws2ipdef.h>
+
+
+#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 <mstcpip.h>
+
+#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_ */