Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /**
  2.  * This file has no copyright assigned and is placed in the Public Domain.
  3.  * This file is part of the w64 mingw-runtime package.
  4.  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5.  */
  6. #ifndef _WS2TCPIP_H_
  7. #define _WS2TCPIP_H_
  8.  
  9. #include <_mingw_unicode.h>
  10.  
  11. #include <winsock2.h>
  12. #include <psdk_inc/_ip_mreq1.h>
  13.  
  14. struct ip_mreq_source {
  15.   struct in_addr imr_multiaddr;
  16.   struct in_addr imr_sourceaddr;
  17.   struct in_addr imr_interface;
  18. };
  19.  
  20. struct ip_msfilter {
  21.   struct in_addr imsf_multiaddr;
  22.   struct in_addr imsf_interface;
  23.   u_long imsf_fmode;
  24.   u_long imsf_numsrc;
  25.   struct in_addr imsf_slist[1];
  26. };
  27.  
  28. #define IP_MSFILTER_SIZE(numsrc) (sizeof(struct ip_msfilter)-sizeof(struct in_addr) + (numsrc)*sizeof(struct in_addr))
  29.  
  30. #define SIO_GET_INTERFACE_LIST _IOR('t',127,u_long)
  31.  
  32. #define SIO_GET_INTERFACE_LIST_EX _IOR('t',126,u_long)
  33. #define SIO_SET_MULTICAST_FILTER _IOW('t',125,u_long)
  34. #define SIO_GET_MULTICAST_FILTER _IOW('t',124 | IOC_IN,u_long)
  35.  
  36. #define IP_OPTIONS 1
  37. #define IP_HDRINCL 2
  38. #define IP_TOS 3
  39. #define IP_TTL 4
  40. #define IP_MULTICAST_IF 9
  41. #define IP_MULTICAST_TTL 10
  42. #define IP_MULTICAST_LOOP 11
  43. #define IP_ADD_MEMBERSHIP 12
  44. #define IP_DROP_MEMBERSHIP 13
  45. #define IP_DONTFRAGMENT 14
  46. #define IP_ADD_SOURCE_MEMBERSHIP 15
  47. #define IP_DROP_SOURCE_MEMBERSHIP 16
  48. #define IP_BLOCK_SOURCE 17
  49. #define IP_UNBLOCK_SOURCE 18
  50. #define IP_PKTINFO 19
  51. #define IP_RECEIVE_BROADCAST 22
  52.  
  53. #define IPV6_HDRINCL 2
  54. #define IPV6_UNICAST_HOPS 4
  55. #define IPV6_MULTICAST_IF 9
  56. #define IPV6_MULTICAST_HOPS 10
  57. #define IPV6_MULTICAST_LOOP 11
  58. #define IPV6_ADD_MEMBERSHIP 12
  59. #define IPV6_DROP_MEMBERSHIP 13
  60. #define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP
  61. #define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP
  62. #define IPV6_PKTINFO 19
  63. #define IPV6_HOPLIMIT 21
  64. #define IPV6_PROTECTION_LEVEL 23
  65.  
  66. #define PROTECTION_LEVEL_UNRESTRICTED 10
  67. #define PROTECTION_LEVEL_DEFAULT 20
  68. #define PROTECTION_LEVEL_RESTRICTED 30
  69.  
  70. #define UDP_NOCHECKSUM 1
  71. #define UDP_CHECKSUM_COVERAGE 20
  72.  
  73. #define TCP_EXPEDITED_1122 0x0002
  74.  
  75.  
  76. #include <ws2ipdef.h>
  77.  
  78.  
  79. #define SS_PORT(ssp) (((struct sockaddr_in*)(ssp))->sin_port)
  80.  
  81. #define IN6ADDR_ANY_INIT { 0 }
  82. #define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
  83.  
  84. #ifdef __cplusplus
  85. extern "C" {
  86. #endif
  87.  
  88.   extern const struct in6_addr in6addr_any;
  89.   extern const struct in6_addr in6addr_loopback;
  90.  
  91. #define WS2TCPIP_INLINE __CRT_INLINE
  92.  
  93. int IN6_ADDR_EQUAL(const struct in6_addr *,const struct in6_addr *);
  94. int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *);
  95. int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *);
  96. int IN6_IS_ADDR_MULTICAST(const struct in6_addr *);
  97. int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *);
  98. int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *);
  99. int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *);
  100. int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *);
  101. int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *);
  102. int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *);
  103. int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *);
  104. int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *);
  105. int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *);
  106. int IN6ADDR_ISANY(const struct sockaddr_in6 *);
  107. int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *);
  108. void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *);
  109. void IN6_SET_ADDR_LOOPBACK(struct in6_addr *);
  110. void IN6ADDR_SETANY(struct sockaddr_in6 *);
  111. void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *);
  112.  
  113. #ifndef __CRT__NO_INLINE
  114. 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); }
  115. 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)); }
  116. 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)); }
  117. WS2TCPIP_INLINE int IN6_IS_ADDR_MULTICAST(const struct in6_addr *a) { return (a->s6_bytes[0]==0xff); }
  118. WS2TCPIP_INLINE int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0x80)); }
  119. WS2TCPIP_INLINE int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0xc0)); }
  120. 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)); }
  121. 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)))); }
  122. 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); }
  123. 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); }
  124. 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); }
  125. 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); }
  126. 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); }
  127. WS2TCPIP_INLINE int IN6ADDR_ISANY(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_UNSPECIFIED(&a->sin6_addr)); }
  128. WS2TCPIP_INLINE int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_LOOPBACK(&a->sin6_addr)); }
  129. WS2TCPIP_INLINE void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *a) { memset(a->s6_bytes,0,sizeof(struct in6_addr)); }
  130. WS2TCPIP_INLINE void IN6_SET_ADDR_LOOPBACK(struct in6_addr *a) {
  131.   memset(a->s6_bytes,0,sizeof(struct in6_addr));
  132.   a->s6_bytes[15] = 1;
  133. }
  134. WS2TCPIP_INLINE void IN6ADDR_SETANY(struct sockaddr_in6 *a) {
  135.   a->sin6_family = AF_INET6;
  136.   a->sin6_port = 0;
  137.   a->sin6_flowinfo = 0;
  138.   IN6_SET_ADDR_UNSPECIFIED(&a->sin6_addr);
  139.   a->sin6_scope_id = 0;
  140. }
  141. WS2TCPIP_INLINE void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *a) {
  142.   a->sin6_family = AF_INET6;
  143.   a->sin6_port = 0;
  144.   a->sin6_flowinfo = 0;
  145.   IN6_SET_ADDR_LOOPBACK(&a->sin6_addr);
  146.   a->sin6_scope_id = 0;
  147. }
  148. #endif /* !__CRT__NO_INLINE */
  149.  
  150. #ifdef __cplusplus
  151. }
  152. #endif
  153.  
  154. typedef struct _INTERFACE_INFO_EX {
  155.   u_long iiFlags;
  156.   SOCKET_ADDRESS iiAddress;
  157.   SOCKET_ADDRESS iiBroadcastAddress;
  158.   SOCKET_ADDRESS iiNetmask;
  159. } INTERFACE_INFO_EX,*LPINTERFACE_INFO_EX;
  160.  
  161. #define IFF_UP 0x00000001
  162. #define IFF_BROADCAST 0x00000002
  163. #define IFF_LOOPBACK 0x00000004
  164. #define IFF_POINTTOPOINT 0x00000008
  165. #define IFF_MULTICAST 0x00000010
  166.  
  167. typedef struct in_pktinfo {
  168.   IN_ADDR ipi_addr;
  169.   UINT ipi_ifindex;
  170. } IN_PKTINFO;
  171.  
  172. C_ASSERT(sizeof(IN_PKTINFO)==8);
  173.  
  174. typedef struct in6_pktinfo {
  175.   IN6_ADDR ipi6_addr;
  176.   UINT ipi6_ifindex;
  177. } IN6_PKTINFO;
  178.  
  179. C_ASSERT(sizeof(IN6_PKTINFO)==20);
  180.  
  181. #define EAI_AGAIN WSATRY_AGAIN
  182. #define EAI_BADFLAGS WSAEINVAL
  183. #define EAI_FAIL WSANO_RECOVERY
  184. #define EAI_FAMILY WSAEAFNOSUPPORT
  185. #define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
  186.  
  187. #define EAI_NONAME WSAHOST_NOT_FOUND
  188. #define EAI_SERVICE WSATYPE_NOT_FOUND
  189. #define EAI_SOCKTYPE WSAESOCKTNOSUPPORT
  190.  
  191. #define EAI_NODATA EAI_NONAME
  192.  
  193. typedef struct addrinfo {
  194.   int ai_flags;
  195.   int ai_family;
  196.   int ai_socktype;
  197.   int ai_protocol;
  198.   size_t ai_addrlen;
  199.   char *ai_canonname;
  200.   struct sockaddr *ai_addr;
  201.   struct addrinfo *ai_next;
  202. } ADDRINFOA,*PADDRINFOA;
  203.  
  204. typedef struct addrinfoW {
  205.   int ai_flags;
  206.   int ai_family;
  207.   int ai_socktype;
  208.   int ai_protocol;
  209.   size_t ai_addrlen;
  210.   PWSTR ai_canonname;
  211.   struct sockaddr *ai_addr;
  212.   struct addrinfoW *ai_next;
  213. } ADDRINFOW,*PADDRINFOW;
  214.  
  215. typedef __MINGW_NAME_AW(ADDRINFO) ADDRINFOT,*PADDRINFOT;
  216.  
  217. typedef ADDRINFOA ADDRINFO,*LPADDRINFO;
  218.  
  219. #define AI_PASSIVE 0x1
  220. #define AI_CANONNAME 0x2
  221. #define AI_NUMERICHOST 0x4
  222. #if (_WIN32_WINNT >= 0x0600)
  223. #define AI_ADDRCONFIG             0x0400
  224. #define AI_NON_AUTHORITATIVE      0x04000
  225. #define AI_SECURE                 0x08000
  226. #define AI_RETURN_PREFERRED_NAMES 0x010000
  227. #endif
  228.  
  229. #ifdef __cplusplus
  230. extern "C" {
  231. #endif
  232.  
  233. #define GetAddrInfo __MINGW_NAME_AW(GetAddrInfo)
  234.  
  235.   WINSOCK_API_LINKAGE int WSAAPI getaddrinfo(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res);
  236.   WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoW(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult);
  237.  
  238. #define GetAddrInfoA getaddrinfo
  239.  
  240. #if INCL_WINSOCK_API_TYPEDEFS
  241.   typedef int (WSAAPI *LPFN_GETADDRINFO)(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res);
  242.   typedef int (WSAAPI *LPFN_GETADDRINFOW)(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult);
  243.  
  244. #define LPFN_GETADDRINFOA LPFN_GETADDRINFO
  245.  
  246. #define LPFN_GETADDRINFOT __MINGW_NAME_AW(LPFN_GETADDRINFO)
  247. #endif
  248.  
  249. #define FreeAddrInfo __MINGW_NAME_AW(FreeAddrInfo)
  250.  
  251.   WINSOCK_API_LINKAGE void WSAAPI freeaddrinfo(LPADDRINFO pAddrInfo);
  252.   WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo);
  253.  
  254. #define FreeAddrInfoA freeaddrinfo
  255.  
  256. #if INCL_WINSOCK_API_TYPEDEFS
  257.   typedef void (WSAAPI *LPFN_FREEADDRINFO)(struct addrinfo *ai);
  258.   typedef void (WSAAPI *LPFN_FREEADDRINFOW)(PADDRINFOW pAddrInfo);
  259.  
  260. #define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO
  261.  
  262. #define LPFN_FREEADDRINFOT __MINGW_NAME_AW(LPFN_FREEADDRINFO)
  263. #endif
  264.  
  265.   typedef int socklen_t;
  266.  
  267. #define GetNameInfo __MINGW_NAME_AW(GetNameInfo)
  268.  
  269.   WINSOCK_API_LINKAGE int WSAAPI getnameinfo(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags);
  270.   WINSOCK_API_LINKAGE INT WSAAPI GetNameInfoW(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags);
  271.  
  272. #define GetNameInfoA getnameinfo
  273.  
  274. #if INCL_WINSOCK_API_TYPEDEFS
  275.   typedef int (WSAAPI *LPFN_GETNAMEINFO)(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags);
  276.   typedef INT (WSAAPI *LPFN_GETNAMEINFOW)(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags);
  277.  
  278. #define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO
  279.  
  280. #define LPFN_GETNAMEINFOT __MINGW_NAME_AW(LPFN_GETNAMEINFO)
  281. #endif
  282.  
  283. #define gai_strerror __MINGW_NAME_AW(gai_strerror)
  284.  
  285. #define GAI_STRERROR_BUFFER_SIZE 1024
  286.  
  287. char *gai_strerrorA (int);
  288. WCHAR *gai_strerrorW(int);
  289.  
  290. #define NI_MAXHOST 1025
  291. #define NI_MAXSERV 32
  292.  
  293. #define INET_ADDRSTRLEN 22
  294. #define INET6_ADDRSTRLEN 65
  295.  
  296. #define NI_NOFQDN 0x01
  297. #define NI_NUMERICHOST 0x02
  298. #define NI_NAMEREQD 0x04
  299. #define NI_NUMERICSERV 0x08
  300. #define NI_DGRAM 0x10
  301.  
  302. #include <mstcpip.h>
  303.  
  304. #if (_WIN32_WINNT >= 0x0600)
  305. #define addrinfoEx __MINGW_NAME_AW(addrinfoEx)
  306. #define PADDRINFOEX __MINGW_NAME_AW(PADDRINFOEX)
  307. #define GetAddrInfoEx __MINGW_NAME_AW(GetAddrInfoEx)
  308. #define SetAddrInfoEx __MINGW_NAME_AW(SetAddrInfoEx)
  309. #define FreeAddrInfoEx __MINGW_NAME_AW(FreeAddrInfoEx)
  310.  
  311.   typedef struct addrinfoExA {
  312.     int                ai_flags;
  313.     int                ai_family;
  314.     int                ai_socktype;
  315.     int                ai_protocol;
  316.     size_t             ai_addrlen;
  317.     LPCSTR             ai_canonname;
  318.     struct sockaddr    *ai_addr;
  319.     void               *ai_blob;
  320.     size_t             ai_bloblen;
  321.     LPGUID             ai_provider;
  322.     struct addrinfoexA *ai_next;
  323.   } ADDRINFOEXA, *PADDRINFOEXA;
  324.  
  325.   typedef struct addrinfoExW {
  326.     int                ai_flags;
  327.     int                ai_family;
  328.     int                ai_socktype;
  329.     int                ai_protocol;
  330.     size_t             ai_addrlen;
  331.     LPCWSTR            ai_canonname;
  332.     struct sockaddr    *ai_addr;
  333.     void               *ai_blob;
  334.     size_t             ai_bloblen;
  335.     LPGUID             ai_provider;
  336.     struct addrinfoexW *ai_next;
  337.   } ADDRINFOEXW, *PADDRINFOEXW;
  338.  
  339. typedef PVOID LPLOOKUPSERVICE_COMPLETION_ROUTINE; /*reserved*/
  340.  
  341. WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExA(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace,
  342.                                               LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult,
  343.                                               struct timeval *timeout,LPOVERLAPPED lpOverlapped,
  344.                                               LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  345.                                               LPHANDLE lpNameHandle);
  346. WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace,
  347.                                               LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult,
  348.                                               struct timeval *timeout,LPOVERLAPPED lpOverlapped,
  349.                                               LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  350.                                               LPHANDLE lpNameHandle);
  351.  
  352. WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExA(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses,
  353.                                               DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
  354.                                               LPGUID lpNspId,struct timeval *timeout,LPOVERLAPPED lpOverlapped,
  355.                                               LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  356.                                               LPHANDLE lpNameHandle);
  357. WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses,
  358.                                               DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
  359.                                               LPGUID lpNspId,struct timeval *timeout,LPOVERLAPPED lpOverlapped,
  360.                                               LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  361.                                               LPHANDLE lpNameHandle);
  362.  
  363. WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExA(PADDRINFOEXA pAddrInfo);
  364. WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExW(PADDRINFOEXW pAddrInfo);
  365.  
  366. #if INCL_WINSOCK_API_TYPEDEFS
  367. #define LPFN_GETADDRINFOEX __MINGW_NAME_AW(LPFN_GETADDRINFOEX)
  368.   typedef int (WSAAPI *LPFN_GETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace,
  369.                                             LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult,
  370.                                             struct timeval *timeout,LPOVERLAPPED lpOverlapped,
  371.                                             LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  372.                                             LPHANDLE lpNameHandle);
  373.   typedef int (WSAAPI *LPFN_GETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace,
  374.                                             LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult,
  375.                                             struct timeval *timeout,LPOVERLAPPED lpOverlapped,
  376.                                             LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  377.                                             LPHANDLE lpNameHandle);
  378.  
  379. #define LPFN_SETADDRINFOEX __MINGW_NAME_AW(LPFN_SETADDRINFOEX)
  380.   typedef int (WSAAPI *LPFN_SETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses,
  381.                                             DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
  382.                                             LPGUID lpNspId,struct timeval *timeout,LPOVERLAPPED lpOverlapped,
  383.                                             LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  384.                                             LPHANDLE lpNameHandle);
  385.   typedef int (WSAAPI *LPFN_SETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses,
  386.                                             DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
  387.                                             LPGUID lpNspId,struct timeval *timeout,LPOVERLAPPED lpOverlapped,
  388.                                             LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  389.                                             LPHANDLE lpNameHandle);
  390.  
  391. #define LPFN_FREEADDRINFOEX __MINGW_NAME_AW(LPFN_FREEADDRINFOEX)
  392.   typedef void (WSAAPI *LPFN_FREEADDRINFOEXA)(PADDRINFOEXA pAddrInfo);
  393.   typedef void (WSAAPI *LPFN_FREEADDRINFOEXW)(PADDRINFOEXW pAddrInfo);
  394. #endif /* INCL_WINSOCK_API_TYPEDEFS */
  395.  
  396.  
  397. WINSOCK_API_LINKAGE int WSAAPI WSAImpersonateSocketPeer(
  398.   SOCKET Socket,
  399.   const struct sockaddr *PeerAddress,
  400.   ULONG peerAddressLen
  401. );
  402.  
  403. WINSOCK_API_LINKAGE int WSAAPI WSAQuerySocketSecurity(
  404.   SOCKET Socket,
  405.   const SOCKET_SECURITY_QUERY_TEMPLATE *SecurityQueryTemplate,
  406.   ULONG SecurityQueryTemplateLen,
  407.   SOCKET_SECURITY_QUERY_INFO *SecurityQueryInfo,
  408.   ULONG *SecurityQueryInfoLen,
  409.   LPWSAOVERLAPPED Overlapped,
  410.   LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
  411. );
  412.  
  413. WINSOCK_API_LINKAGE int WSAAPI WSARevertImpersonation(void);
  414.  
  415. WINSOCK_API_LINKAGE int WSAAPI WSASetSocketPeerTargetName(
  416.   SOCKET Socket,
  417.   const SOCKET_PEER_TARGET_NAME *PeerTargetName,
  418.   ULONG PeerTargetNameLen,
  419.   LPWSAOVERLAPPED Overlapped,
  420.   LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
  421. );
  422.  
  423. WINSOCK_API_LINKAGE int WSAAPI WSASetSocketSecurity(
  424.   SOCKET Socket,
  425.   const SOCKET_SECURITY_SETTINGS *SecuritySettings,
  426.   ULONG SecuritySettingsLen,
  427.   LPWSAOVERLAPPED Overlapped,
  428.   LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
  429. );
  430.  
  431. #endif /*(_WIN32_WINNT >= 0x0600)*/
  432.  
  433. #ifdef __cplusplus
  434. }
  435. #endif
  436.  
  437. #endif /* _WS2TCPIP_H_ */
  438.