· 6 years ago · Sep 27, 2019, 09:28 AM
1
2
3/* Winsock2.h -- definitions to be used with the WinSock 2 DLL and
4 * WinSock 2 applications.
5 *
6 * This header file corresponds to version 2.2.x of the WinSock API
7 * specification.
8 *
9 * This file includes parts which are Copyright (c) 1982-1986 Regents
10 * of the University of California. All rights reserved. The
11 * Berkeley Software License Agreement specifies the terms and
12 * conditions for redistribution.
13 */
14
15#ifndef _WINSOCK2API_
16#define _WINSOCK2API_
17#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */
18
19#pragma once
20#include <winapifamily.h>
21
22#if !defined(_WINSOCK_DEPRECATED_BY)
23#if ((defined(_WINSOCK_DEPRECATED_NO_WARNINGS) || defined(BUILD_WINDOWS)) && !defined(_WINSOCK_DEPRECATE_WARNINGS)) || defined(MIDL_PASS)
24#define _WINSOCK_DEPRECATED_BY(replacement)
25#else
26#define _WINSOCK_DEPRECATED_BY(replacement) __declspec(deprecated("Use " replacement " instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings"))
27#endif
28#endif
29#if !defined(_WINSOCK_DEPRECATED)
30#if ((defined(_WINSOCK_DEPRECATED_NO_WARNINGS) || defined(BUILD_WINDOWS)) && !defined(_WINSOCK_DEPRECATE_WARNINGS)) || defined(MIDL_PASS)
31#define _WINSOCK_DEPRECATED
32#else
33#define _WINSOCK_DEPRECATED __declspec(deprecated("Define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings"))
34#endif
35#endif
36
37/*
38 * Default: include function prototypes, don't include function typedefs.
39 */
40
41#ifndef INCL_WINSOCK_API_PROTOTYPES
42#define INCL_WINSOCK_API_PROTOTYPES 1
43#endif
44
45#ifndef INCL_WINSOCK_API_TYPEDEFS
46#define INCL_WINSOCK_API_TYPEDEFS 0
47#endif
48
49/*
50 * Pull in WINDOWS.H if necessary
51 */
52#ifndef _INC_WINDOWS
53#include <windows.h>
54#endif /* _INC_WINDOWS */
55
56/*
57 * Ensure structures are packed consistently.
58 * Not necessary for WIN32, it is already packed >=4 and there are
59 * no structures in this header that have alignment requirement
60 * higher than 4.
61 * For WIN64 we do not have compatibility requirement because it is
62 * not possible to mix 32/16 bit code with 64 bit code in the same
63 * process.
64 */
65
66#if (!defined(_WIN64) && !defined(WIN32))
67#include <pshpack4.h>
68/* WIN32 can be defined between here and the required poppack
69 so define this special macro to ensure poppack */
70#define _NEED_POPPACK
71#endif
72
73/*
74 * Define the current Winsock version. To build an earlier Winsock version
75 * application redefine this value prior to including Winsock2.h.
76 */
77
78#if !defined(MAKEWORD)
79#define MAKEWORD(low,high) \
80 ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8))
81#endif
82
83#ifndef WINSOCK_VERSION
84#define WINSOCK_VERSION MAKEWORD(2,2)
85#endif
86
87/*
88 * Establish DLL function linkage if supported by the current build
89 * environment and not previously defined.
90 */
91
92#ifndef WINSOCK_API_LINKAGE
93#ifdef DECLSPEC_IMPORT
94#define WINSOCK_API_LINKAGE DECLSPEC_IMPORT
95#else
96#define WINSOCK_API_LINKAGE
97#endif
98#endif
99
100#ifdef __cplusplus
101extern "C" {
102#endif
103
104/*
105 * Basic system type definitions, taken from the BSD file sys/types.h.
106 */
107typedef unsigned char u_char;
108typedef unsigned short u_short;
109typedef unsigned int u_int;
110typedef unsigned long u_long;
111
112#if(_WIN32_WINNT >= 0x0501)
113typedef unsigned __int64 u_int64;
114#endif //(_WIN32_WINNT >= 0x0501)
115
116#include <ws2def.h>
117
118/*
119 * The new type to be used in all
120 * instances which refer to sockets.
121 */
122typedef UINT_PTR SOCKET;
123
124/*
125 * Select uses arrays of SOCKETs. These macros manipulate such
126 * arrays. FD_SETSIZE may be defined by the user before including
127 * this file, but the default here should be >= 64.
128 *
129 * CAVEAT IMPLEMENTOR and USER: THESE MACROS AND TYPES MUST BE
130 * INCLUDED IN WINSOCK2.H EXACTLY AS SHOWN HERE.
131 */
132#ifndef FD_SETSIZE
133#define FD_SETSIZE 64
134#endif /* FD_SETSIZE */
135
136typedef struct fd_set {
137 u_int fd_count; /* how many are SET? */
138 SOCKET fd_array[FD_SETSIZE]; /* an array of SOCKETs */
139} fd_set;
140
141extern int PASCAL FAR __WSAFDIsSet(SOCKET fd, fd_set FAR *);
142
143#define FD_CLR(fd, set) do { \
144 u_int __i; \
145 for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { \
146 if (((fd_set FAR *)(set))->fd_array[__i] == fd) { \
147 while (__i < ((fd_set FAR *)(set))->fd_count-1) { \
148 ((fd_set FAR *)(set))->fd_array[__i] = \
149 ((fd_set FAR *)(set))->fd_array[__i+1]; \
150 __i++; \
151 } \
152 ((fd_set FAR *)(set))->fd_count--; \
153 break; \
154 } \
155 } \
156} while(0, 0)
157
158#define FD_SET(fd, set) do { \
159 u_int __i; \
160 for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
161 if (((fd_set FAR *)(set))->fd_array[__i] == (fd)) { \
162 break; \
163 } \
164 } \
165 if (__i == ((fd_set FAR *)(set))->fd_count) { \
166 if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) { \
167 ((fd_set FAR *)(set))->fd_array[__i] = (fd); \
168 ((fd_set FAR *)(set))->fd_count++; \
169 } \
170 } \
171} while(0, 0)
172
173#define FD_ZERO(set) (((fd_set FAR *)(set))->fd_count=0)
174
175#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set FAR *)(set))
176
177/*
178 * Structure used in select() call, taken from the BSD file sys/time.h.
179 */
180struct timeval {
181 long tv_sec; /* seconds */
182 long tv_usec; /* and microseconds */
183};
184
185/*
186 * Operations on timevals.
187 *
188 * NB: timercmp does not work for >= or <=.
189 */
190#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
191#define timercmp(tvp, uvp, cmp) \
192 ((tvp)->tv_sec cmp (uvp)->tv_sec || \
193 (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
194#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
195
196/*
197 * Commands for ioctlsocket(), taken from the BSD file fcntl.h.
198 *
199 *
200 * Ioctl's have the command encoded in the lower word,
201 * and the size of any in or out parameters in the upper
202 * word. The high 2 bits of the upper word are used
203 * to encode the in/out status of the parameter; for now
204 * we restrict parameters to at most 128 bytes.
205 */
206#define IOCPARM_MASK 0x7f /* parameters must be < 128 bytes */
207#define IOC_VOID 0x20000000 /* no parameters */
208#define IOC_OUT 0x40000000 /* copy out parameters */
209#define IOC_IN 0x80000000 /* copy in parameters */
210#define IOC_INOUT (IOC_IN|IOC_OUT)
211 /* 0x20000000 distinguishes new &
212 old ioctl's */
213#define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
214
215#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
216
217#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
218
219#define FIONREAD _IOR('f', 127, u_long) /* get # bytes to read */
220#define FIONBIO _IOW('f', 126, u_long) /* set/clear non-blocking i/o */
221#define FIOASYNC _IOW('f', 125, u_long) /* set/clear async i/o */
222
223/* Socket I/O Controls */
224#define SIOCSHIWAT _IOW('s', 0, u_long) /* set high watermark */
225#define SIOCGHIWAT _IOR('s', 1, u_long) /* get high watermark */
226#define SIOCSLOWAT _IOW('s', 2, u_long) /* set low watermark */
227#define SIOCGLOWAT _IOR('s', 3, u_long) /* get low watermark */
228#define SIOCATMARK _IOR('s', 7, u_long) /* at oob mark? */
229
230/*
231 * Structures returned by network data base library, taken from the
232 * BSD file netdb.h. All addresses are supplied in host order, and
233 * returned in network order (suitable for use in system calls).
234 */
235
236struct hostent {
237 char FAR * h_name; /* official name of host */
238 char FAR * FAR * h_aliases; /* alias list */
239 short h_addrtype; /* host address type */
240 short h_length; /* length of address */
241 char FAR * FAR * h_addr_list; /* list of addresses */
242#define h_addr h_addr_list[0] /* address, for backward compat */
243};
244
245/*
246 * It is assumed here that a network number
247 * fits in 32 bits.
248 */
249struct netent {
250 char FAR * n_name; /* official name of net */
251 char FAR * FAR * n_aliases; /* alias list */
252 short n_addrtype; /* net address type */
253 u_long n_net; /* network # */
254};
255
256struct servent {
257 char FAR * s_name; /* official service name */
258 char FAR * FAR * s_aliases; /* alias list */
259#ifdef _WIN64
260 char FAR * s_proto; /* protocol to use */
261 short s_port; /* port # */
262#else
263 short s_port; /* port # */
264 char FAR * s_proto; /* protocol to use */
265#endif
266};
267
268struct protoent {
269 char FAR * p_name; /* official protocol name */
270 char FAR * FAR * p_aliases; /* alias list */
271 short p_proto; /* protocol # */
272};
273
274/*
275 * Constants and structures defined by the internet system,
276 * Per RFC 790, September 1981, taken from the BSD file netinet/in.h.
277 * IPv6 additions per RFC 2292.
278 */
279
280/*
281 * Port/socket numbers: network standard functions
282 */
283#define IPPORT_ECHO 7
284#define IPPORT_DISCARD 9
285#define IPPORT_SYSTAT 11
286#define IPPORT_DAYTIME 13
287#define IPPORT_NETSTAT 15
288#define IPPORT_FTP 21
289#define IPPORT_TELNET 23
290#define IPPORT_SMTP 25
291#define IPPORT_TIMESERVER 37
292#define IPPORT_NAMESERVER 42
293#define IPPORT_WHOIS 43
294#define IPPORT_MTP 57
295
296/*
297 * Port/socket numbers: host specific functions
298 */
299#define IPPORT_TFTP 69
300#define IPPORT_RJE 77
301#define IPPORT_FINGER 79
302#define IPPORT_TTYLINK 87
303#define IPPORT_SUPDUP 95
304
305/*
306 * UNIX TCP sockets
307 */
308#define IPPORT_EXECSERVER 512
309#define IPPORT_LOGINSERVER 513
310#define IPPORT_CMDSERVER 514
311#define IPPORT_EFSSERVER 520
312
313/*
314 * UNIX UDP sockets
315 */
316#define IPPORT_BIFFUDP 512
317#define IPPORT_WHOSERVER 513
318#define IPPORT_ROUTESERVER 520
319 /* 520+1 also used */
320
321/*
322 * Ports < IPPORT_RESERVED are reserved for
323 * privileged processes (e.g. root).
324 */
325#define IPPORT_RESERVED 1024
326
327/*
328 * Link numbers
329 */
330#define IMPLINK_IP 155
331#define IMPLINK_LOWEXPER 156
332#define IMPLINK_HIGHEXPER 158
333
334#ifndef s_addr
335/*
336 * Internet address (old style... should be updated)
337 */
338struct in_addr {
339 union {
340 struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
341 struct { u_short s_w1,s_w2; } S_un_w;
342 u_long S_addr;
343 } S_un;
344#define s_addr S_un.S_addr
345 /* can be used for most tcp & ip code */
346#define s_host S_un.S_un_b.s_b2
347 /* host on imp */
348#define s_net S_un.S_un_b.s_b1
349 /* network */
350#define s_imp S_un.S_un_w.s_w2
351 /* imp */
352#define s_impno S_un.S_un_b.s_b4
353 /* imp # */
354#define s_lh S_un.S_un_b.s_b3
355 /* logical host */
356};
357#endif
358
359#define ADDR_ANY INADDR_ANY
360
361#define WSADESCRIPTION_LEN 256
362#define WSASYS_STATUS_LEN 128
363
364typedef struct WSAData {
365 WORD wVersion;
366 WORD wHighVersion;
367#ifdef _WIN64
368 unsigned short iMaxSockets;
369 unsigned short iMaxUdpDg;
370 char FAR * lpVendorInfo;
371 char szDescription[WSADESCRIPTION_LEN+1];
372 char szSystemStatus[WSASYS_STATUS_LEN+1];
373#else
374 char szDescription[WSADESCRIPTION_LEN+1];
375 char szSystemStatus[WSASYS_STATUS_LEN+1];
376 unsigned short iMaxSockets;
377 unsigned short iMaxUdpDg;
378 char FAR * lpVendorInfo;
379#endif
380} WSADATA, FAR * LPWSADATA;
381
382/*
383 * Definitions related to sockets: types, address families, options,
384 * taken from the BSD file sys/socket.h.
385 */
386
387/*
388 * This is used instead of -1, since the
389 * SOCKET type is unsigned.
390 */
391#define INVALID_SOCKET (SOCKET)(~0)
392#define SOCKET_ERROR (-1)
393
394/*
395 * The following may be used in place of the address family, socket type, or
396 * protocol in a call to WSASocket to indicate that the corresponding value
397 * should be taken from the supplied WSAPROTOCOL_INFO structure instead of the
398 * parameter itself.
399 */
400#define FROM_PROTOCOL_INFO (-1)
401
402/*
403 * Types
404 */
405#define SOCK_STREAM 1 /* stream socket */
406#define SOCK_DGRAM 2 /* datagram socket */
407#define SOCK_RAW 3 /* raw-protocol interface */
408#define SOCK_RDM 4 /* reliably-delivered message */
409#define SOCK_SEQPACKET 5 /* sequenced packet stream */
410
411/*
412 * Option flags per-socket.
413 */
414#define SO_DEBUG 0x0001 /* turn on debugging info recording */
415#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
416#define SO_REUSEADDR 0x0004 /* allow local address reuse */
417#define SO_KEEPALIVE 0x0008 /* keep connections alive */
418#define SO_DONTROUTE 0x0010 /* just use interface addresses */
419#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
420#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
421#define SO_LINGER 0x0080 /* linger on close if data present */
422#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
423
424#define SO_DONTLINGER (int)(~SO_LINGER)
425#define SO_EXCLUSIVEADDRUSE ((int)(~SO_REUSEADDR)) /* disallow local address reuse */
426
427/*
428 * Additional options.
429 */
430#define SO_SNDBUF 0x1001 /* send buffer size */
431#define SO_RCVBUF 0x1002 /* receive buffer size */
432#define SO_SNDLOWAT 0x1003 /* send low-water mark */
433#define SO_RCVLOWAT 0x1004 /* receive low-water mark */
434#define SO_SNDTIMEO 0x1005 /* send timeout */
435#define SO_RCVTIMEO 0x1006 /* receive timeout */
436#define SO_ERROR 0x1007 /* get error status and clear */
437#define SO_TYPE 0x1008 /* get socket type */
438
439/*
440 * WinSock 2 extension -- new options
441 */
442#define SO_GROUP_ID 0x2001 /* ID of a socket group */
443#define SO_GROUP_PRIORITY 0x2002 /* the relative priority within a group*/
444#define SO_MAX_MSG_SIZE 0x2003 /* maximum message size */
445#define SO_PROTOCOL_INFOA 0x2004 /* WSAPROTOCOL_INFOA structure */
446#define SO_PROTOCOL_INFOW 0x2005 /* WSAPROTOCOL_INFOW structure */
447#ifdef UNICODE
448#define SO_PROTOCOL_INFO SO_PROTOCOL_INFOW
449#else
450#define SO_PROTOCOL_INFO SO_PROTOCOL_INFOA
451#endif /* UNICODE */
452#define PVD_CONFIG 0x3001 /* configuration info for service provider */
453#define SO_CONDITIONAL_ACCEPT 0x3002 /* enable true conditional accept: */
454 /* connection is not ack-ed to the */
455 /* other side until conditional */
456 /* function returns CF_ACCEPT */
457
458/*
459 * Structure used by kernel to pass protocol
460 * information in raw sockets.
461 */
462struct sockproto {
463 u_short sp_family; /* address family */
464 u_short sp_protocol; /* protocol */
465};
466
467/*
468 * Protocol families, same as address families for now.
469 */
470#define PF_UNSPEC AF_UNSPEC
471#define PF_UNIX AF_UNIX
472#define PF_INET AF_INET
473#define PF_IMPLINK AF_IMPLINK
474#define PF_PUP AF_PUP
475#define PF_CHAOS AF_CHAOS
476#define PF_NS AF_NS
477#define PF_IPX AF_IPX
478#define PF_ISO AF_ISO
479#define PF_OSI AF_OSI
480#define PF_ECMA AF_ECMA
481#define PF_DATAKIT AF_DATAKIT
482#define PF_CCITT AF_CCITT
483#define PF_SNA AF_SNA
484#define PF_DECnet AF_DECnet
485#define PF_DLI AF_DLI
486#define PF_LAT AF_LAT
487#define PF_HYLINK AF_HYLINK
488#define PF_APPLETALK AF_APPLETALK
489#define PF_VOICEVIEW AF_VOICEVIEW
490#define PF_FIREFOX AF_FIREFOX
491#define PF_UNKNOWN1 AF_UNKNOWN1
492#define PF_BAN AF_BAN
493#define PF_ATM AF_ATM
494#define PF_INET6 AF_INET6
495#if(_WIN32_WINNT >= 0x0600)
496#define PF_BTH AF_BTH
497#endif //(_WIN32_WINNT >= 0x0600)
498
499#define PF_MAX AF_MAX
500
501/*
502 * Structure used for manipulating linger option.
503 */
504struct linger {
505 u_short l_onoff; /* option on/off */
506 u_short l_linger; /* linger time */
507};
508
509/*
510 * Level number for (get/set)sockopt() to apply to socket itself.
511 */
512#define SOL_SOCKET 0xffff /* options for socket level */
513
514/*
515 * Maximum queue length specifiable by listen.
516 */
517#define SOMAXCONN 0x7fffffff
518#define SOMAXCONN_HINT(b) (-(b))
519
520#define MSG_OOB 0x1 /* process out-of-band data */
521#define MSG_PEEK 0x2 /* peek at incoming message */
522#define MSG_DONTROUTE 0x4 /* send without using routing tables */
523
524#if(_WIN32_WINNT >= 0x0502)
525#define MSG_WAITALL 0x8 /* do not complete until packet is completely filled */
526#endif //(_WIN32_WINNT >= 0x0502)
527
528#if(_WIN32_WINNT >= 0x0603)
529#define MSG_PUSH_IMMEDIATE 0x20 /* Do not delay receive request completion if data is available */
530#endif //(_WIN32_WINNT >= 0x0603)
531
532#define MSG_PARTIAL 0x8000 /* partial send or recv for message xport */
533
534/*
535 * WinSock 2 extension -- new flags for WSASend(), WSASendTo(), WSARecv() and
536 * WSARecvFrom()
537 */
538#define MSG_INTERRUPT 0x10 /* send/recv in the interrupt context */
539
540#define MSG_MAXIOVLEN 16
541
542
543/*
544 * Define constant based on rfc883, used by gethostbyxxxx() calls.
545 */
546#define MAXGETHOSTSTRUCT 1024
547
548/*
549 * WinSock 2 extension -- bit values and indices for FD_XXX network events
550 */
551#define FD_READ_BIT 0
552#define FD_READ (1 << FD_READ_BIT)
553
554#define FD_WRITE_BIT 1
555#define FD_WRITE (1 << FD_WRITE_BIT)
556
557#define FD_OOB_BIT 2
558#define FD_OOB (1 << FD_OOB_BIT)
559
560#define FD_ACCEPT_BIT 3
561#define FD_ACCEPT (1 << FD_ACCEPT_BIT)
562
563#define FD_CONNECT_BIT 4
564#define FD_CONNECT (1 << FD_CONNECT_BIT)
565
566#define FD_CLOSE_BIT 5
567#define FD_CLOSE (1 << FD_CLOSE_BIT)
568
569#define FD_QOS_BIT 6
570#define FD_QOS (1 << FD_QOS_BIT)
571
572#define FD_GROUP_QOS_BIT 7
573#define FD_GROUP_QOS (1 << FD_GROUP_QOS_BIT)
574
575#define FD_ROUTING_INTERFACE_CHANGE_BIT 8
576#define FD_ROUTING_INTERFACE_CHANGE (1 << FD_ROUTING_INTERFACE_CHANGE_BIT)
577
578#define FD_ADDRESS_LIST_CHANGE_BIT 9
579#define FD_ADDRESS_LIST_CHANGE (1 << FD_ADDRESS_LIST_CHANGE_BIT)
580
581#define FD_MAX_EVENTS 10
582#define FD_ALL_EVENTS ((1 << FD_MAX_EVENTS) - 1)
583
584
585/*
586 * WinSock error codes are also defined in winerror.h
587 * Hence the IFDEF.
588 */
589#ifndef WSABASEERR
590
591/*
592 * All Windows Sockets error constants are biased by WSABASEERR from
593 * the "normal"
594 */
595#define WSABASEERR 10000
596
597/*
598 * Windows Sockets definitions of regular Microsoft C error constants
599 */
600#define WSAEINTR (WSABASEERR+4)
601#define WSAEBADF (WSABASEERR+9)
602#define WSAEACCES (WSABASEERR+13)
603#define WSAEFAULT (WSABASEERR+14)
604#define WSAEINVAL (WSABASEERR+22)
605#define WSAEMFILE (WSABASEERR+24)
606
607/*
608 * Windows Sockets definitions of regular Berkeley error constants
609 */
610#define WSAEWOULDBLOCK (WSABASEERR+35)
611#define WSAEINPROGRESS (WSABASEERR+36)
612#define WSAEALREADY (WSABASEERR+37)
613#define WSAENOTSOCK (WSABASEERR+38)
614#define WSAEDESTADDRREQ (WSABASEERR+39)
615#define WSAEMSGSIZE (WSABASEERR+40)
616#define WSAEPROTOTYPE (WSABASEERR+41)
617#define WSAENOPROTOOPT (WSABASEERR+42)
618#define WSAEPROTONOSUPPORT (WSABASEERR+43)
619#define WSAESOCKTNOSUPPORT (WSABASEERR+44)
620#define WSAEOPNOTSUPP (WSABASEERR+45)
621#define WSAEPFNOSUPPORT (WSABASEERR+46)
622#define WSAEAFNOSUPPORT (WSABASEERR+47)
623#define WSAEADDRINUSE (WSABASEERR+48)
624#define WSAEADDRNOTAVAIL (WSABASEERR+49)
625#define WSAENETDOWN (WSABASEERR+50)
626#define WSAENETUNREACH (WSABASEERR+51)
627#define WSAENETRESET (WSABASEERR+52)
628#define WSAECONNABORTED (WSABASEERR+53)
629#define WSAECONNRESET (WSABASEERR+54)
630#define WSAENOBUFS (WSABASEERR+55)
631#define WSAEISCONN (WSABASEERR+56)
632#define WSAENOTCONN (WSABASEERR+57)
633#define WSAESHUTDOWN (WSABASEERR+58)
634#define WSAETOOMANYREFS (WSABASEERR+59)
635#define WSAETIMEDOUT (WSABASEERR+60)
636#define WSAECONNREFUSED (WSABASEERR+61)
637#define WSAELOOP (WSABASEERR+62)
638#define WSAENAMETOOLONG (WSABASEERR+63)
639#define WSAEHOSTDOWN (WSABASEERR+64)
640#define WSAEHOSTUNREACH (WSABASEERR+65)
641#define WSAENOTEMPTY (WSABASEERR+66)
642#define WSAEPROCLIM (WSABASEERR+67)
643#define WSAEUSERS (WSABASEERR+68)
644#define WSAEDQUOT (WSABASEERR+69)
645#define WSAESTALE (WSABASEERR+70)
646#define WSAEREMOTE (WSABASEERR+71)
647
648/*
649 * Extended Windows Sockets error constant definitions
650 */
651#define WSASYSNOTREADY (WSABASEERR+91)
652#define WSAVERNOTSUPPORTED (WSABASEERR+92)
653#define WSANOTINITIALISED (WSABASEERR+93)
654#define WSAEDISCON (WSABASEERR+101)
655#define WSAENOMORE (WSABASEERR+102)
656#define WSAECANCELLED (WSABASEERR+103)
657#define WSAEINVALIDPROCTABLE (WSABASEERR+104)
658#define WSAEINVALIDPROVIDER (WSABASEERR+105)
659#define WSAEPROVIDERFAILEDINIT (WSABASEERR+106)
660#define WSASYSCALLFAILURE (WSABASEERR+107)
661#define WSASERVICE_NOT_FOUND (WSABASEERR+108)
662#define WSATYPE_NOT_FOUND (WSABASEERR+109)
663#define WSA_E_NO_MORE (WSABASEERR+110)
664#define WSA_E_CANCELLED (WSABASEERR+111)
665#define WSAEREFUSED (WSABASEERR+112)
666
667/*
668 * Error return codes from gethostbyname() and gethostbyaddr()
669 * (when using the resolver). Note that these errors are
670 * retrieved via WSAGetLastError() and must therefore follow
671 * the rules for avoiding clashes with error numbers from
672 * specific implementations or language run-time systems.
673 * For this reason the codes are based at WSABASEERR+1001.
674 * Note also that [WSA]NO_ADDRESS is defined only for
675 * compatibility purposes.
676 */
677
678/* Authoritative Answer: Host not found */
679#define WSAHOST_NOT_FOUND (WSABASEERR+1001)
680
681/* Non-Authoritative: Host not found, or SERVERFAIL */
682#define WSATRY_AGAIN (WSABASEERR+1002)
683
684/* Non-recoverable errors, FORMERR, REFUSED, NOTIMP */
685#define WSANO_RECOVERY (WSABASEERR+1003)
686
687/* Valid name, no data record of requested type */
688#define WSANO_DATA (WSABASEERR+1004)
689
690/*
691 * Define QOS related error return codes
692 *
693 */
694#define WSA_QOS_RECEIVERS (WSABASEERR + 1005)
695 /* at least one Reserve has arrived */
696#define WSA_QOS_SENDERS (WSABASEERR + 1006)
697 /* at least one Path has arrived */
698#define WSA_QOS_NO_SENDERS (WSABASEERR + 1007)
699 /* there are no senders */
700#define WSA_QOS_NO_RECEIVERS (WSABASEERR + 1008)
701 /* there are no receivers */
702#define WSA_QOS_REQUEST_CONFIRMED (WSABASEERR + 1009)
703 /* Reserve has been confirmed */
704#define WSA_QOS_ADMISSION_FAILURE (WSABASEERR + 1010)
705 /* error due to lack of resources */
706#define WSA_QOS_POLICY_FAILURE (WSABASEERR + 1011)
707 /* rejected for administrative reasons - bad credentials */
708#define WSA_QOS_BAD_STYLE (WSABASEERR + 1012)
709 /* unknown or conflicting style */
710#define WSA_QOS_BAD_OBJECT (WSABASEERR + 1013)
711 /* problem with some part of the filterspec or providerspecific
712 * buffer in general */
713#define WSA_QOS_TRAFFIC_CTRL_ERROR (WSABASEERR + 1014)
714 /* problem with some part of the flowspec */
715#define WSA_QOS_GENERIC_ERROR (WSABASEERR + 1015)
716 /* general error */
717#define WSA_QOS_ESERVICETYPE (WSABASEERR + 1016)
718 /* invalid service type in flowspec */
719#define WSA_QOS_EFLOWSPEC (WSABASEERR + 1017)
720 /* invalid flowspec */
721#define WSA_QOS_EPROVSPECBUF (WSABASEERR + 1018)
722 /* invalid provider specific buffer */
723#define WSA_QOS_EFILTERSTYLE (WSABASEERR + 1019)
724 /* invalid filter style */
725#define WSA_QOS_EFILTERTYPE (WSABASEERR + 1020)
726 /* invalid filter type */
727#define WSA_QOS_EFILTERCOUNT (WSABASEERR + 1021)
728 /* incorrect number of filters */
729#define WSA_QOS_EOBJLENGTH (WSABASEERR + 1022)
730 /* invalid object length */
731#define WSA_QOS_EFLOWCOUNT (WSABASEERR + 1023)
732 /* incorrect number of flows */
733#define WSA_QOS_EUNKOWNPSOBJ (WSABASEERR + 1024)
734 /* unknown object in provider specific buffer */
735#define WSA_QOS_EPOLICYOBJ (WSABASEERR + 1025)
736 /* invalid policy object in provider specific buffer */
737#define WSA_QOS_EFLOWDESC (WSABASEERR + 1026)
738 /* invalid flow descriptor in the list */
739#define WSA_QOS_EPSFLOWSPEC (WSABASEERR + 1027)
740 /* inconsistent flow spec in provider specific buffer */
741#define WSA_QOS_EPSFILTERSPEC (WSABASEERR + 1028)
742 /* invalid filter spec in provider specific buffer */
743#define WSA_QOS_ESDMODEOBJ (WSABASEERR + 1029)
744 /* invalid shape discard mode object in provider specific buffer */
745#define WSA_QOS_ESHAPERATEOBJ (WSABASEERR + 1030)
746 /* invalid shaping rate object in provider specific buffer */
747#define WSA_QOS_RESERVED_PETYPE (WSABASEERR + 1031)
748 /* reserved policy element in provider specific buffer */
749
750
751
752/*
753 * WinSock error codes are also defined in winerror.h
754 * Hence the IFDEF.
755 */
756#endif /* ifdef WSABASEERR */
757
758/*
759 * Compatibility macros.
760 */
761
762#define h_errno WSAGetLastError()
763#define HOST_NOT_FOUND WSAHOST_NOT_FOUND
764#define TRY_AGAIN WSATRY_AGAIN
765#define NO_RECOVERY WSANO_RECOVERY
766#define NO_DATA WSANO_DATA
767/* no address, look for MX record */
768#define WSANO_ADDRESS WSANO_DATA
769#define NO_ADDRESS WSANO_ADDRESS
770
771
772
773/*
774 * Windows Sockets errors redefined as regular Berkeley error constants.
775 * These are commented out in Windows NT to avoid conflicts with errno.h.
776 * Use the WSA constants instead.
777 */
778#if 0
779#define EWOULDBLOCK WSAEWOULDBLOCK
780#define EINPROGRESS WSAEINPROGRESS
781#define EALREADY WSAEALREADY
782#define ENOTSOCK WSAENOTSOCK
783#define EDESTADDRREQ WSAEDESTADDRREQ
784#define EMSGSIZE WSAEMSGSIZE
785#define EPROTOTYPE WSAEPROTOTYPE
786#define ENOPROTOOPT WSAENOPROTOOPT
787#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
788#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
789#define EOPNOTSUPP WSAEOPNOTSUPP
790#define EPFNOSUPPORT WSAEPFNOSUPPORT
791#define EAFNOSUPPORT WSAEAFNOSUPPORT
792#define EADDRINUSE WSAEADDRINUSE
793#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
794#define ENETDOWN WSAENETDOWN
795#define ENETUNREACH WSAENETUNREACH
796#define ENETRESET WSAENETRESET
797#define ECONNABORTED WSAECONNABORTED
798#define ECONNRESET WSAECONNRESET
799#define ENOBUFS WSAENOBUFS
800#define EISCONN WSAEISCONN
801#define ENOTCONN WSAENOTCONN
802#define ESHUTDOWN WSAESHUTDOWN
803#define ETOOMANYREFS WSAETOOMANYREFS
804#define ETIMEDOUT WSAETIMEDOUT
805#define ECONNREFUSED WSAECONNREFUSED
806#define ELOOP WSAELOOP
807#define ENAMETOOLONG WSAENAMETOOLONG
808#define EHOSTDOWN WSAEHOSTDOWN
809#define EHOSTUNREACH WSAEHOSTUNREACH
810#define ENOTEMPTY WSAENOTEMPTY
811#define EPROCLIM WSAEPROCLIM
812#define EUSERS WSAEUSERS
813#define EDQUOT WSAEDQUOT
814#define ESTALE WSAESTALE
815#define EREMOTE WSAEREMOTE
816#endif
817
818/*
819 * WinSock 2 extension -- new error codes and type definition
820 */
821
822#ifdef WIN32
823
824#define WSAAPI FAR PASCAL
825#define WSAEVENT HANDLE
826#define LPWSAEVENT LPHANDLE
827#define WSAOVERLAPPED OVERLAPPED
828typedef struct _OVERLAPPED * LPWSAOVERLAPPED;
829
830#define WSA_IO_PENDING (ERROR_IO_PENDING)
831#define WSA_IO_INCOMPLETE (ERROR_IO_INCOMPLETE)
832#define WSA_INVALID_HANDLE (ERROR_INVALID_HANDLE)
833#define WSA_INVALID_PARAMETER (ERROR_INVALID_PARAMETER)
834#define WSA_NOT_ENOUGH_MEMORY (ERROR_NOT_ENOUGH_MEMORY)
835#define WSA_OPERATION_ABORTED (ERROR_OPERATION_ABORTED)
836
837#define WSA_INVALID_EVENT ((WSAEVENT)NULL)
838#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS)
839#define WSA_WAIT_FAILED (WAIT_FAILED)
840#define WSA_WAIT_EVENT_0 (WAIT_OBJECT_0)
841#define WSA_WAIT_IO_COMPLETION (WAIT_IO_COMPLETION)
842#define WSA_WAIT_TIMEOUT (WAIT_TIMEOUT)
843#define WSA_INFINITE (INFINITE)
844
845#else /* WIN16 */
846
847#define WSAAPI FAR PASCAL
848typedef DWORD WSAEVENT, FAR * LPWSAEVENT;
849
850typedef struct _WSAOVERLAPPED {
851 DWORD Internal;
852 DWORD InternalHigh;
853 DWORD Offset;
854 DWORD OffsetHigh;
855 WSAEVENT hEvent;
856} WSAOVERLAPPED, FAR * LPWSAOVERLAPPED;
857
858#define WSA_IO_PENDING (WSAEWOULDBLOCK)
859#define WSA_IO_INCOMPLETE (WSAEWOULDBLOCK)
860#define WSA_INVALID_HANDLE (WSAENOTSOCK)
861#define WSA_INVALID_PARAMETER (WSAEINVAL)
862#define WSA_NOT_ENOUGH_MEMORY (WSAENOBUFS)
863#define WSA_OPERATION_ABORTED (WSAEINTR)
864
865#define WSA_INVALID_EVENT ((WSAEVENT)NULL)
866#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS)
867#define WSA_WAIT_FAILED ((DWORD)-1L)
868#define WSA_WAIT_EVENT_0 ((DWORD)0)
869#define WSA_WAIT_TIMEOUT ((DWORD)0x102L)
870#define WSA_INFINITE ((DWORD)-1L)
871
872#endif /* WIN32 */
873
874#define LPQOS LPVOID
875
876#pragma region Desktop Family
877#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
878#undef LPQOS
879
880/*
881 * Include qos.h to pull in FLOWSPEC and related definitions
882 */
883#include <qos.h>
884
885typedef struct _QualityOfService
886{
887 FLOWSPEC SendingFlowspec; /* the flow spec for data sending */
888 FLOWSPEC ReceivingFlowspec; /* the flow spec for data receiving */
889 WSABUF ProviderSpecific; /* additional provider specific stuff */
890} QOS, FAR * LPQOS;
891#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
892#pragma endregion
893
894/*
895 * WinSock 2 extension -- manifest constants for return values of the condition function
896 */
897#define CF_ACCEPT 0x0000
898#define CF_REJECT 0x0001
899#define CF_DEFER 0x0002
900
901/*
902 * WinSock 2 extension -- manifest constants for shutdown()
903 */
904#define SD_RECEIVE 0x00
905#define SD_SEND 0x01
906#define SD_BOTH 0x02
907
908/*
909 * WinSock 2 extension -- data type and manifest constants for socket groups
910 */
911typedef unsigned int GROUP;
912
913#define SG_UNCONSTRAINED_GROUP 0x01
914#define SG_CONSTRAINED_GROUP 0x02
915
916/*
917 * WinSock 2 extension -- data type for WSAEnumNetworkEvents()
918 */
919typedef struct _WSANETWORKEVENTS {
920 long lNetworkEvents;
921 int iErrorCode[FD_MAX_EVENTS];
922} WSANETWORKEVENTS, FAR * LPWSANETWORKEVENTS;
923
924/*
925 * WinSock 2 extension -- WSAPROTOCOL_INFO structure and associated
926 * manifest constants
927 */
928
929#ifndef GUID_DEFINED
930#include <guiddef.h>
931#endif /* GUID_DEFINED */
932
933#define MAX_PROTOCOL_CHAIN 7
934
935#define BASE_PROTOCOL 1
936#define LAYERED_PROTOCOL 0
937
938typedef struct _WSAPROTOCOLCHAIN {
939 int ChainLen; /* the length of the chain, */
940 /* length = 0 means layered protocol, */
941 /* length = 1 means base protocol, */
942 /* length > 1 means protocol chain */
943 DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; /* a list of dwCatalogEntryIds */
944} WSAPROTOCOLCHAIN, FAR * LPWSAPROTOCOLCHAIN;
945
946#define WSAPROTOCOL_LEN 255
947
948typedef struct _WINSOCK_DEPRECATED_BY("WSAPROTOCOL_INFOW") _WSAPROTOCOL_INFOA {
949 DWORD dwServiceFlags1;
950 DWORD dwServiceFlags2;
951 DWORD dwServiceFlags3;
952 DWORD dwServiceFlags4;
953 DWORD dwProviderFlags;
954 GUID ProviderId;
955 DWORD dwCatalogEntryId;
956 WSAPROTOCOLCHAIN ProtocolChain;
957 int iVersion;
958 int iAddressFamily;
959 int iMaxSockAddr;
960 int iMinSockAddr;
961 int iSocketType;
962 int iProtocol;
963 int iProtocolMaxOffset;
964 int iNetworkByteOrder;
965 int iSecurityScheme;
966 DWORD dwMessageSize;
967 DWORD dwProviderReserved;
968 CHAR szProtocol[WSAPROTOCOL_LEN+1];
969} WSAPROTOCOL_INFOA, FAR * LPWSAPROTOCOL_INFOA;
970
971typedef struct _WSAPROTOCOL_INFOW {
972 DWORD dwServiceFlags1;
973 DWORD dwServiceFlags2;
974 DWORD dwServiceFlags3;
975 DWORD dwServiceFlags4;
976 DWORD dwProviderFlags;
977 GUID ProviderId;
978 DWORD dwCatalogEntryId;
979 WSAPROTOCOLCHAIN ProtocolChain;
980 int iVersion;
981 int iAddressFamily;
982 int iMaxSockAddr;
983 int iMinSockAddr;
984 int iSocketType;
985 int iProtocol;
986 int iProtocolMaxOffset;
987 int iNetworkByteOrder;
988 int iSecurityScheme;
989 DWORD dwMessageSize;
990 DWORD dwProviderReserved;
991 WCHAR szProtocol[WSAPROTOCOL_LEN+1];
992} WSAPROTOCOL_INFOW, FAR * LPWSAPROTOCOL_INFOW;
993#ifdef UNICODE
994typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO;
995typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO;
996#else
997typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO;
998typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO;
999#endif /* UNICODE */
1000
1001/* Flag bit definitions for dwProviderFlags */
1002#define PFL_MULTIPLE_PROTO_ENTRIES 0x00000001
1003#define PFL_RECOMMENDED_PROTO_ENTRY 0x00000002
1004#define PFL_HIDDEN 0x00000004
1005#define PFL_MATCHES_PROTOCOL_ZERO 0x00000008
1006#define PFL_NETWORKDIRECT_PROVIDER 0x00000010
1007
1008/* Flag bit definitions for dwServiceFlags1 */
1009#define XP1_CONNECTIONLESS 0x00000001
1010#define XP1_GUARANTEED_DELIVERY 0x00000002
1011#define XP1_GUARANTEED_ORDER 0x00000004
1012#define XP1_MESSAGE_ORIENTED 0x00000008
1013#define XP1_PSEUDO_STREAM 0x00000010
1014#define XP1_GRACEFUL_CLOSE 0x00000020
1015#define XP1_EXPEDITED_DATA 0x00000040
1016#define XP1_CONNECT_DATA 0x00000080
1017#define XP1_DISCONNECT_DATA 0x00000100
1018#define XP1_SUPPORT_BROADCAST 0x00000200
1019#define XP1_SUPPORT_MULTIPOINT 0x00000400
1020#define XP1_MULTIPOINT_CONTROL_PLANE 0x00000800
1021#define XP1_MULTIPOINT_DATA_PLANE 0x00001000
1022#define XP1_QOS_SUPPORTED 0x00002000
1023#define XP1_INTERRUPT 0x00004000
1024#define XP1_UNI_SEND 0x00008000
1025#define XP1_UNI_RECV 0x00010000
1026#define XP1_IFS_HANDLES 0x00020000
1027#define XP1_PARTIAL_MESSAGE 0x00040000
1028#define XP1_SAN_SUPPORT_SDP 0x00080000
1029
1030#define BIGENDIAN 0x0000
1031#define LITTLEENDIAN 0x0001
1032
1033#define SECURITY_PROTOCOL_NONE 0x0000
1034
1035/*
1036 * WinSock 2 extension -- manifest constants for WSAJoinLeaf()
1037 */
1038#define JL_SENDER_ONLY 0x01
1039#define JL_RECEIVER_ONLY 0x02
1040#define JL_BOTH 0x04
1041
1042/*
1043 * WinSock 2 extension -- manifest constants for WSASocket()
1044 */
1045#define WSA_FLAG_OVERLAPPED 0x01
1046#define WSA_FLAG_MULTIPOINT_C_ROOT 0x02
1047#define WSA_FLAG_MULTIPOINT_C_LEAF 0x04
1048#define WSA_FLAG_MULTIPOINT_D_ROOT 0x08
1049#define WSA_FLAG_MULTIPOINT_D_LEAF 0x10
1050#define WSA_FLAG_ACCESS_SYSTEM_SECURITY 0x40
1051#define WSA_FLAG_NO_HANDLE_INHERIT 0x80
1052#define WSA_FLAG_REGISTERED_IO 0x100
1053
1054/*
1055 * WinSock 2 extensions -- data types for the condition function in
1056 * WSAAccept() and overlapped I/O completion routine.
1057 */
1058
1059typedef
1060int
1061(CALLBACK * LPCONDITIONPROC)(
1062 IN LPWSABUF lpCallerId,
1063 IN LPWSABUF lpCallerData,
1064 IN OUT LPQOS lpSQOS,
1065 IN OUT LPQOS lpGQOS,
1066 IN LPWSABUF lpCalleeId,
1067 IN LPWSABUF lpCalleeData,
1068 OUT GROUP FAR * g,
1069 IN DWORD_PTR dwCallbackData
1070 );
1071
1072typedef
1073void
1074(CALLBACK * LPWSAOVERLAPPED_COMPLETION_ROUTINE)(
1075 IN DWORD dwError,
1076 IN DWORD cbTransferred,
1077 IN LPWSAOVERLAPPED lpOverlapped,
1078 IN DWORD dwFlags
1079 );
1080
1081#if(_WIN32_WINNT >= 0x0501)
1082
1083/*
1084 * WinSock 2 extension -- manifest constants and associated structures
1085 * for WSANSPIoctl()
1086 */
1087#define SIO_NSP_NOTIFY_CHANGE _WSAIOW(IOC_WS2,25)
1088
1089typedef enum _WSACOMPLETIONTYPE {
1090 NSP_NOTIFY_IMMEDIATELY = 0,
1091 NSP_NOTIFY_HWND,
1092 NSP_NOTIFY_EVENT,
1093 NSP_NOTIFY_PORT,
1094 NSP_NOTIFY_APC,
1095} WSACOMPLETIONTYPE, *PWSACOMPLETIONTYPE, FAR * LPWSACOMPLETIONTYPE;
1096
1097typedef struct _WSACOMPLETION {
1098 WSACOMPLETIONTYPE Type;
1099 union {
1100 struct {
1101 HWND hWnd;
1102 UINT uMsg;
1103 WPARAM context;
1104 } WindowMessage;
1105 struct {
1106 LPWSAOVERLAPPED lpOverlapped;
1107 } Event;
1108 struct {
1109 LPWSAOVERLAPPED lpOverlapped;
1110 LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;
1111 } Apc;
1112 struct {
1113 LPWSAOVERLAPPED lpOverlapped;
1114 HANDLE hPort;
1115 ULONG_PTR Key;
1116 } Port;
1117 } Parameters;
1118} WSACOMPLETION, *PWSACOMPLETION, FAR *LPWSACOMPLETION;
1119#endif //(_WIN32_WINNT >= 0x0501)
1120
1121/*
1122 * WinSock 2 extension -- manifest constants for SIO_TRANSLATE_HANDLE ioctl
1123 */
1124#define TH_NETDEV 0x00000001
1125#define TH_TAPI 0x00000002
1126
1127/*
1128 * Manifest constants and type definitions related to name resolution and
1129 * registration (RNR) API
1130 */
1131
1132#ifndef _tagBLOB_DEFINED
1133#define _tagBLOB_DEFINED
1134#define _BLOB_DEFINED
1135#define _LPBLOB_DEFINED
1136typedef struct _BLOB {
1137 ULONG cbSize ;
1138#ifdef MIDL_PASS
1139 [size_is(cbSize)] BYTE *pBlobData;
1140#else /* MIDL_PASS */
1141 _Field_size_bytes_(cbSize) BYTE *pBlobData ;
1142#endif /* MIDL_PASS */
1143} BLOB, *LPBLOB ;
1144#endif
1145
1146/*
1147 * Service Install Flags
1148 */
1149
1150#define SERVICE_MULTIPLE (0x00000001)
1151
1152/*
1153 *& Name Spaces
1154 */
1155
1156#define NS_ALL (0)
1157
1158#define NS_SAP (1)
1159#define NS_NDS (2)
1160#define NS_PEER_BROWSE (3)
1161#define NS_SLP (5)
1162#define NS_DHCP (6)
1163
1164#define NS_TCPIP_LOCAL (10)
1165#define NS_TCPIP_HOSTS (11)
1166#define NS_DNS (12)
1167#define NS_NETBT (13)
1168#define NS_WINS (14)
1169
1170#if(_WIN32_WINNT >= 0x0501)
1171#define NS_NLA (15) /* Network Location Awareness */
1172#endif //(_WIN32_WINNT >= 0x0501)
1173
1174#if(_WIN32_WINNT >= 0x0600)
1175#define NS_BTH (16) /* Bluetooth SDP Namespace */
1176#endif //(_WIN32_WINNT >= 0x0600)
1177
1178#define NS_NBP (20)
1179
1180#define NS_MS (30)
1181#define NS_STDA (31)
1182#define NS_NTDS (32)
1183
1184#if(_WIN32_WINNT >= 0x0600)
1185#define NS_EMAIL (37)
1186#define NS_PNRPNAME (38)
1187#define NS_PNRPCLOUD (39)
1188#endif //(_WIN32_WINNT >= 0x0600)
1189
1190#define NS_X500 (40)
1191#define NS_NIS (41)
1192#define NS_NISPLUS (42)
1193
1194#define NS_WRQ (50)
1195
1196#define NS_NETDES (60) /* Network Designers Limited */
1197
1198/*
1199 *& Name Spaces
1200 */
1201
1202#define NS_ALL (0)
1203
1204#define NS_SAP (1)
1205#define NS_NDS (2)
1206#define NS_PEER_BROWSE (3)
1207#define NS_SLP (5)
1208#define NS_DHCP (6)
1209
1210#define NS_TCPIP_LOCAL (10)
1211#define NS_TCPIP_HOSTS (11)
1212#define NS_DNS (12)
1213#define NS_NETBT (13)
1214#define NS_WINS (14)
1215
1216#if(_WIN32_WINNT >= 0x0501)
1217#define NS_NLA (15) /* Network Location Awareness */
1218#endif //(_WIN32_WINNT >= 0x0501)
1219
1220#if(_WIN32_WINNT >= 0x0600)
1221#define NS_BTH (16) /* Bluetooth SDP Namespace */
1222#endif //(_WIN32_WINNT >= 0x0600)
1223
1224#define NS_LOCALNAME (19) /* Windows Live */
1225
1226#define NS_NBP (20)
1227
1228#define NS_MS (30)
1229#define NS_STDA (31)
1230#define NS_NTDS (32)
1231
1232#if(_WIN32_WINNT >= 0x0600)
1233#define NS_EMAIL (37)
1234#define NS_PNRPNAME (38)
1235#define NS_PNRPCLOUD (39)
1236#endif //(_WIN32_WINNT >= 0x0600)
1237
1238#define NS_X500 (40)
1239#define NS_NIS (41)
1240#define NS_NISPLUS (42)
1241
1242#define NS_WRQ (50)
1243
1244#define NS_NETDES (60) /* Network Designers Limited */
1245
1246/*
1247 * Resolution flags for WSAGetAddressByName().
1248 * Note these are also used by the 1.1 API GetAddressByName, so
1249 * leave them around.
1250 */
1251#define RES_UNUSED_1 (0x00000001)
1252#define RES_FLUSH_CACHE (0x00000002)
1253#ifndef RES_SERVICE
1254#define RES_SERVICE (0x00000004)
1255#endif /* RES_SERVICE */
1256
1257/*
1258 * Well known value names for Service Types
1259 */
1260
1261#define SERVICE_TYPE_VALUE_IPXPORTA "IpxSocket"
1262#define SERVICE_TYPE_VALUE_IPXPORTW L"IpxSocket"
1263#define SERVICE_TYPE_VALUE_SAPIDA "SapId"
1264#define SERVICE_TYPE_VALUE_SAPIDW L"SapId"
1265
1266#define SERVICE_TYPE_VALUE_TCPPORTA "TcpPort"
1267#define SERVICE_TYPE_VALUE_TCPPORTW L"TcpPort"
1268
1269#define SERVICE_TYPE_VALUE_UDPPORTA "UdpPort"
1270#define SERVICE_TYPE_VALUE_UDPPORTW L"UdpPort"
1271
1272#define SERVICE_TYPE_VALUE_OBJECTIDA "ObjectId"
1273#define SERVICE_TYPE_VALUE_OBJECTIDW L"ObjectId"
1274
1275#ifdef UNICODE
1276
1277#define SERVICE_TYPE_VALUE_SAPID SERVICE_TYPE_VALUE_SAPIDW
1278#define SERVICE_TYPE_VALUE_TCPPORT SERVICE_TYPE_VALUE_TCPPORTW
1279#define SERVICE_TYPE_VALUE_UDPPORT SERVICE_TYPE_VALUE_UDPPORTW
1280#define SERVICE_TYPE_VALUE_OBJECTID SERVICE_TYPE_VALUE_OBJECTIDW
1281
1282#else /* not UNICODE */
1283
1284#define SERVICE_TYPE_VALUE_SAPID SERVICE_TYPE_VALUE_SAPIDA
1285#define SERVICE_TYPE_VALUE_TCPPORT SERVICE_TYPE_VALUE_TCPPORTA
1286#define SERVICE_TYPE_VALUE_UDPPORT SERVICE_TYPE_VALUE_UDPPORTA
1287#define SERVICE_TYPE_VALUE_OBJECTID SERVICE_TYPE_VALUE_OBJECTIDA
1288
1289#endif
1290
1291/*
1292 * Address Family/Protocol Tuples
1293 */
1294typedef struct _AFPROTOCOLS {
1295 INT iAddressFamily;
1296 INT iProtocol;
1297} AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
1298
1299/*
1300 * Client Query API Typedefs
1301 */
1302
1303/*
1304 * The comparators
1305 */
1306typedef enum _WSAEcomparator
1307{
1308 COMP_EQUAL = 0,
1309 COMP_NOTLESS
1310} WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
1311
1312typedef struct _WSAVersion
1313{
1314 DWORD dwVersion;
1315 WSAECOMPARATOR ecHow;
1316}WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
1317
1318typedef struct _WINSOCK_DEPRECATED_BY("WSAQUERYSETW") _WSAQuerySetA
1319{
1320 DWORD dwSize;
1321 LPSTR lpszServiceInstanceName;
1322 LPGUID lpServiceClassId;
1323 LPWSAVERSION lpVersion;
1324 LPSTR lpszComment;
1325 DWORD dwNameSpace;
1326 LPGUID lpNSProviderId;
1327 LPSTR lpszContext;
1328 DWORD dwNumberOfProtocols;
1329 _Field_size_(dwNumberOfProtocols) LPAFPROTOCOLS lpafpProtocols;
1330 LPSTR lpszQueryString;
1331 DWORD dwNumberOfCsAddrs;
1332 _Field_size_(dwNumberOfCsAddrs) LPCSADDR_INFO lpcsaBuffer;
1333 DWORD dwOutputFlags;
1334 LPBLOB lpBlob;
1335} WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
1336
1337typedef _Struct_size_bytes_(dwSize) struct _WSAQuerySetW
1338{
1339 _Field_range_(>=,sizeof(struct _WSAQuerySetW)) DWORD dwSize;
1340 LPWSTR lpszServiceInstanceName;
1341 LPGUID lpServiceClassId;
1342 LPWSAVERSION lpVersion;
1343 LPWSTR lpszComment;
1344 DWORD dwNameSpace;
1345 LPGUID lpNSProviderId;
1346 LPWSTR lpszContext;
1347 DWORD dwNumberOfProtocols;
1348 _Field_size_(dwNumberOfProtocols) LPAFPROTOCOLS lpafpProtocols;
1349 LPWSTR lpszQueryString;
1350 DWORD dwNumberOfCsAddrs;
1351 _Field_size_(dwNumberOfCsAddrs) LPCSADDR_INFO lpcsaBuffer;
1352 DWORD dwOutputFlags;
1353 LPBLOB lpBlob;
1354} WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
1355
1356#pragma region Desktop Family or OneCore Family
1357#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
1358
1359typedef struct _WINSOCK_DEPRECATED_BY("WSAQUERYSET2W") _WSAQuerySet2A
1360{
1361 DWORD dwSize;
1362 LPSTR lpszServiceInstanceName;
1363 LPWSAVERSION lpVersion;
1364 LPSTR lpszComment;
1365 DWORD dwNameSpace;
1366 LPGUID lpNSProviderId;
1367 LPSTR lpszContext;
1368 DWORD dwNumberOfProtocols;
1369 LPAFPROTOCOLS lpafpProtocols;
1370 LPSTR lpszQueryString;
1371 DWORD dwNumberOfCsAddrs;
1372 LPCSADDR_INFO lpcsaBuffer;
1373 DWORD dwOutputFlags;
1374 LPBLOB lpBlob;
1375} WSAQUERYSET2A, *PWSAQUERYSET2A, *LPWSAQUERYSET2A;
1376typedef struct _WSAQuerySet2W
1377{
1378 DWORD dwSize;
1379 LPWSTR lpszServiceInstanceName;
1380 LPWSAVERSION lpVersion;
1381 LPWSTR lpszComment;
1382 DWORD dwNameSpace;
1383 LPGUID lpNSProviderId;
1384 LPWSTR lpszContext;
1385 DWORD dwNumberOfProtocols;
1386 _Field_size_(dwNumberOfProtocols) LPAFPROTOCOLS lpafpProtocols;
1387 LPWSTR lpszQueryString;
1388 DWORD dwNumberOfCsAddrs;
1389 _Field_size_(dwNumberOfCsAddrs) LPCSADDR_INFO lpcsaBuffer;
1390 DWORD dwOutputFlags;
1391 LPBLOB lpBlob;
1392} WSAQUERYSET2W, *PWSAQUERYSET2W, *LPWSAQUERYSET2W;
1393
1394#ifdef UNICODE
1395typedef WSAQUERYSETW WSAQUERYSET;
1396typedef PWSAQUERYSETW PWSAQUERYSET;
1397typedef LPWSAQUERYSETW LPWSAQUERYSET;
1398typedef WSAQUERYSET2W WSAQUERYSET2;
1399typedef PWSAQUERYSET2W PWSAQUERYSET2;
1400typedef LPWSAQUERYSET2W LPWSAQUERYSET2;
1401#else
1402typedef WSAQUERYSETA WSAQUERYSET;
1403typedef PWSAQUERYSETA PWSAQUERYSET;
1404typedef LPWSAQUERYSETA LPWSAQUERYSET;
1405typedef WSAQUERYSET2A WSAQUERYSET2;
1406typedef PWSAQUERYSET2A PWSAQUERYSET2;
1407typedef LPWSAQUERYSET2A LPWSAQUERYSET2;
1408#endif /* UNICODE */
1409
1410#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
1411#pragma endregion
1412
1413#define LUP_DEEP 0x0001
1414#define LUP_CONTAINERS 0x0002
1415#define LUP_NOCONTAINERS 0x0004
1416#define LUP_NEAREST 0x0008
1417#define LUP_RETURN_NAME 0x0010
1418#define LUP_RETURN_TYPE 0x0020
1419#define LUP_RETURN_VERSION 0x0040
1420#define LUP_RETURN_COMMENT 0x0080
1421#define LUP_RETURN_ADDR 0x0100
1422#define LUP_RETURN_BLOB 0x0200
1423#define LUP_RETURN_ALIASES 0x0400
1424#define LUP_RETURN_QUERY_STRING 0x0800
1425#define LUP_RETURN_ALL 0x0FF0
1426#define LUP_RES_SERVICE 0x8000
1427
1428#define LUP_FLUSHCACHE 0x1000
1429#define LUP_FLUSHPREVIOUS 0x2000
1430
1431#define LUP_NON_AUTHORITATIVE 0x4000
1432#define LUP_SECURE 0x8000
1433#define LUP_RETURN_PREFERRED_NAMES 0x10000
1434#define LUP_DNS_ONLY 0x20000
1435
1436#define LUP_ADDRCONFIG 0x00100000
1437#define LUP_DUAL_ADDR 0x00200000
1438#define LUP_FILESERVER 0x00400000
1439#define LUP_DISABLE_IDN_ENCODING 0x00800000
1440#define LUP_API_ANSI 0x01000000
1441
1442#define LUP_RESOLUTION_HANDLE 0x80000000
1443
1444/*
1445 * Return flags
1446 */
1447
1448#define RESULT_IS_ALIAS 0x0001
1449#if(_WIN32_WINNT >= 0x0501)
1450#define RESULT_IS_ADDED 0x0010
1451#define RESULT_IS_CHANGED 0x0020
1452#define RESULT_IS_DELETED 0x0040
1453#endif //(_WIN32_WINNT >= 0x0501)
1454
1455/*
1456 * Service Address Registration and Deregistration Data Types.
1457 */
1458
1459typedef enum _WSAESETSERVICEOP
1460{
1461 RNRSERVICE_REGISTER=0,
1462 RNRSERVICE_DEREGISTER,
1463 RNRSERVICE_DELETE
1464} WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;
1465
1466/*
1467 * Service Installation/Removal Data Types.
1468 */
1469
1470#pragma region Desktop Family or OneCore Family
1471#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
1472typedef struct _WINSOCK_DEPRECATED_BY("WSANSCLASSINFOW") _WSANSClassInfoA
1473{
1474 LPSTR lpszName;
1475 DWORD dwNameSpace;
1476 DWORD dwValueType;
1477 DWORD dwValueSize;
1478 LPVOID lpValue;
1479}WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
1480#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
1481#pragma endregion
1482
1483typedef struct _WSANSClassInfoW
1484{
1485 LPWSTR lpszName;
1486 DWORD dwNameSpace;
1487 DWORD dwValueType;
1488 DWORD dwValueSize;
1489 LPVOID lpValue;
1490}WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
1491#ifdef UNICODE
1492typedef WSANSCLASSINFOW WSANSCLASSINFO;
1493typedef PWSANSCLASSINFOW PWSANSCLASSINFO;
1494typedef LPWSANSCLASSINFOW LPWSANSCLASSINFO;
1495#else
1496#pragma region Desktop Family
1497#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
1498typedef WSANSCLASSINFOA WSANSCLASSINFO;
1499typedef PWSANSCLASSINFOA PWSANSCLASSINFO;
1500typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO;
1501#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
1502#pragma endregion
1503#endif /* UNICODE */
1504
1505#pragma region Desktop Family or OneCore Family
1506#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
1507typedef struct _WINSOCK_DEPRECATED_BY("WSASERVICECLASSINFOW") _WSAServiceClassInfoA
1508{
1509 LPGUID lpServiceClassId;
1510 LPSTR lpszServiceClassName;
1511 DWORD dwCount;
1512 LPWSANSCLASSINFOA lpClassInfos;
1513}WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
1514#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
1515#pragma endregion
1516
1517typedef struct _WSAServiceClassInfoW
1518{
1519 LPGUID lpServiceClassId;
1520 LPWSTR lpszServiceClassName;
1521 DWORD dwCount;
1522 LPWSANSCLASSINFOW lpClassInfos;
1523}WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
1524
1525#ifdef UNICODE
1526typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO;
1527typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO;
1528typedef LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO;
1529#else
1530#pragma region Desktop Family
1531#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
1532typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO;
1533typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO;
1534typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO;
1535#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
1536#pragma endregion
1537#endif /* UNICODE */
1538
1539typedef struct _WINSOCK_DEPRECATED_BY("WSANAMESPACE_INFOW") _WSANAMESPACE_INFOA {
1540 GUID NSProviderId;
1541 DWORD dwNameSpace;
1542 BOOL fActive;
1543 DWORD dwVersion;
1544 LPSTR lpszIdentifier;
1545} WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
1546
1547typedef struct _WSANAMESPACE_INFOW {
1548 GUID NSProviderId;
1549 DWORD dwNameSpace;
1550 BOOL fActive;
1551 DWORD dwVersion;
1552 LPWSTR lpszIdentifier;
1553} WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
1554
1555typedef struct _WINSOCK_DEPRECATED_BY("WSANAMESPACE_INFOEXW") _WSANAMESPACE_INFOEXA {
1556 GUID NSProviderId;
1557 DWORD dwNameSpace;
1558 BOOL fActive;
1559 DWORD dwVersion;
1560 LPSTR lpszIdentifier;
1561 BLOB ProviderSpecific;
1562} WSANAMESPACE_INFOEXA, *PWSANAMESPACE_INFOEXA, *LPWSANAMESPACE_INFOEXA;
1563
1564typedef struct _WSANAMESPACE_INFOEXW {
1565 GUID NSProviderId;
1566 DWORD dwNameSpace;
1567 BOOL fActive;
1568 DWORD dwVersion;
1569 LPWSTR lpszIdentifier;
1570 BLOB ProviderSpecific;
1571} WSANAMESPACE_INFOEXW, *PWSANAMESPACE_INFOEXW, *LPWSANAMESPACE_INFOEXW;
1572
1573#ifdef UNICODE
1574typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO;
1575typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO;
1576typedef LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO;
1577typedef WSANAMESPACE_INFOEXW WSANAMESPACE_INFOEX;
1578typedef PWSANAMESPACE_INFOEXW PWSANAMESPACE_INFOEX;
1579typedef LPWSANAMESPACE_INFOEXW LPWSANAMESPACE_INFOEX;
1580#else
1581typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO;
1582typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO;
1583typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO;
1584typedef WSANAMESPACE_INFOEXA WSANAMESPACE_INFOEX;
1585typedef PWSANAMESPACE_INFOEXA PWSANAMESPACE_INFOEX;
1586typedef LPWSANAMESPACE_INFOEXA LPWSANAMESPACE_INFOEX;
1587#endif /* UNICODE */
1588
1589
1590#if(_WIN32_WINNT >= 0x0600)
1591
1592/* Event flag definitions for WSAPoll(). */
1593
1594#define POLLRDNORM 0x0100
1595#define POLLRDBAND 0x0200
1596#define POLLIN (POLLRDNORM | POLLRDBAND)
1597#define POLLPRI 0x0400
1598
1599#define POLLWRNORM 0x0010
1600#define POLLOUT (POLLWRNORM)
1601#define POLLWRBAND 0x0020
1602
1603#define POLLERR 0x0001
1604#define POLLHUP 0x0002
1605#define POLLNVAL 0x0004
1606
1607typedef struct pollfd {
1608
1609 SOCKET fd;
1610 SHORT events;
1611 SHORT revents;
1612
1613} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;
1614
1615#endif // (_WIN32_WINNT >= 0x0600)
1616
1617
1618/* Socket function prototypes */
1619
1620#if INCL_WINSOCK_API_PROTOTYPES
1621WINSOCK_API_LINKAGE
1622_Must_inspect_result_
1623SOCKET
1624WSAAPI
1625accept(
1626 _In_ SOCKET s,
1627 _Out_writes_bytes_opt_(*addrlen) struct sockaddr FAR * addr,
1628 _Inout_opt_ int FAR * addrlen
1629 );
1630#endif /* INCL_WINSOCK_API_PROTOTYPES */
1631
1632#if INCL_WINSOCK_API_TYPEDEFS
1633typedef
1634_Must_inspect_result_
1635SOCKET
1636(WSAAPI * LPFN_ACCEPT)(
1637 _In_ SOCKET s,
1638 _Out_writes_bytes_opt_(*addrlen) struct sockaddr FAR * addr,
1639 _Inout_opt_ int FAR * addrlen
1640 );
1641#endif /* INCL_WINSOCK_API_TYPEDEFS */
1642
1643#if INCL_WINSOCK_API_PROTOTYPES
1644WINSOCK_API_LINKAGE
1645int
1646WSAAPI
1647bind(
1648 _In_ SOCKET s,
1649 _In_reads_bytes_(namelen) const struct sockaddr FAR * name,
1650 _In_ int namelen
1651 );
1652#endif /* INCL_WINSOCK_API_PROTOTYPES */
1653
1654#if INCL_WINSOCK_API_TYPEDEFS
1655typedef
1656int
1657(WSAAPI * LPFN_BIND)(
1658 _In_ SOCKET s,
1659 _In_reads_bytes_(namelen) const struct sockaddr FAR * name,
1660 _In_ int namelen
1661 );
1662#endif /* INCL_WINSOCK_API_TYPEDEFS */
1663
1664#if INCL_WINSOCK_API_PROTOTYPES
1665WINSOCK_API_LINKAGE
1666int
1667WSAAPI
1668closesocket(
1669 _In_ SOCKET s
1670 );
1671#endif /* INCL_WINSOCK_API_PROTOTYPES */
1672
1673#if INCL_WINSOCK_API_TYPEDEFS
1674typedef
1675int
1676(WSAAPI * LPFN_CLOSESOCKET)(
1677 _In_ SOCKET s
1678 );
1679#endif /* INCL_WINSOCK_API_TYPEDEFS */
1680
1681#if INCL_WINSOCK_API_PROTOTYPES
1682WINSOCK_API_LINKAGE
1683int
1684WSAAPI
1685connect(
1686 _In_ SOCKET s,
1687 _In_reads_bytes_(namelen) const struct sockaddr FAR * name,
1688 _In_ int namelen
1689 );
1690#endif /* INCL_WINSOCK_API_PROTOTYPES */
1691
1692#if INCL_WINSOCK_API_TYPEDEFS
1693typedef
1694int
1695(WSAAPI * LPFN_CONNECT)(
1696 _In_ SOCKET s,
1697 _In_reads_bytes_(namelen) const struct sockaddr FAR * name,
1698 _In_ int namelen
1699 );
1700#endif /* INCL_WINSOCK_API_TYPEDEFS */
1701
1702#if INCL_WINSOCK_API_PROTOTYPES
1703WINSOCK_API_LINKAGE
1704int
1705WSAAPI
1706ioctlsocket(
1707 _In_ SOCKET s,
1708 _In_ long cmd,
1709 _When_(cmd != FIONREAD, _Inout_)
1710 _When_(cmd == FIONREAD, _Out_)
1711 u_long FAR * argp
1712 );
1713#endif /* INCL_WINSOCK_API_PROTOTYPES */
1714
1715#if INCL_WINSOCK_API_TYPEDEFS
1716typedef
1717int
1718(WSAAPI * LPFN_IOCTLSOCKET)(
1719 _In_ SOCKET s,
1720 _In_ long cmd,
1721 _Inout_ u_long FAR * argp
1722 );
1723#endif /* INCL_WINSOCK_API_TYPEDEFS */
1724
1725#if INCL_WINSOCK_API_PROTOTYPES
1726WINSOCK_API_LINKAGE
1727int
1728WSAAPI
1729getpeername(
1730 _In_ SOCKET s,
1731 _Out_writes_bytes_to_(*namelen,*namelen) struct sockaddr FAR * name,
1732 _Inout_ int FAR * namelen
1733 );
1734#endif /* INCL_WINSOCK_API_PROTOTYPES */
1735
1736#if INCL_WINSOCK_API_TYPEDEFS
1737typedef
1738int
1739(WSAAPI * LPFN_GETPEERNAME)(
1740 _In_ SOCKET s,
1741 _Out_writes_bytes_to_(*namelen,*namelen) struct sockaddr FAR * name,
1742 _Inout_ int FAR * namelen
1743 );
1744#endif /* INCL_WINSOCK_API_TYPEDEFS */
1745
1746#if INCL_WINSOCK_API_PROTOTYPES
1747WINSOCK_API_LINKAGE
1748int
1749WSAAPI
1750getsockname(
1751 _In_ SOCKET s,
1752 _Out_writes_bytes_to_(*namelen,*namelen) struct sockaddr FAR * name,
1753 _Inout_ int FAR * namelen
1754 );
1755#endif /* INCL_WINSOCK_API_PROTOTYPES */
1756
1757#if INCL_WINSOCK_API_TYPEDEFS
1758typedef
1759int
1760(WSAAPI * LPFN_GETSOCKNAME)(
1761 _In_ SOCKET s,
1762 _Out_writes_bytes_to_(*namelen,*namelen) struct sockaddr FAR * name,
1763 _Inout_ int FAR * namelen
1764 );
1765#endif /* INCL_WINSOCK_API_TYPEDEFS */
1766
1767#if INCL_WINSOCK_API_PROTOTYPES
1768WINSOCK_API_LINKAGE
1769int
1770WSAAPI
1771getsockopt(
1772 _In_ SOCKET s,
1773 _In_ int level,
1774 _In_ int optname,
1775 _Out_writes_bytes_(*optlen) char FAR * optval,
1776 _Inout_ int FAR * optlen
1777 );
1778#endif /* INCL_WINSOCK_API_PROTOTYPES */
1779
1780#if INCL_WINSOCK_API_TYPEDEFS
1781typedef
1782int
1783(WSAAPI * LPFN_GETSOCKOPT)(
1784 _In_ SOCKET s,
1785 _In_ int level,
1786 _In_ int optname,
1787 _Out_writes_bytes_(*optlen) char FAR * optval,
1788 _Inout_ int FAR * optlen
1789 );
1790#endif /* INCL_WINSOCK_API_TYPEDEFS */
1791
1792#if INCL_WINSOCK_API_PROTOTYPES
1793WINSOCK_API_LINKAGE
1794u_long
1795WSAAPI
1796htonl(
1797 _In_ u_long hostlong
1798 );
1799#endif /* INCL_WINSOCK_API_PROTOTYPES */
1800
1801#if INCL_WINSOCK_API_TYPEDEFS
1802typedef
1803u_long
1804(WSAAPI * LPFN_HTONL)(
1805 _In_ u_long hostlong
1806 );
1807#endif /* INCL_WINSOCK_API_TYPEDEFS */
1808
1809#if INCL_WINSOCK_API_PROTOTYPES
1810WINSOCK_API_LINKAGE
1811u_short
1812WSAAPI
1813htons(
1814 _In_ u_short hostshort
1815 );
1816#endif /* INCL_WINSOCK_API_PROTOTYPES */
1817
1818#if INCL_WINSOCK_API_TYPEDEFS
1819typedef
1820u_short
1821(WSAAPI * LPFN_HTONS)(
1822 _In_ u_short hostshort
1823 );
1824#endif /* INCL_WINSOCK_API_TYPEDEFS */
1825
1826#if INCL_WINSOCK_API_PROTOTYPES
1827_WINSOCK_DEPRECATED_BY("inet_pton() or InetPton()")
1828WINSOCK_API_LINKAGE
1829unsigned long
1830WSAAPI
1831inet_addr(
1832 _In_z_ const char FAR * cp
1833 );
1834#endif /* INCL_WINSOCK_API_PROTOTYPES */
1835
1836#if INCL_WINSOCK_API_TYPEDEFS
1837typedef
1838unsigned long
1839(WSAAPI * LPFN_INET_ADDR)(
1840 _In_ const char FAR * cp
1841 );
1842#endif /* INCL_WINSOCK_API_TYPEDEFS */
1843
1844#if INCL_WINSOCK_API_PROTOTYPES
1845_WINSOCK_DEPRECATED_BY("inet_ntop() or InetNtop()")
1846WINSOCK_API_LINKAGE
1847char FAR *
1848WSAAPI
1849inet_ntoa(
1850 _In_ struct in_addr in
1851 );
1852#endif /* INCL_WINSOCK_API_PROTOTYPES */
1853
1854#if INCL_WINSOCK_API_TYPEDEFS
1855typedef
1856char FAR *
1857(WSAAPI * LPFN_INET_NTOA)(
1858 _In_ struct in_addr in
1859 );
1860#endif /* INCL_WINSOCK_API_TYPEDEFS */
1861
1862
1863#if !defined(NO_EXTRA_HTON_FUNCTIONS) && !defined(__midl) && (defined(INCL_EXTRA_HTON_FUNCTIONS) || NTDDI_VERSION>=NTDDI_WIN8)
1864/*
1865 * Byte order conversion functions for 64-bit integers and 32 + 64 bit
1866 * floating-point numbers. IEEE big-endian format is used for the
1867 * network floating point format.
1868 */
1869#define _WS2_32_WINSOCK_SWAP_LONG(l) \
1870 ( ( ((l) >> 24) & 0x000000FFL ) | \
1871 ( ((l) >> 8) & 0x0000FF00L ) | \
1872 ( ((l) << 8) & 0x00FF0000L ) | \
1873 ( ((l) << 24) & 0xFF000000L ) )
1874
1875#define _WS2_32_WINSOCK_SWAP_LONGLONG(l) \
1876 ( ( ((l) >> 56) & 0x00000000000000FFLL ) | \
1877 ( ((l) >> 40) & 0x000000000000FF00LL ) | \
1878 ( ((l) >> 24) & 0x0000000000FF0000LL ) | \
1879 ( ((l) >> 8) & 0x00000000FF000000LL ) | \
1880 ( ((l) << 8) & 0x000000FF00000000LL ) | \
1881 ( ((l) << 24) & 0x0000FF0000000000LL ) | \
1882 ( ((l) << 40) & 0x00FF000000000000LL ) | \
1883 ( ((l) << 56) & 0xFF00000000000000LL ) )
1884
1885
1886#ifndef htonll
1887__inline unsigned __int64 htonll ( unsigned __int64 Value )
1888{
1889 const unsigned __int64 Retval = _WS2_32_WINSOCK_SWAP_LONGLONG (Value);
1890 return Retval;
1891}
1892#endif /* htonll */
1893
1894#ifndef ntohll
1895__inline unsigned __int64 ntohll ( unsigned __int64 Value )
1896{
1897 const unsigned __int64 Retval = _WS2_32_WINSOCK_SWAP_LONGLONG (Value);
1898 return Retval;
1899}
1900#endif /* ntohll */
1901
1902#ifndef htonf
1903__inline unsigned __int32 htonf ( float Value )
1904{
1905 unsigned __int32 Tempval;
1906 unsigned __int32 Retval;
1907 Tempval = *(unsigned __int32*)(&Value);
1908 Retval = _WS2_32_WINSOCK_SWAP_LONG (Tempval);
1909 return Retval;
1910}
1911#endif /* htonf */
1912
1913#ifndef ntohf
1914__inline float ntohf ( unsigned __int32 Value )
1915{
1916 const unsigned __int32 Tempval = _WS2_32_WINSOCK_SWAP_LONG (Value);
1917 float Retval;
1918 *((unsigned __int32*)&Retval) = Tempval;
1919 return Retval;
1920}
1921#endif /* ntohf */
1922
1923#ifndef htond
1924__inline unsigned __int64 htond ( double Value )
1925{
1926 unsigned __int64 Tempval;
1927 unsigned __int64 Retval;
1928 Tempval = *(unsigned __int64*)(&Value);
1929 Retval = _WS2_32_WINSOCK_SWAP_LONGLONG (Tempval);
1930 return Retval;
1931}
1932#endif /* htond */
1933
1934#ifndef ntohd
1935__inline double ntohd ( unsigned __int64 Value )
1936{
1937 const unsigned __int64 Tempval = _WS2_32_WINSOCK_SWAP_LONGLONG (Value);
1938 double Retval;
1939 *((unsigned __int64*)&Retval) = Tempval;
1940 return Retval;
1941}
1942#endif /* ntohd */
1943#endif /* NO_EXTRA_HTON_FUNCTIONS */
1944
1945#if INCL_WINSOCK_API_PROTOTYPES
1946WINSOCK_API_LINKAGE
1947int
1948WSAAPI
1949listen(
1950 _In_ SOCKET s,
1951 _In_ int backlog
1952 );
1953#endif /* INCL_WINSOCK_API_PROTOTYPES */
1954
1955#if INCL_WINSOCK_API_TYPEDEFS
1956typedef
1957int
1958(WSAAPI * LPFN_LISTEN)(
1959 _In_ SOCKET s,
1960 _In_ int backlog
1961 );
1962#endif /* INCL_WINSOCK_API_TYPEDEFS */
1963
1964#if INCL_WINSOCK_API_PROTOTYPES
1965WINSOCK_API_LINKAGE
1966u_long
1967WSAAPI
1968ntohl(
1969 _In_ u_long netlong
1970 );
1971#endif /* INCL_WINSOCK_API_PROTOTYPES */
1972
1973#if INCL_WINSOCK_API_TYPEDEFS
1974typedef
1975u_long
1976(WSAAPI * LPFN_NTOHL)(
1977 _In_ u_long netlong
1978 );
1979#endif /* INCL_WINSOCK_API_TYPEDEFS */
1980
1981#if INCL_WINSOCK_API_PROTOTYPES
1982WINSOCK_API_LINKAGE
1983u_short
1984WSAAPI
1985ntohs(
1986 _In_ u_short netshort
1987 );
1988#endif /* INCL_WINSOCK_API_PROTOTYPES */
1989
1990#if INCL_WINSOCK_API_TYPEDEFS
1991typedef
1992u_short
1993(WSAAPI * LPFN_NTOHS)(
1994 _In_ u_short netshort
1995 );
1996#endif /* INCL_WINSOCK_API_TYPEDEFS */
1997
1998#if INCL_WINSOCK_API_PROTOTYPES
1999WINSOCK_API_LINKAGE
2000int
2001WSAAPI
2002recv(
2003 _In_ SOCKET s,
2004 _Out_writes_bytes_to_(len, return) __out_data_source(NETWORK) char FAR * buf,
2005 _In_ int len,
2006 _In_ int flags
2007 );
2008#endif /* INCL_WINSOCK_API_PROTOTYPES */
2009
2010#if INCL_WINSOCK_API_TYPEDEFS
2011typedef
2012int
2013(WSAAPI * LPFN_RECV)(
2014 _In_ SOCKET s,
2015 _Out_writes_bytes_to_(len, return) char FAR * buf,
2016 _In_ int len,
2017 _In_ int flags
2018 );
2019#endif /* INCL_WINSOCK_API_TYPEDEFS */
2020
2021#if INCL_WINSOCK_API_PROTOTYPES
2022WINSOCK_API_LINKAGE
2023int
2024WSAAPI
2025recvfrom(
2026 _In_ SOCKET s,
2027 _Out_writes_bytes_to_(len, return) __out_data_source(NETWORK) char FAR * buf,
2028 _In_ int len,
2029 _In_ int flags,
2030 _Out_writes_bytes_to_opt_(*fromlen, *fromlen) struct sockaddr FAR * from,
2031 _Inout_opt_ int FAR * fromlen
2032 );
2033#endif /* INCL_WINSOCK_API_PROTOTYPES */
2034
2035#if INCL_WINSOCK_API_TYPEDEFS
2036typedef
2037int
2038(WSAAPI * LPFN_RECVFROM)(
2039 _In_ SOCKET s,
2040 _Out_writes_bytes_to_(len, return) char FAR * buf,
2041 _In_ int len,
2042 _In_ int flags,
2043 _Out_writes_bytes_to_opt_(*fromlen, *fromlen) struct sockaddr FAR * from,
2044 _Inout_opt_ int FAR * fromlen
2045 );
2046#endif /* INCL_WINSOCK_API_TYPEDEFS */
2047
2048#if INCL_WINSOCK_API_PROTOTYPES
2049WINSOCK_API_LINKAGE
2050int
2051WSAAPI
2052select(
2053 _In_ int nfds,
2054 _Inout_opt_ fd_set FAR * readfds,
2055 _Inout_opt_ fd_set FAR * writefds,
2056 _Inout_opt_ fd_set FAR * exceptfds,
2057 _In_opt_ const struct timeval FAR * timeout
2058 );
2059#endif /* INCL_WINSOCK_API_PROTOTYPES */
2060
2061#if INCL_WINSOCK_API_TYPEDEFS
2062typedef
2063int
2064(WSAAPI * LPFN_SELECT)(
2065 _In_ int nfds,
2066 _Inout_opt_ fd_set FAR * readfds,
2067 _Inout_opt_ fd_set FAR * writefds,
2068 _Inout_opt_ fd_set FAR *exceptfds,
2069 _In_opt_ const struct timeval FAR * timeout
2070 );
2071#endif /* INCL_WINSOCK_API_TYPEDEFS */
2072
2073#if INCL_WINSOCK_API_PROTOTYPES
2074WINSOCK_API_LINKAGE
2075int
2076WSAAPI
2077send(
2078 _In_ SOCKET s,
2079 _In_reads_bytes_(len) const char FAR * buf,
2080 _In_ int len,
2081 _In_ int flags
2082 );
2083#endif /* INCL_WINSOCK_API_PROTOTYPES */
2084
2085#if INCL_WINSOCK_API_TYPEDEFS
2086typedef
2087int
2088(WSAAPI * LPFN_SEND)(
2089 _In_ SOCKET s,
2090 _In_reads_bytes_(len) const char FAR * buf,
2091 _In_ int len,
2092 _In_ int flags
2093 );
2094#endif /* INCL_WINSOCK_API_TYPEDEFS */
2095
2096#if INCL_WINSOCK_API_PROTOTYPES
2097WINSOCK_API_LINKAGE
2098int
2099WSAAPI
2100sendto(
2101 _In_ SOCKET s,
2102 _In_reads_bytes_(len) const char FAR * buf,
2103 _In_ int len,
2104 _In_ int flags,
2105 _In_reads_bytes_(tolen) const struct sockaddr FAR * to,
2106 _In_ int tolen
2107 );
2108#endif /* INCL_WINSOCK_API_PROTOTYPES */
2109
2110#if INCL_WINSOCK_API_TYPEDEFS
2111typedef
2112int
2113(WSAAPI * LPFN_SENDTO)(
2114 _In_ SOCKET s,
2115 _In_reads_bytes_(len) const char FAR * buf,
2116 _In_ int len,
2117 _In_ int flags,
2118 _In_reads_bytes_(tolen) const struct sockaddr FAR * to,
2119 _In_ int tolen
2120 );
2121#endif /* INCL_WINSOCK_API_TYPEDEFS */
2122
2123#if INCL_WINSOCK_API_PROTOTYPES
2124WINSOCK_API_LINKAGE
2125int
2126WSAAPI
2127setsockopt(
2128 _In_ SOCKET s,
2129 _In_ int level,
2130 _In_ int optname,
2131 _In_reads_bytes_opt_(optlen) const char FAR * optval,
2132 _In_ int optlen
2133 );
2134#endif /* INCL_WINSOCK_API_PROTOTYPES */
2135
2136#if INCL_WINSOCK_API_TYPEDEFS
2137typedef
2138int
2139(WSAAPI * LPFN_SETSOCKOPT)(
2140 _In_ SOCKET s,
2141 _In_ int level,
2142 _In_ int optname,
2143 _In_reads_bytes_(optlen) const char FAR * optval,
2144 _In_ int optlen
2145 );
2146#endif /* INCL_WINSOCK_API_TYPEDEFS */
2147
2148#if INCL_WINSOCK_API_PROTOTYPES
2149WINSOCK_API_LINKAGE
2150int
2151WSAAPI
2152shutdown(
2153 _In_ SOCKET s,
2154 _In_ int how
2155 );
2156#endif /* INCL_WINSOCK_API_PROTOTYPES */
2157
2158#if INCL_WINSOCK_API_TYPEDEFS
2159typedef
2160int
2161(WSAAPI * LPFN_SHUTDOWN)(
2162 _In_ SOCKET s,
2163 _In_ int how
2164 );
2165#endif /* INCL_WINSOCK_API_TYPEDEFS */
2166
2167#if INCL_WINSOCK_API_PROTOTYPES
2168WINSOCK_API_LINKAGE
2169_Must_inspect_result_
2170SOCKET
2171WSAAPI
2172socket(
2173 _In_ int af,
2174 _In_ int type,
2175 _In_ int protocol
2176 );
2177#endif /* INCL_WINSOCK_API_PROTOTYPES */
2178
2179#if INCL_WINSOCK_API_TYPEDEFS
2180typedef
2181_Must_inspect_result_
2182SOCKET
2183(WSAAPI * LPFN_SOCKET)(
2184 _In_ int af,
2185 _In_ int type,
2186 _In_ int protocol
2187 );
2188#endif /* INCL_WINSOCK_API_TYPEDEFS */
2189
2190/* Database function prototypes */
2191
2192#if INCL_WINSOCK_API_PROTOTYPES
2193_WINSOCK_DEPRECATED_BY("getnameinfo() or GetNameInfoW()")
2194WINSOCK_API_LINKAGE
2195struct hostent FAR *
2196WSAAPI
2197gethostbyaddr(
2198 _In_reads_bytes_(len) const char FAR * addr,
2199 _In_ int len,
2200 _In_ int type
2201 );
2202#endif /* INCL_WINSOCK_API_PROTOTYPES */
2203
2204#if INCL_WINSOCK_API_TYPEDEFS
2205typedef
2206struct hostent FAR *
2207(WSAAPI * LPFN_GETHOSTBYADDR)(
2208 _In_reads_bytes_(len) const char FAR * addr,
2209 _In_ int len,
2210 _In_ int type
2211 );
2212#endif /* INCL_WINSOCK_API_TYPEDEFS */
2213
2214#if INCL_WINSOCK_API_PROTOTYPES
2215_WINSOCK_DEPRECATED_BY("getaddrinfo() or GetAddrInfoW()")
2216WINSOCK_API_LINKAGE
2217struct hostent FAR *
2218WSAAPI
2219gethostbyname(
2220 _In_z_ const char FAR * name
2221 );
2222#endif /* INCL_WINSOCK_API_PROTOTYPES */
2223
2224#if INCL_WINSOCK_API_TYPEDEFS
2225typedef
2226struct hostent FAR *
2227(WSAAPI * LPFN_GETHOSTBYNAME)(
2228 _In_ const char FAR * name
2229 );
2230#endif /* INCL_WINSOCK_API_TYPEDEFS */
2231
2232#if INCL_WINSOCK_API_PROTOTYPES
2233WINSOCK_API_LINKAGE
2234int
2235WSAAPI
2236gethostname(
2237 _Out_writes_bytes_(namelen) char FAR * name,
2238 _In_ int namelen
2239 );
2240
2241#endif /* INCL_WINSOCK_API_PROTOTYPES */
2242
2243#if INCL_WINSOCK_API_TYPEDEFS
2244typedef
2245int
2246(WSAAPI * LPFN_GETHOSTNAME)(
2247 _Out_writes_bytes_(namelen) char FAR * name,
2248 _In_ int namelen
2249 );
2250#endif /* INCL_WINSOCK_API_TYPEDEFS */
2251
2252#if INCL_WINSOCK_API_PROTOTYPES
2253WINSOCK_API_LINKAGE
2254int
2255WSAAPI
2256GetHostNameW(
2257 _Out_writes_(namelen) PWSTR name,
2258 _In_ int namelen
2259 );
2260
2261#endif /* INCL_WINSOCK_API_PROTOTYPES */
2262
2263#if INCL_WINSOCK_API_TYPEDEFS
2264typedef
2265int
2266(WSAAPI * LPFN_GETHOSTNAMEW)(
2267 _Out_writes_(namelen) PWSTR name,
2268 _In_ int namelen
2269 );
2270#endif /* INCL_WINSOCK_API_TYPEDEFS */
2271
2272#if INCL_WINSOCK_API_PROTOTYPES
2273WINSOCK_API_LINKAGE
2274struct servent FAR *
2275WSAAPI
2276getservbyport(
2277 _In_ int port,
2278 _In_opt_z_ const char FAR * proto
2279 );
2280#endif /* INCL_WINSOCK_API_PROTOTYPES */
2281
2282#if INCL_WINSOCK_API_TYPEDEFS
2283typedef
2284struct servent FAR *
2285(WSAAPI * LPFN_GETSERVBYPORT)(
2286 _In_ int port,
2287 _In_opt_z_ const char FAR * proto
2288 );
2289#endif /* INCL_WINSOCK_API_TYPEDEFS */
2290
2291#if INCL_WINSOCK_API_PROTOTYPES
2292WINSOCK_API_LINKAGE
2293struct servent FAR *
2294WSAAPI
2295getservbyname(
2296 _In_z_ const char FAR * name,
2297 _In_opt_z_ const char FAR * proto
2298 );
2299#endif /* INCL_WINSOCK_API_PROTOTYPES */
2300
2301#if INCL_WINSOCK_API_TYPEDEFS
2302typedef
2303struct servent FAR *
2304(WSAAPI * LPFN_GETSERVBYNAME)(
2305 _In_z_ const char FAR * name,
2306 _In_opt_z_ const char FAR * proto
2307 );
2308#endif /* INCL_WINSOCK_API_TYPEDEFS */
2309
2310#if INCL_WINSOCK_API_PROTOTYPES
2311WINSOCK_API_LINKAGE
2312struct protoent FAR *
2313WSAAPI
2314getprotobynumber(
2315 _In_ int number
2316 );
2317#endif /* INCL_WINSOCK_API_PROTOTYPES */
2318
2319#if INCL_WINSOCK_API_TYPEDEFS
2320typedef
2321struct protoent FAR *
2322(WSAAPI * LPFN_GETPROTOBYNUMBER)(
2323 _In_ int number
2324 );
2325#endif /* INCL_WINSOCK_API_TYPEDEFS */
2326
2327#if INCL_WINSOCK_API_PROTOTYPES
2328WINSOCK_API_LINKAGE
2329struct protoent FAR *
2330WSAAPI
2331getprotobyname(
2332 _In_z_ const char FAR * name
2333 );
2334#endif /* INCL_WINSOCK_API_PROTOTYPES */
2335
2336#if INCL_WINSOCK_API_TYPEDEFS
2337typedef
2338struct protoent FAR *
2339(WSAAPI * LPFN_GETPROTOBYNAME)(
2340 _In_z_ const char FAR * name
2341 );
2342#endif /* INCL_WINSOCK_API_TYPEDEFS */
2343
2344/* Microsoft Windows Extension function prototypes */
2345
2346#if INCL_WINSOCK_API_PROTOTYPES
2347WINSOCK_API_LINKAGE
2348_Must_inspect_result_
2349int
2350WSAAPI
2351WSAStartup(
2352 _In_ WORD wVersionRequested,
2353 _Out_ LPWSADATA lpWSAData
2354 );
2355#endif /* INCL_WINSOCK_API_PROTOTYPES */
2356
2357#if INCL_WINSOCK_API_TYPEDEFS
2358typedef
2359_Must_inspect_result_
2360int
2361(WSAAPI * LPFN_WSASTARTUP)(
2362 _In_ WORD wVersionRequested,
2363 _Out_ LPWSADATA lpWSAData
2364 );
2365#endif /* INCL_WINSOCK_API_TYPEDEFS */
2366
2367#if INCL_WINSOCK_API_PROTOTYPES
2368WINSOCK_API_LINKAGE
2369int
2370WSAAPI
2371WSACleanup(
2372 void
2373 );
2374#endif /* INCL_WINSOCK_API_PROTOTYPES */
2375
2376#if INCL_WINSOCK_API_TYPEDEFS
2377typedef
2378int
2379(WSAAPI * LPFN_WSACLEANUP)(
2380 void
2381 );
2382#endif /* INCL_WINSOCK_API_TYPEDEFS */
2383
2384#if INCL_WINSOCK_API_PROTOTYPES
2385WINSOCK_API_LINKAGE
2386void
2387WSAAPI
2388WSASetLastError(
2389 _In_ int iError
2390 );
2391#endif /* INCL_WINSOCK_API_PROTOTYPES */
2392
2393#if INCL_WINSOCK_API_TYPEDEFS
2394typedef
2395void
2396(WSAAPI * LPFN_WSASETLASTERROR)(
2397 int iError
2398 );
2399#endif /* INCL_WINSOCK_API_TYPEDEFS */
2400
2401#if INCL_WINSOCK_API_PROTOTYPES
2402WINSOCK_API_LINKAGE
2403int
2404WSAAPI
2405WSAGetLastError(
2406 void
2407 );
2408#endif /* INCL_WINSOCK_API_PROTOTYPES */
2409
2410#if INCL_WINSOCK_API_TYPEDEFS
2411typedef
2412int
2413(WSAAPI * LPFN_WSAGETLASTERROR)(
2414 void
2415 );
2416#endif /* INCL_WINSOCK_API_TYPEDEFS */
2417
2418#pragma region Desktop Family or OneCore Family
2419#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
2420
2421#if INCL_WINSOCK_API_PROTOTYPES
2422_WINSOCK_DEPRECATED_BY("Winsock 2")
2423WINSOCK_API_LINKAGE
2424BOOL
2425WSAAPI
2426WSAIsBlocking(
2427 void
2428 );
2429#endif /* INCL_WINSOCK_API_PROTOTYPES */
2430
2431#if INCL_WINSOCK_API_TYPEDEFS
2432typedef
2433BOOL
2434(WSAAPI * LPFN_WSAISBLOCKING)(
2435 void
2436 );
2437#endif /* INCL_WINSOCK_API_TYPEDEFS */
2438
2439#if INCL_WINSOCK_API_PROTOTYPES
2440_WINSOCK_DEPRECATED_BY("Winsock 2")
2441WINSOCK_API_LINKAGE
2442int
2443WSAAPI
2444WSAUnhookBlockingHook(
2445 void
2446 );
2447#endif /* INCL_WINSOCK_API_PROTOTYPES */
2448
2449#if INCL_WINSOCK_API_TYPEDEFS
2450typedef
2451int
2452(WSAAPI * LPFN_WSAUNHOOKBLOCKINGHOOK)(
2453 void
2454 );
2455#endif /* INCL_WINSOCK_API_TYPEDEFS */
2456
2457#if INCL_WINSOCK_API_PROTOTYPES
2458_WINSOCK_DEPRECATED_BY("Winsock 2")
2459WINSOCK_API_LINKAGE
2460FARPROC
2461WSAAPI
2462WSASetBlockingHook(
2463 _In_ FARPROC lpBlockFunc
2464 );
2465#endif /* INCL_WINSOCK_API_PROTOTYPES */
2466
2467#if INCL_WINSOCK_API_TYPEDEFS
2468typedef
2469FARPROC
2470(WSAAPI * LPFN_WSASETBLOCKINGHOOK)(
2471 _In_ FARPROC lpBlockFunc
2472 );
2473#endif /* INCL_WINSOCK_API_TYPEDEFS */
2474
2475#if INCL_WINSOCK_API_PROTOTYPES
2476_WINSOCK_DEPRECATED_BY("Winsock 2")
2477WINSOCK_API_LINKAGE
2478int
2479WSAAPI
2480WSACancelBlockingCall(
2481 void
2482 );
2483#endif /* INCL_WINSOCK_API_PROTOTYPES */
2484
2485#if INCL_WINSOCK_API_TYPEDEFS
2486typedef
2487int
2488(WSAAPI * LPFN_WSACANCELBLOCKINGCALL)(
2489 void
2490 );
2491#endif /* INCL_WINSOCK_API_TYPEDEFS */
2492
2493#if INCL_WINSOCK_API_PROTOTYPES
2494_WINSOCK_DEPRECATED_BY("getservbyname()")
2495WINSOCK_API_LINKAGE
2496HANDLE
2497WSAAPI
2498WSAAsyncGetServByName(
2499 _In_ HWND hWnd,
2500 _In_ u_int wMsg,
2501 _In_z_ const char FAR * name,
2502 _In_z_ const char FAR * proto,
2503 _Out_writes_bytes_(buflen) char FAR * buf,
2504 _In_ int buflen
2505 );
2506#endif /* INCL_WINSOCK_API_PROTOTYPES */
2507
2508#if INCL_WINSOCK_API_TYPEDEFS
2509typedef
2510HANDLE
2511(WSAAPI * LPFN_WSAASYNCGETSERVBYNAME)(
2512 _In_ HWND hWnd,
2513 _In_ u_int wMsg,
2514 _In_z_ const char FAR * name,
2515 _In_z_ const char FAR * proto,
2516 _Out_writes_bytes_(buflen) char FAR * buf,
2517 _In_ int buflen
2518 );
2519#endif /* INCL_WINSOCK_API_TYPEDEFS */
2520
2521#if INCL_WINSOCK_API_PROTOTYPES
2522_WINSOCK_DEPRECATED_BY("getservbyport()")
2523WINSOCK_API_LINKAGE
2524HANDLE
2525WSAAPI
2526WSAAsyncGetServByPort(
2527 _In_ HWND hWnd,
2528 _In_ u_int wMsg,
2529 _In_ int port,
2530 _In_ const char FAR * proto,
2531 _Out_writes_bytes_(buflen) char FAR * buf,
2532 _In_ int buflen
2533 );
2534#endif /* INCL_WINSOCK_API_PROTOTYPES */
2535
2536#if INCL_WINSOCK_API_TYPEDEFS
2537typedef
2538HANDLE
2539(WSAAPI * LPFN_WSAASYNCGETSERVBYPORT)(
2540 _In_ HWND hWnd,
2541 _In_ u_int wMsg,
2542 _In_ int port,
2543 _In_ const char FAR * proto,
2544 _Out_writes_bytes_(buflen) char FAR * buf,
2545 _In_ int buflen
2546 );
2547#endif /* INCL_WINSOCK_API_TYPEDEFS */
2548
2549#if INCL_WINSOCK_API_PROTOTYPES
2550_WINSOCK_DEPRECATED_BY("getprotobyname()")
2551WINSOCK_API_LINKAGE
2552HANDLE
2553WSAAPI
2554WSAAsyncGetProtoByName(
2555 _In_ HWND hWnd,
2556 _In_ u_int wMsg,
2557 _In_z_ const char FAR * name,
2558 _Out_writes_bytes_(buflen) char FAR * buf,
2559 _In_ int buflen
2560 );
2561#endif /* INCL_WINSOCK_API_PROTOTYPES */
2562
2563#if INCL_WINSOCK_API_TYPEDEFS
2564typedef
2565HANDLE
2566(WSAAPI * LPFN_WSAASYNCGETPROTOBYNAME)(
2567 _In_ HWND hWnd,
2568 _In_ u_int wMsg,
2569 _In_z_ const char FAR * name,
2570 _Out_writes_bytes_(buflen) char FAR * buf,
2571 _In_ int buflen
2572 );
2573#endif /* INCL_WINSOCK_API_TYPEDEFS */
2574
2575#if INCL_WINSOCK_API_PROTOTYPES
2576_WINSOCK_DEPRECATED_BY("getprotobynumber()")
2577WINSOCK_API_LINKAGE
2578HANDLE
2579WSAAPI
2580WSAAsyncGetProtoByNumber(
2581 _In_ HWND hWnd,
2582 _In_ u_int wMsg,
2583 _In_ int number,
2584 _Out_writes_bytes_(buflen) char FAR * buf,
2585 _In_ int buflen
2586 );
2587#endif /* INCL_WINSOCK_API_PROTOTYPES */
2588
2589#if INCL_WINSOCK_API_TYPEDEFS
2590typedef
2591HANDLE
2592(WSAAPI * LPFN_WSAASYNCGETPROTOBYNUMBER)(
2593 _In_ HWND hWnd,
2594 _In_ u_int wMsg,
2595 _In_ int number,
2596 _Out_writes_bytes_(buflen) char FAR * buf,
2597 _In_ int buflen
2598 );
2599#endif /* INCL_WINSOCK_API_TYPEDEFS */
2600
2601#if INCL_WINSOCK_API_PROTOTYPES
2602_WINSOCK_DEPRECATED_BY("GetAddrInfoExW()")
2603WINSOCK_API_LINKAGE
2604HANDLE
2605WSAAPI
2606WSAAsyncGetHostByName(
2607 _In_ HWND hWnd,
2608 _In_ u_int wMsg,
2609 _In_z_ const char FAR * name,
2610 _Out_writes_bytes_(buflen) char FAR * buf,
2611 _In_ int buflen
2612 );
2613#endif /* INCL_WINSOCK_API_PROTOTYPES */
2614
2615#if INCL_WINSOCK_API_TYPEDEFS
2616typedef
2617HANDLE
2618(WSAAPI * LPFN_WSAASYNCGETHOSTBYNAME)(
2619 _In_ HWND hWnd,
2620 _In_ u_int wMsg,
2621 _In_z_ const char FAR * name,
2622 _Out_writes_bytes_(buflen) char FAR * buf,
2623 _In_ int buflen
2624 );
2625#endif /* INCL_WINSOCK_API_TYPEDEFS */
2626
2627#if INCL_WINSOCK_API_PROTOTYPES
2628_WINSOCK_DEPRECATED_BY("getnameinfo() or GetNameInfoW()")
2629WINSOCK_API_LINKAGE
2630HANDLE
2631WSAAPI
2632WSAAsyncGetHostByAddr(
2633 _In_ HWND hWnd,
2634 _In_ u_int wMsg,
2635 _In_reads_bytes_(len) const char FAR * addr,
2636 _In_ int len,
2637 _In_ int type,
2638 _Out_writes_bytes_(buflen) char FAR * buf,
2639 _In_ int buflen
2640 );
2641#endif /* INCL_WINSOCK_API_PROTOTYPES */
2642
2643#if INCL_WINSOCK_API_TYPEDEFS
2644typedef
2645HANDLE
2646(WSAAPI * LPFN_WSAASYNCGETHOSTBYADDR)(
2647 _In_ HWND hWnd,
2648 _In_ u_int wMsg,
2649 _In_reads_bytes_(len) const char FAR * addr,
2650 _In_ int len,
2651 _In_ int type,
2652 _Out_writes_bytes_(buflen) char FAR * buf,
2653 _In_ int buflen
2654 );
2655#endif /* INCL_WINSOCK_API_TYPEDEFS */
2656
2657#if INCL_WINSOCK_API_PROTOTYPES
2658_WINSOCK_DEPRECATED
2659WINSOCK_API_LINKAGE
2660int
2661WSAAPI
2662WSACancelAsyncRequest(
2663 _In_ HANDLE hAsyncTaskHandle
2664 );
2665#endif /* INCL_WINSOCK_API_PROTOTYPES */
2666
2667#if INCL_WINSOCK_API_TYPEDEFS
2668typedef
2669int
2670(WSAAPI * LPFN_WSACANCELASYNCREQUEST)(
2671 _In_ HANDLE hAsyncTaskHandle
2672 );
2673#endif /* INCL_WINSOCK_API_TYPEDEFS */
2674
2675#if INCL_WINSOCK_API_PROTOTYPES
2676_WINSOCK_DEPRECATED_BY("WSAEventSelect()")
2677WINSOCK_API_LINKAGE
2678int
2679WSAAPI
2680WSAAsyncSelect(
2681 _In_ SOCKET s,
2682 _In_ HWND hWnd,
2683 _In_ u_int wMsg,
2684 _In_ long lEvent
2685 );
2686#endif /* INCL_WINSOCK_API_PROTOTYPES */
2687
2688#if INCL_WINSOCK_API_TYPEDEFS
2689typedef
2690int
2691(WSAAPI * LPFN_WSAASYNCSELECT)(
2692 _In_ SOCKET s,
2693 _In_ HWND hWnd,
2694 _In_ u_int wMsg,
2695 _In_ long lEvent
2696 );
2697#endif /* INCL_WINSOCK_API_TYPEDEFS */
2698
2699#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
2700#pragma endregion
2701
2702/* WinSock 2 API new function prototypes */
2703
2704#if INCL_WINSOCK_API_PROTOTYPES
2705WINSOCK_API_LINKAGE
2706_Must_inspect_result_
2707SOCKET
2708WSAAPI
2709WSAAccept(
2710 _In_ SOCKET s,
2711 _Out_writes_bytes_to_opt_(*addrlen,*addrlen) struct sockaddr FAR * addr,
2712 _Inout_opt_ LPINT addrlen,
2713 _In_opt_ LPCONDITIONPROC lpfnCondition,
2714 _In_opt_ DWORD_PTR dwCallbackData
2715 );
2716#endif /* INCL_WINSOCK_API_PROTOTYPES */
2717
2718#if INCL_WINSOCK_API_TYPEDEFS
2719typedef
2720_Must_inspect_result_
2721SOCKET
2722(WSAAPI * LPFN_WSAACCEPT)(
2723 _In_ SOCKET s,
2724 _Out_writes_bytes_to_opt_(*addrlen,*addrlen) struct sockaddr FAR * addr,
2725 _Inout_opt_ LPINT addrlen,
2726 _In_opt_ LPCONDITIONPROC lpfnCondition,
2727 _In_opt_ DWORD_PTR dwCallbackData
2728 );
2729#endif /* INCL_WINSOCK_API_TYPEDEFS */
2730
2731#if INCL_WINSOCK_API_PROTOTYPES
2732WINSOCK_API_LINKAGE
2733BOOL
2734WSAAPI
2735WSACloseEvent(
2736 _In_ WSAEVENT hEvent
2737 );
2738#endif /* INCL_WINSOCK_API_PROTOTYPES */
2739
2740#if INCL_WINSOCK_API_TYPEDEFS
2741typedef
2742BOOL
2743(WSAAPI * LPFN_WSACLOSEEVENT)(
2744 _In_ WSAEVENT hEvent
2745 );
2746#endif /* INCL_WINSOCK_API_TYPEDEFS */
2747
2748#if INCL_WINSOCK_API_PROTOTYPES
2749WINSOCK_API_LINKAGE
2750int
2751WSAAPI
2752WSAConnect(
2753 _In_ SOCKET s,
2754 _In_reads_bytes_(namelen) const struct sockaddr FAR * name,
2755 _In_ int namelen,
2756 _In_opt_ LPWSABUF lpCallerData,
2757 _Out_opt_ LPWSABUF lpCalleeData,
2758 _In_opt_ LPQOS lpSQOS,
2759 _In_opt_ LPQOS lpGQOS
2760 );
2761#endif /* INCL_WINSOCK_API_PROTOTYPES */
2762
2763#if INCL_WINSOCK_API_PROTOTYPES
2764
2765#ifdef UNICODE
2766#define WSAConnectByName WSAConnectByNameW
2767#else
2768#define WSAConnectByName WSAConnectByNameA
2769#endif
2770
2771BOOL
2772PASCAL
2773WSAConnectByNameW(
2774 _In_ SOCKET s,
2775 _In_ LPWSTR nodename,
2776 _In_ LPWSTR servicename,
2777 _Inout_opt_ LPDWORD LocalAddressLength,
2778 _Out_writes_bytes_to_opt_(*LocalAddressLength,*LocalAddressLength) LPSOCKADDR LocalAddress,
2779 _Inout_opt_ LPDWORD RemoteAddressLength,
2780 _Out_writes_bytes_to_opt_(*RemoteAddressLength,*RemoteAddressLength) LPSOCKADDR RemoteAddress,
2781 _In_opt_ const struct timeval * timeout,
2782 _Reserved_ LPWSAOVERLAPPED Reserved);
2783
2784_WINSOCK_DEPRECATED_BY("WSAConnectByNameW()")
2785BOOL
2786PASCAL
2787WSAConnectByNameA(
2788 _In_ SOCKET s,
2789 _In_ LPCSTR nodename,
2790 _In_ LPCSTR servicename,
2791 _Inout_opt_ LPDWORD LocalAddressLength,
2792 _Out_writes_bytes_to_opt_(*LocalAddressLength,*LocalAddressLength) LPSOCKADDR LocalAddress,
2793 _Inout_opt_ LPDWORD RemoteAddressLength,
2794 _Out_writes_bytes_to_opt_(*RemoteAddressLength,*RemoteAddressLength) LPSOCKADDR RemoteAddress,
2795 _In_opt_ const struct timeval * timeout,
2796 _Reserved_ LPWSAOVERLAPPED Reserved);
2797
2798BOOL
2799PASCAL
2800WSAConnectByList(
2801 _In_ SOCKET s,
2802 _In_ PSOCKET_ADDRESS_LIST SocketAddress,
2803 _Inout_opt_ LPDWORD LocalAddressLength,
2804 _Out_writes_bytes_to_opt_(*LocalAddressLength,*LocalAddressLength) LPSOCKADDR LocalAddress,
2805 _Inout_opt_ LPDWORD RemoteAddressLength,
2806 _Out_writes_bytes_to_opt_(*RemoteAddressLength,*RemoteAddressLength) LPSOCKADDR RemoteAddress,
2807 _In_opt_ const struct timeval * timeout,
2808 _Reserved_ LPWSAOVERLAPPED Reserved);
2809#endif
2810
2811#if INCL_WINSOCK_API_TYPEDEFS
2812typedef
2813int
2814(WSAAPI * LPFN_WSACONNECT)(
2815 _In_ SOCKET s,
2816 _In_reads_bytes_(namelen) const struct sockaddr FAR * name,
2817 _In_ int namelen,
2818 _In_opt_ LPWSABUF lpCallerData,
2819 _Out_opt_ LPWSABUF lpCalleeData,
2820 _In_opt_ LPQOS lpSQOS,
2821 _In_opt_ LPQOS lpGQOS
2822 );
2823#endif /* INCL_WINSOCK_API_TYPEDEFS */
2824
2825#if INCL_WINSOCK_API_PROTOTYPES
2826WINSOCK_API_LINKAGE
2827WSAEVENT
2828WSAAPI
2829WSACreateEvent(
2830 void
2831 );
2832#endif /* INCL_WINSOCK_API_PROTOTYPES */
2833
2834#if INCL_WINSOCK_API_TYPEDEFS
2835typedef
2836WSAEVENT
2837(WSAAPI * LPFN_WSACREATEEVENT)(
2838 void
2839 );
2840#endif /* INCL_WINSOCK_API_TYPEDEFS */
2841
2842#if INCL_WINSOCK_API_PROTOTYPES
2843_WINSOCK_DEPRECATED_BY("WSADuplicateSocketW()")
2844WINSOCK_API_LINKAGE
2845int
2846WSAAPI
2847WSADuplicateSocketA(
2848 _In_ SOCKET s,
2849 _In_ DWORD dwProcessId,
2850 _Out_ LPWSAPROTOCOL_INFOA lpProtocolInfo
2851 );
2852
2853WINSOCK_API_LINKAGE
2854int
2855WSAAPI
2856WSADuplicateSocketW(
2857 _In_ SOCKET s,
2858 _In_ DWORD dwProcessId,
2859 _Out_ LPWSAPROTOCOL_INFOW lpProtocolInfo
2860 );
2861#ifdef UNICODE
2862#define WSADuplicateSocket WSADuplicateSocketW
2863#else
2864#define WSADuplicateSocket WSADuplicateSocketA
2865#endif /* !UNICODE */
2866#endif /* INCL_WINSOCK_API_PROTOTYPES */
2867
2868#if INCL_WINSOCK_API_TYPEDEFS
2869typedef
2870int
2871(WSAAPI * LPFN_WSADUPLICATESOCKETA)(
2872 _In_ SOCKET s,
2873 _In_ DWORD dwProcessId,
2874 _Out_ LPWSAPROTOCOL_INFOA lpProtocolInfo
2875 );
2876
2877typedef
2878int
2879(WSAAPI * LPFN_WSADUPLICATESOCKETW)(
2880 _In_ SOCKET s,
2881 _In_ DWORD dwProcessId,
2882 _Out_ LPWSAPROTOCOL_INFOW lpProtocolInfo
2883 );
2884#ifdef UNICODE
2885#define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETW
2886#else
2887#define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETA
2888#endif /* !UNICODE */
2889#endif /* INCL_WINSOCK_API_TYPEDEFS */
2890
2891#if INCL_WINSOCK_API_PROTOTYPES
2892WINSOCK_API_LINKAGE
2893int
2894WSAAPI
2895WSAEnumNetworkEvents(
2896 _In_ SOCKET s,
2897 _In_ WSAEVENT hEventObject,
2898 _Out_ LPWSANETWORKEVENTS lpNetworkEvents
2899 );
2900#endif /* INCL_WINSOCK_API_PROTOTYPES */
2901
2902#if INCL_WINSOCK_API_TYPEDEFS
2903typedef
2904int
2905(WSAAPI * LPFN_WSAENUMNETWORKEVENTS)(
2906 _In_ SOCKET s,
2907 _In_ WSAEVENT hEventObject,
2908 _Out_ LPWSANETWORKEVENTS lpNetworkEvents
2909 );
2910#endif /* INCL_WINSOCK_API_TYPEDEFS */
2911
2912#if INCL_WINSOCK_API_PROTOTYPES
2913_WINSOCK_DEPRECATED_BY("WSAEnumProtocolsW()")
2914WINSOCK_API_LINKAGE
2915int
2916WSAAPI
2917WSAEnumProtocolsA(
2918 _In_opt_ LPINT lpiProtocols,
2919 _Out_writes_bytes_to_opt_(*lpdwBufferLength,*lpdwBufferLength) LPWSAPROTOCOL_INFOA lpProtocolBuffer,
2920 _Inout_ LPDWORD lpdwBufferLength
2921 );
2922
2923WINSOCK_API_LINKAGE
2924int
2925WSAAPI
2926WSAEnumProtocolsW(
2927 _In_opt_ LPINT lpiProtocols,
2928 _Out_writes_bytes_to_opt_(*lpdwBufferLength,*lpdwBufferLength) LPWSAPROTOCOL_INFOW lpProtocolBuffer,
2929 _Inout_ LPDWORD lpdwBufferLength
2930 );
2931#ifdef UNICODE
2932#define WSAEnumProtocols WSAEnumProtocolsW
2933#else
2934#define WSAEnumProtocols WSAEnumProtocolsA
2935#endif /* !UNICODE */
2936#endif /* INCL_WINSOCK_API_PROTOTYPES */
2937
2938#if INCL_WINSOCK_API_TYPEDEFS
2939typedef
2940int
2941(WSAAPI * LPFN_WSAENUMPROTOCOLSA)(
2942 _In_opt_ LPINT lpiProtocols,
2943 _Out_writes_bytes_to_opt_(*lpdwBufferLength,*lpdwBufferLength) LPWSAPROTOCOL_INFOA lpProtocolBuffer,
2944 _Inout_ LPDWORD lpdwBufferLength
2945 );
2946
2947typedef
2948int
2949(WSAAPI * LPFN_WSAENUMPROTOCOLSW)(
2950 _In_opt_ LPINT lpiProtocols,
2951 _Out_writes_bytes_to_opt_(*lpdwBufferLength,*lpdwBufferLength) LPWSAPROTOCOL_INFOW lpProtocolBuffer,
2952 _Inout_ LPDWORD lpdwBufferLength
2953 );
2954#ifdef UNICODE
2955#define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSW
2956#else
2957#define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSA
2958#endif /* !UNICODE */
2959#endif /* INCL_WINSOCK_API_TYPEDEFS */
2960
2961#if INCL_WINSOCK_API_PROTOTYPES
2962WINSOCK_API_LINKAGE
2963int
2964WSAAPI
2965WSAEventSelect(
2966 _In_ SOCKET s,
2967 _In_opt_ WSAEVENT hEventObject,
2968 _In_ long lNetworkEvents
2969 );
2970#endif /* INCL_WINSOCK_API_PROTOTYPES */
2971
2972#if INCL_WINSOCK_API_TYPEDEFS
2973typedef
2974int
2975(WSAAPI * LPFN_WSAEVENTSELECT)(
2976 _In_ SOCKET s,
2977 _In_opt_ WSAEVENT hEventObject,
2978 _In_ long lNetworkEvents
2979 );
2980#endif /* INCL_WINSOCK_API_TYPEDEFS */
2981
2982#if INCL_WINSOCK_API_PROTOTYPES
2983WINSOCK_API_LINKAGE
2984BOOL
2985WSAAPI
2986WSAGetOverlappedResult(
2987 _In_ SOCKET s,
2988 _In_ LPWSAOVERLAPPED lpOverlapped,
2989 _Out_ LPDWORD lpcbTransfer,
2990 _In_ BOOL fWait,
2991 _Out_ LPDWORD lpdwFlags
2992 );
2993#endif /* INCL_WINSOCK_API_PROTOTYPES */
2994
2995#if INCL_WINSOCK_API_TYPEDEFS
2996typedef
2997BOOL
2998(WSAAPI * LPFN_WSAGETOVERLAPPEDRESULT)(
2999 _In_ SOCKET s,
3000 _In_ LPWSAOVERLAPPED lpOverlapped,
3001 _Out_ LPDWORD lpcbTransfer,
3002 _In_ BOOL fWait,
3003 _Out_ LPDWORD lpdwFlags
3004 );
3005#endif /* INCL_WINSOCK_API_TYPEDEFS */
3006
3007#pragma region Desktop Family or OneCore Family
3008#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
3009
3010#if INCL_WINSOCK_API_PROTOTYPES
3011_WINSOCK_DEPRECATED
3012WINSOCK_API_LINKAGE
3013BOOL
3014WSAAPI
3015WSAGetQOSByName(
3016 _In_ SOCKET s,
3017 _In_ LPWSABUF lpQOSName,
3018 _Out_ LPQOS lpQOS
3019 );
3020#endif /* INCL_WINSOCK_API_PROTOTYPES */
3021
3022#if INCL_WINSOCK_API_TYPEDEFS
3023typedef
3024BOOL
3025(WSAAPI * LPFN_WSAGETQOSBYNAME)(
3026 _In_ SOCKET s,
3027 _In_ LPWSABUF lpQOSName,
3028 _Out_ LPQOS lpQOS
3029 );
3030#endif /* INCL_WINSOCK_API_TYPEDEFS */
3031
3032#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
3033#pragma endregion
3034
3035#if INCL_WINSOCK_API_PROTOTYPES
3036WINSOCK_API_LINKAGE
3037int
3038WSAAPI
3039WSAHtonl(
3040 _In_ IN SOCKET s,
3041 _In_ IN u_long hostlong,
3042 _Out_ OUT u_long FAR * lpnetlong
3043 );
3044#endif /* INCL_WINSOCK_API_PROTOTYPES */
3045
3046#if INCL_WINSOCK_API_TYPEDEFS
3047typedef
3048int
3049(WSAAPI * LPFN_WSAHTONL)(
3050 _In_ SOCKET s,
3051 _In_ u_long hostlong,
3052 _Out_ u_long FAR * lpnetlong
3053 );
3054#endif /* INCL_WINSOCK_API_TYPEDEFS */
3055
3056#if INCL_WINSOCK_API_PROTOTYPES
3057WINSOCK_API_LINKAGE
3058int
3059WSAAPI
3060WSAHtons(
3061 _In_ IN SOCKET s,
3062 _In_ IN u_short hostshort,
3063 _Out_ OUT u_short FAR * lpnetshort
3064 );
3065#endif /* INCL_WINSOCK_API_PROTOTYPES */
3066
3067#if INCL_WINSOCK_API_TYPEDEFS
3068typedef
3069int
3070(WSAAPI * LPFN_WSAHTONS)(
3071 _In_ SOCKET s,
3072 _In_ u_short hostshort,
3073 _Out_ u_short FAR * lpnetshort
3074 );
3075#endif /* INCL_WINSOCK_API_TYPEDEFS */
3076
3077#if INCL_WINSOCK_API_PROTOTYPES
3078WINSOCK_API_LINKAGE
3079int
3080WSAAPI
3081WSAIoctl(
3082 _In_ SOCKET s,
3083 _In_ DWORD dwIoControlCode,
3084 _In_reads_bytes_opt_(cbInBuffer) LPVOID lpvInBuffer,
3085 _In_ DWORD cbInBuffer,
3086 _Out_writes_bytes_to_opt_(cbOutBuffer, *lpcbBytesReturned) LPVOID lpvOutBuffer,
3087 _In_ DWORD cbOutBuffer,
3088 _Out_ LPDWORD lpcbBytesReturned,
3089 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
3090 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
3091 );
3092#endif /* INCL_WINSOCK_API_PROTOTYPES */
3093
3094#if INCL_WINSOCK_API_TYPEDEFS
3095typedef
3096int
3097(WSAAPI * LPFN_WSAIOCTL)(
3098 _In_ SOCKET s,
3099 _In_ DWORD dwIoControlCode,
3100 _In_reads_bytes_opt_(cbInBuffer) LPVOID lpvInBuffer,
3101 _In_ DWORD cbInBuffer,
3102 _Out_writes_bytes_to_opt_(cbOutBuffer, *lpcbBytesReturned) LPVOID lpvOutBuffer,
3103 _In_ DWORD cbOutBuffer,
3104 _Out_ LPDWORD lpcbBytesReturned,
3105 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
3106 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
3107 );
3108#endif /* INCL_WINSOCK_API_TYPEDEFS */
3109
3110#if INCL_WINSOCK_API_PROTOTYPES
3111WINSOCK_API_LINKAGE
3112SOCKET
3113WSAAPI
3114WSAJoinLeaf(
3115 _In_ SOCKET s,
3116 _In_reads_bytes_(namelen) const struct sockaddr FAR * name,
3117 _In_ int namelen,
3118 _In_opt_ LPWSABUF lpCallerData,
3119 _Out_opt_ LPWSABUF lpCalleeData,
3120 _In_opt_ LPQOS lpSQOS,
3121 _In_opt_ LPQOS lpGQOS,
3122 _In_ DWORD dwFlags
3123 );
3124#endif /* INCL_WINSOCK_API_PROTOTYPES */
3125
3126#if INCL_WINSOCK_API_TYPEDEFS
3127typedef
3128SOCKET
3129(WSAAPI * LPFN_WSAJOINLEAF)(
3130 _In_ SOCKET s,
3131 _In_reads_bytes_(namelen) const struct sockaddr FAR * name,
3132 _In_ int namelen,
3133 _In_opt_ LPWSABUF lpCallerData,
3134 _Out_opt_ LPWSABUF lpCalleeData,
3135 _In_opt_ LPQOS lpSQOS,
3136 _In_opt_ LPQOS lpGQOS,
3137 _In_ DWORD dwFlags
3138 );
3139#endif /* INCL_WINSOCK_API_TYPEDEFS */
3140
3141#if INCL_WINSOCK_API_PROTOTYPES
3142WINSOCK_API_LINKAGE
3143int
3144WSAAPI
3145WSANtohl(
3146 _In_ SOCKET s,
3147 _In_ u_long netlong,
3148 _Out_ u_long FAR * lphostlong
3149 );
3150#endif /* INCL_WINSOCK_API_PROTOTYPES */
3151
3152#if INCL_WINSOCK_API_TYPEDEFS
3153typedef
3154int
3155(WSAAPI * LPFN_WSANTOHL)(
3156 _In_ SOCKET s,
3157 _In_ u_long netlong,
3158 _Out_ u_long FAR * lphostlong
3159 );
3160#endif /* INCL_WINSOCK_API_TYPEDEFS */
3161
3162#if INCL_WINSOCK_API_PROTOTYPES
3163WINSOCK_API_LINKAGE
3164int
3165WSAAPI
3166WSANtohs(
3167 _In_ SOCKET s,
3168 _In_ u_short netshort,
3169 _Out_ u_short FAR * lphostshort
3170 );
3171#endif /* INCL_WINSOCK_API_PROTOTYPES */
3172
3173#if INCL_WINSOCK_API_TYPEDEFS
3174typedef
3175int
3176(WSAAPI * LPFN_WSANTOHS)(
3177 _In_ SOCKET s,
3178 _In_ u_short netshort,
3179 _Out_ u_short FAR * lphostshort
3180 );
3181#endif /* INCL_WINSOCK_API_TYPEDEFS */
3182
3183#if INCL_WINSOCK_API_PROTOTYPES
3184WINSOCK_API_LINKAGE
3185int
3186WSAAPI
3187WSARecv(
3188 _In_ SOCKET s,
3189 _In_reads_(dwBufferCount) __out_data_source(NETWORK) LPWSABUF lpBuffers,
3190 _In_ DWORD dwBufferCount,
3191 _Out_opt_ LPDWORD lpNumberOfBytesRecvd,
3192 _Inout_ LPDWORD lpFlags,
3193 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
3194 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
3195 );
3196#endif /* INCL_WINSOCK_API_PROTOTYPES */
3197
3198#if INCL_WINSOCK_API_TYPEDEFS
3199typedef
3200int
3201(WSAAPI * LPFN_WSARECV)(
3202 _In_ SOCKET s,
3203 _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
3204 _In_ DWORD dwBufferCount,
3205 _Out_opt_ LPDWORD lpNumberOfBytesRecvd,
3206 _Inout_ LPDWORD lpFlags,
3207 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
3208 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
3209 );
3210#endif /* INCL_WINSOCK_API_TYPEDEFS */
3211
3212#pragma region Desktop Family or OneCore Family
3213#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
3214
3215#if INCL_WINSOCK_API_PROTOTYPES
3216_WINSOCK_DEPRECATED_BY("WSARecv()")
3217WINSOCK_API_LINKAGE
3218int
3219WSAAPI
3220WSARecvDisconnect(
3221 _In_ SOCKET s,
3222 _In_opt_ __out_data_source(NETWORK) LPWSABUF lpInboundDisconnectData
3223 );
3224#endif /* INCL_WINSOCK_API_PROTOTYPES */
3225
3226#if INCL_WINSOCK_API_TYPEDEFS
3227typedef
3228int
3229(WSAAPI * LPFN_WSARECVDISCONNECT)(
3230 _In_ SOCKET s,
3231 __out_data_source(NETWORK) LPWSABUF lpInboundDisconnectData
3232 );
3233#endif /* INCL_WINSOCK_API_TYPEDEFS */
3234
3235#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
3236#pragma endregion
3237
3238#if INCL_WINSOCK_API_PROTOTYPES
3239WINSOCK_API_LINKAGE
3240int
3241WSAAPI
3242WSARecvFrom(
3243 _In_ SOCKET s,
3244 _In_reads_(dwBufferCount) __out_data_source(NETWORK) LPWSABUF lpBuffers,
3245 _In_ DWORD dwBufferCount,
3246 _Out_opt_ LPDWORD lpNumberOfBytesRecvd,
3247 _Inout_ LPDWORD lpFlags,
3248 _Out_writes_bytes_to_opt_(*lpFromlen,*lpFromlen) struct sockaddr FAR * lpFrom,
3249 _Inout_opt_ LPINT lpFromlen,
3250 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
3251 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
3252 );
3253#endif /* INCL_WINSOCK_API_PROTOTYPES */
3254
3255#if INCL_WINSOCK_API_TYPEDEFS
3256typedef
3257int
3258(WSAAPI * LPFN_WSARECVFROM)(
3259 _In_ SOCKET s,
3260 _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
3261 _In_ DWORD dwBufferCount,
3262 _Out_opt_ LPDWORD lpNumberOfBytesRecvd,
3263 _Inout_ LPDWORD lpFlags,
3264 _Out_writes_bytes_to_opt_(*lpFromlen,*lpFromLen) struct sockaddr FAR * lpFrom,
3265 _Inout_opt_ LPINT lpFromlen,
3266 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
3267 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
3268 );
3269#endif /* INCL_WINSOCK_API_TYPEDEFS */
3270
3271#if INCL_WINSOCK_API_PROTOTYPES
3272WINSOCK_API_LINKAGE
3273BOOL
3274WSAAPI
3275WSAResetEvent(
3276 _In_ WSAEVENT hEvent
3277 );
3278#endif /* INCL_WINSOCK_API_PROTOTYPES */
3279
3280#if INCL_WINSOCK_API_TYPEDEFS
3281typedef
3282BOOL
3283(WSAAPI * LPFN_WSARESETEVENT)(
3284 _In_ WSAEVENT hEvent
3285 );
3286#endif /* INCL_WINSOCK_API_TYPEDEFS */
3287
3288#if INCL_WINSOCK_API_PROTOTYPES
3289WINSOCK_API_LINKAGE
3290int
3291WSAAPI
3292WSASend(
3293 _In_ SOCKET s,
3294 _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
3295 _In_ DWORD dwBufferCount,
3296 _Out_opt_ LPDWORD lpNumberOfBytesSent,
3297 _In_ DWORD dwFlags,
3298 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
3299 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
3300 );
3301#endif /* INCL_WINSOCK_API_PROTOTYPES */
3302
3303#if INCL_WINSOCK_API_TYPEDEFS
3304typedef
3305int
3306(WSAAPI * LPFN_WSASEND)(
3307 _In_ SOCKET s,
3308 _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
3309 _In_ DWORD dwBufferCount,
3310 _Out_opt_ LPDWORD lpNumberOfBytesSent,
3311 _In_ DWORD dwFlags,
3312 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
3313 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
3314 );
3315#endif /* INCL_WINSOCK_API_TYPEDEFS */
3316
3317#if(_WIN32_WINNT >= 0x0600)
3318#if INCL_WINSOCK_API_PROTOTYPES
3319WINSOCK_API_LINKAGE
3320int
3321WSAAPI
3322WSASendMsg(
3323 _In_ SOCKET Handle,
3324 _In_ LPWSAMSG lpMsg,
3325 _In_ DWORD dwFlags,
3326 _Out_opt_ LPDWORD lpNumberOfBytesSent,
3327 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
3328 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
3329 );
3330#endif /* INCL_WINSOCK_API_PROTOTYPES */
3331#endif // (_WIN32_WINNT >= 0x0600)
3332
3333#pragma region Desktop Family or OneCore Family
3334#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
3335
3336#if INCL_WINSOCK_API_PROTOTYPES
3337_WINSOCK_DEPRECATED_BY("WSASend()")
3338WINSOCK_API_LINKAGE
3339int
3340WSAAPI
3341WSASendDisconnect(
3342 _In_ SOCKET s,
3343 _In_opt_ LPWSABUF lpOutboundDisconnectData
3344 );
3345#endif /* INCL_WINSOCK_API_PROTOTYPES */
3346
3347#if INCL_WINSOCK_API_TYPEDEFS
3348typedef
3349int
3350(WSAAPI * LPFN_WSASENDDISCONNECT)(
3351 _In_ SOCKET s,
3352 _In_opt_ LPWSABUF lpOutboundDisconnectData
3353 );
3354#endif /* INCL_WINSOCK_API_TYPEDEFS */
3355
3356#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
3357#pragma endregion
3358
3359#if INCL_WINSOCK_API_PROTOTYPES
3360WINSOCK_API_LINKAGE
3361int
3362WSAAPI
3363WSASendTo(
3364 _In_ SOCKET s,
3365 _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
3366 _In_ DWORD dwBufferCount,
3367 _Out_opt_ LPDWORD lpNumberOfBytesSent,
3368 _In_ DWORD dwFlags,
3369 _In_reads_bytes_opt_(iTolen) const struct sockaddr FAR * lpTo,
3370 _In_ int iTolen,
3371 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
3372 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
3373 );
3374#endif /* INCL_WINSOCK_API_PROTOTYPES */
3375
3376#if INCL_WINSOCK_API_TYPEDEFS
3377typedef
3378int
3379(WSAAPI * LPFN_WSASENDTO)(
3380 _In_ SOCKET s,
3381 _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
3382 _In_ DWORD dwBufferCount,
3383 _Out_opt_ LPDWORD lpNumberOfBytesSent,
3384 _In_ DWORD dwFlags,
3385 _In_reads_bytes_opt_(iTolen) const struct sockaddr FAR * lpTo,
3386 _In_ int iTolen,
3387 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
3388 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
3389 );
3390#endif /* INCL_WINSOCK_API_TYPEDEFS */
3391
3392#if INCL_WINSOCK_API_PROTOTYPES
3393WINSOCK_API_LINKAGE
3394BOOL
3395WSAAPI
3396WSASetEvent(
3397 _In_ WSAEVENT hEvent
3398 );
3399#endif /* INCL_WINSOCK_API_PROTOTYPES */
3400
3401#if INCL_WINSOCK_API_TYPEDEFS
3402typedef
3403BOOL
3404(WSAAPI * LPFN_WSASETEVENT)(
3405 _In_ WSAEVENT hEvent
3406 );
3407#endif /* INCL_WINSOCK_API_TYPEDEFS */
3408
3409#if INCL_WINSOCK_API_PROTOTYPES
3410
3411_WINSOCK_DEPRECATED_BY("WSASocketW()")
3412WINSOCK_API_LINKAGE
3413_Must_inspect_result_
3414SOCKET
3415WSAAPI
3416WSASocketA(
3417 _In_ int af,
3418 _In_ int type,
3419 _In_ int protocol,
3420 _In_opt_ LPWSAPROTOCOL_INFOA lpProtocolInfo,
3421 _In_ GROUP g,
3422 _In_ DWORD dwFlags
3423 );
3424
3425WINSOCK_API_LINKAGE
3426_Must_inspect_result_
3427SOCKET
3428WSAAPI
3429WSASocketW(
3430 _In_ int af,
3431 _In_ int type,
3432 _In_ int protocol,
3433 _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
3434 _In_ GROUP g,
3435 _In_ DWORD dwFlags
3436 );
3437#ifdef UNICODE
3438#define WSASocket WSASocketW
3439#else
3440#define WSASocket WSASocketA
3441#endif /* !UNICODE */
3442#endif /* INCL_WINSOCK_API_PROTOTYPES */
3443
3444#if INCL_WINSOCK_API_TYPEDEFS
3445
3446typedef
3447_Must_inspect_result_
3448SOCKET
3449(WSAAPI * LPFN_WSASOCKETA)(
3450 _In_ int af,
3451 _In_ int type,
3452 _In_ int protocol,
3453 _In_opt_ LPWSAPROTOCOL_INFOA lpProtocolInfo,
3454 _In_ GROUP g,
3455 _In_ DWORD dwFlags
3456 );
3457
3458typedef
3459_Must_inspect_result_
3460SOCKET
3461(WSAAPI * LPFN_WSASOCKETW)(
3462 _In_ int af,
3463 _In_ int type,
3464 _In_ int protocol,
3465 _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
3466 _In_ GROUP g,
3467 _In_ DWORD dwFlags
3468 );
3469#ifdef UNICODE
3470#define LPFN_WSASOCKET LPFN_WSASOCKETW
3471#else
3472#define LPFN_WSASOCKET LPFN_WSASOCKETA
3473#endif /* !UNICODE */
3474#endif /* INCL_WINSOCK_API_TYPEDEFS */
3475
3476#if INCL_WINSOCK_API_PROTOTYPES
3477WINSOCK_API_LINKAGE
3478DWORD
3479WSAAPI
3480WSAWaitForMultipleEvents(
3481 _In_ DWORD cEvents,
3482 _In_reads_(cEvents) const WSAEVENT FAR * lphEvents,
3483 _In_ BOOL fWaitAll,
3484 _In_ DWORD dwTimeout,
3485 _In_ BOOL fAlertable
3486 );
3487#endif /* INCL_WINSOCK_API_PROTOTYPES */
3488
3489#if INCL_WINSOCK_API_TYPEDEFS
3490typedef
3491DWORD
3492(WSAAPI * LPFN_WSAWAITFORMULTIPLEEVENTS)(
3493 _In_ DWORD cEvents,
3494 _In_reads_(cEvents) const WSAEVENT FAR * lphEvents,
3495 _In_ BOOL fWaitAll,
3496 _In_ DWORD dwTimeout,
3497 _In_ BOOL fAlertable
3498 );
3499#endif /* INCL_WINSOCK_API_TYPEDEFS */
3500
3501#if INCL_WINSOCK_API_PROTOTYPES
3502
3503_WINSOCK_DEPRECATED_BY("WSAAddressToStringW()")
3504WINSOCK_API_LINKAGE
3505INT
3506WSAAPI
3507WSAAddressToStringA(
3508 _In_reads_bytes_(dwAddressLength) LPSOCKADDR lpsaAddress,
3509 _In_ DWORD dwAddressLength,
3510 _In_opt_ LPWSAPROTOCOL_INFOA lpProtocolInfo,
3511 _Out_writes_to_(*lpdwAddressStringLength,*lpdwAddressStringLength) LPSTR lpszAddressString,
3512 _Inout_ LPDWORD lpdwAddressStringLength
3513 );
3514
3515WINSOCK_API_LINKAGE
3516INT
3517WSAAPI
3518WSAAddressToStringW(
3519 _In_reads_bytes_(dwAddressLength) LPSOCKADDR lpsaAddress,
3520 _In_ DWORD dwAddressLength,
3521 _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
3522 _Out_writes_to_(*lpdwAddressStringLength,*lpdwAddressStringLength) LPWSTR lpszAddressString,
3523 _Inout_ LPDWORD lpdwAddressStringLength
3524 );
3525#ifdef UNICODE
3526#define WSAAddressToString WSAAddressToStringW
3527#else
3528#define WSAAddressToString WSAAddressToStringA
3529#endif /* !UNICODE */
3530#endif /* INCL_WINSOCK_API_PROTOTYPES */
3531
3532#if INCL_WINSOCK_API_TYPEDEFS
3533
3534typedef
3535INT
3536(WSAAPI * LPFN_WSAADDRESSTOSTRINGA)(
3537 _In_reads_bytes_(dwAddressLength) LPSOCKADDR lpsaAddress,
3538 _In_ DWORD dwAddressLength,
3539 _In_opt_ LPWSAPROTOCOL_INFOA lpProtocolInfo,
3540 _Out_writes_to_(*lpdwAddressStringLength,*lpdwAddressStringLength) LPSTR lpszAddressString,
3541 _Inout_ LPDWORD lpdwAddressStringLength
3542 );
3543
3544typedef
3545INT
3546(WSAAPI * LPFN_WSAADDRESSTOSTRINGW)(
3547 _In_reads_bytes_(dwAddressLength) LPSOCKADDR lpsaAddress,
3548 _In_ DWORD dwAddressLength,
3549 _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
3550 _Out_writes_to_(*lpdwAddressStringLength,*lpdwAddressStringLength) LPWSTR lpszAddressString,
3551 _Inout_ LPDWORD lpdwAddressStringLength
3552 );
3553#ifdef UNICODE
3554#define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGW
3555#else
3556#define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGA
3557#endif /* !UNICODE */
3558#endif /* INCL_WINSOCK_API_TYPEDEFS */
3559
3560#if INCL_WINSOCK_API_PROTOTYPES
3561
3562_WINSOCK_DEPRECATED_BY("WSAStringToAddressW()")
3563WINSOCK_API_LINKAGE
3564INT
3565WSAAPI
3566WSAStringToAddressA(
3567 _In_ LPSTR AddressString,
3568 _In_ INT AddressFamily,
3569 _In_opt_ LPWSAPROTOCOL_INFOA lpProtocolInfo,
3570 _Out_writes_bytes_to_(*lpAddressLength,*lpAddressLength) LPSOCKADDR lpAddress,
3571 _Inout_ LPINT lpAddressLength
3572 );
3573
3574WINSOCK_API_LINKAGE
3575INT
3576WSAAPI
3577WSAStringToAddressW(
3578 _In_ LPWSTR AddressString,
3579 _In_ INT AddressFamily,
3580 _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
3581 _Out_writes_bytes_to_(*lpAddressLength,*lpAddressLength) LPSOCKADDR lpAddress,
3582 _Inout_ LPINT lpAddressLength
3583 );
3584#ifdef UNICODE
3585#define WSAStringToAddress WSAStringToAddressW
3586#else
3587#define WSAStringToAddress WSAStringToAddressA
3588#endif /* !UNICODE */
3589#endif /* INCL_WINSOCK_API_PROTOTYPES */
3590
3591#if INCL_WINSOCK_API_TYPEDEFS
3592
3593typedef
3594INT
3595(WSAAPI * LPFN_WSASTRINGTOADDRESSA)(
3596 _In_ LPSTR AddressString,
3597 _In_ INT AddressFamily,
3598 _In_opt_ LPWSAPROTOCOL_INFOA lpProtocolInfo,
3599 _Out_writes_bytes_to_(*lpAddressLength,*lpAddressLength) LPSOCKADDR lpAddress,
3600 _Inout_ LPINT lpAddressLength
3601 );
3602
3603typedef
3604INT
3605(WSAAPI * LPFN_WSASTRINGTOADDRESSW)(
3606 _In_ LPWSTR AddressString,
3607 _In_ INT AddressFamily,
3608 _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
3609 _Out_writes_bytes_to_(*lpAddressLength,*lpAddressLength) LPSOCKADDR lpAddress,
3610 _Inout_ LPINT lpAddressLength
3611 );
3612#ifdef UNICODE
3613#define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSW
3614#else
3615#define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSA
3616#endif /* !UNICODE */
3617#endif /* INCL_WINSOCK_API_TYPEDEFS */
3618
3619/* Registration and Name Resolution API functions */
3620
3621
3622#if INCL_WINSOCK_API_PROTOTYPES
3623
3624_WINSOCK_DEPRECATED_BY("WSALookupServiceBeginW()")
3625WINSOCK_API_LINKAGE
3626INT
3627WSAAPI
3628WSALookupServiceBeginA(
3629 _In_ LPWSAQUERYSETA lpqsRestrictions,
3630 _In_ DWORD dwControlFlags,
3631 _Out_ LPHANDLE lphLookup
3632 );
3633
3634WINSOCK_API_LINKAGE
3635INT
3636WSAAPI
3637WSALookupServiceBeginW(
3638 _In_ LPWSAQUERYSETW lpqsRestrictions,
3639 _In_ DWORD dwControlFlags,
3640 _Out_ LPHANDLE lphLookup
3641 );
3642#ifdef UNICODE
3643#define WSALookupServiceBegin WSALookupServiceBeginW
3644#else
3645#define WSALookupServiceBegin WSALookupServiceBeginA
3646#endif /* !UNICODE */
3647#endif /* INCL_WINSOCK_API_PROTOTYPES */
3648
3649#if INCL_WINSOCK_API_TYPEDEFS
3650
3651typedef
3652INT
3653(WSAAPI * LPFN_WSALOOKUPSERVICEBEGINA)(
3654 _In_ LPWSAQUERYSETA lpqsRestrictions,
3655 _In_ DWORD dwControlFlags,
3656 _Out_ LPHANDLE lphLookup
3657 );
3658
3659typedef
3660INT
3661(WSAAPI * LPFN_WSALOOKUPSERVICEBEGINW)(
3662 _In_ LPWSAQUERYSETW lpqsRestrictions,
3663 _In_ DWORD dwControlFlags,
3664 _Out_ LPHANDLE lphLookup
3665 );
3666#ifdef UNICODE
3667#define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINW
3668#else
3669#define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINA
3670#endif /* !UNICODE */
3671#endif /* INCL_WINSOCK_API_TYPEDEFS */
3672
3673#if INCL_WINSOCK_API_PROTOTYPES
3674
3675_WINSOCK_DEPRECATED_BY("WSALookupServiceNextW()")
3676WINSOCK_API_LINKAGE
3677INT
3678WSAAPI
3679WSALookupServiceNextA(
3680 _In_ HANDLE hLookup,
3681 _In_ DWORD dwControlFlags,
3682 _Inout_ LPDWORD lpdwBufferLength,
3683 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSAQUERYSETA lpqsResults
3684 );
3685
3686WINSOCK_API_LINKAGE
3687INT
3688WSAAPI
3689WSALookupServiceNextW(
3690 _In_ HANDLE hLookup,
3691 _In_ DWORD dwControlFlags,
3692 _Inout_ LPDWORD lpdwBufferLength,
3693 _Out_writes_bytes_to_opt_(*lpdwBufferLength,*lpdwBufferLength) LPWSAQUERYSETW lpqsResults
3694 );
3695#ifdef UNICODE
3696#define WSALookupServiceNext WSALookupServiceNextW
3697#else
3698#define WSALookupServiceNext WSALookupServiceNextA
3699#endif /* !UNICODE */
3700#endif /* INCL_WINSOCK_API_PROTOTYPES */
3701
3702#if INCL_WINSOCK_API_TYPEDEFS
3703
3704typedef
3705INT
3706(WSAAPI * LPFN_WSALOOKUPSERVICENEXTA)(
3707 _In_ HANDLE hLookup,
3708 _In_ DWORD dwControlFlags,
3709 _Inout_ LPDWORD lpdwBufferLength,
3710 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSAQUERYSETA lpqsResults
3711 );
3712
3713typedef
3714INT
3715(WSAAPI * LPFN_WSALOOKUPSERVICENEXTW)(
3716 _In_ HANDLE hLookup,
3717 _In_ DWORD dwControlFlags,
3718 _Inout_ LPDWORD lpdwBufferLength,
3719 _Out_writes_bytes_to_opt_(*lpdwBufferLength,*lpdwBufferLength) LPWSAQUERYSETW lpqsResults
3720 );
3721#ifdef UNICODE
3722#define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTW
3723#else
3724#define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTA
3725#endif /* !UNICODE */
3726#endif /* INCL_WINSOCK_API_TYPEDEFS */
3727
3728#if(_WIN32_WINNT >= 0x0501)
3729#if INCL_WINSOCK_API_PROTOTYPES
3730WINSOCK_API_LINKAGE
3731INT
3732WSAAPI
3733WSANSPIoctl(
3734 _In_ HANDLE hLookup,
3735 _In_ DWORD dwControlCode,
3736 _In_reads_bytes_opt_(cbInBuffer) LPVOID lpvInBuffer,
3737 _In_ DWORD cbInBuffer,
3738 _Out_writes_bytes_to_opt_(cbOutBuffer, *lpcbBytesReturned) LPVOID lpvOutBuffer,
3739 _In_ DWORD cbOutBuffer,
3740 _Out_ LPDWORD lpcbBytesReturned,
3741 _In_opt_ LPWSACOMPLETION lpCompletion
3742 );
3743#endif /* INCL_WINSOCK_API_PROTOTYPES */
3744
3745#if INCL_WINSOCK_API_TYPEDEFS
3746typedef
3747INT
3748(WSAAPI * LPFN_WSANSPIOCTL)(
3749 IN HANDLE hLookup,
3750 IN DWORD dwControlCode,
3751 _In_reads_bytes_opt_(cbInBuffer) LPVOID lpvInBuffer,
3752 IN DWORD cbInBuffer,
3753 _Out_writes_bytes_to_opt_(cbOutBuffer, *lpcbBytesReturned) LPVOID lpvOutBuffer,
3754 IN DWORD cbOutBuffer,
3755 _Out_ LPDWORD lpcbBytesReturned,
3756 _In_opt_ LPWSACOMPLETION lpCompletion
3757 );
3758#endif /* INCL_WINSOCK_API_TYPEDEFS */
3759#endif //(_WIN32_WINNT >= 0x0501)
3760
3761#if INCL_WINSOCK_API_PROTOTYPES
3762WINSOCK_API_LINKAGE
3763INT
3764WSAAPI
3765WSALookupServiceEnd(
3766 _In_ HANDLE hLookup
3767 );
3768#endif /* INCL_WINSOCK_API_PROTOTYPES */
3769
3770#if INCL_WINSOCK_API_TYPEDEFS
3771typedef
3772INT
3773(WSAAPI * LPFN_WSALOOKUPSERVICEEND)(
3774 _In_ HANDLE hLookup
3775 );
3776#endif /* INCL_WINSOCK_API_TYPEDEFS */
3777
3778#pragma region Desktop Family or OneCore Family
3779#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
3780
3781#if INCL_WINSOCK_API_PROTOTYPES
3782_WINSOCK_DEPRECATED_BY("WSAInstallServiceClassW()")
3783WINSOCK_API_LINKAGE
3784INT
3785WSAAPI
3786WSAInstallServiceClassA(
3787 _In_ LPWSASERVICECLASSINFOA lpServiceClassInfo
3788 );
3789WINSOCK_API_LINKAGE
3790INT
3791WSAAPI
3792WSAInstallServiceClassW(
3793 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo
3794 );
3795#ifdef UNICODE
3796#define WSAInstallServiceClass WSAInstallServiceClassW
3797#else
3798#define WSAInstallServiceClass WSAInstallServiceClassA
3799#endif /* !UNICODE */
3800#endif /* INCL_WINSOCK_API_PROTOTYPES */
3801
3802#if INCL_WINSOCK_API_TYPEDEFS
3803typedef
3804INT
3805(WSAAPI * LPFN_WSAINSTALLSERVICECLASSA)(
3806 _In_ LPWSASERVICECLASSINFOA lpServiceClassInfo
3807 );
3808typedef
3809INT
3810(WSAAPI * LPFN_WSAINSTALLSERVICECLASSW)(
3811 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo
3812 );
3813#ifdef UNICODE
3814#define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSW
3815#else
3816#define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSA
3817#endif /* !UNICODE */
3818#endif /* INCL_WINSOCK_API_TYPEDEFS */
3819
3820#if INCL_WINSOCK_API_PROTOTYPES
3821WINSOCK_API_LINKAGE
3822INT
3823WSAAPI
3824WSARemoveServiceClass(
3825 _In_ LPGUID lpServiceClassId
3826 );
3827#endif /* INCL_WINSOCK_API_PROTOTYPES */
3828
3829#if INCL_WINSOCK_API_TYPEDEFS
3830typedef
3831INT
3832(WSAAPI * LPFN_WSAREMOVESERVICECLASS)(
3833 _In_ LPGUID lpServiceClassId
3834 );
3835#endif /* INCL_WINSOCK_API_TYPEDEFS */
3836
3837#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
3838#pragma endregion
3839
3840#if INCL_WINSOCK_API_PROTOTYPES
3841#pragma region Desktop Family or OneCore Family
3842#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
3843_WINSOCK_DEPRECATED_BY("WSAGetServiceClassInfoW()")
3844WINSOCK_API_LINKAGE
3845INT
3846WSAAPI
3847WSAGetServiceClassInfoA(
3848 _In_ LPGUID lpProviderId,
3849 _In_ LPGUID lpServiceClassId,
3850 _Inout_ LPDWORD lpdwBufSize,
3851 _Out_writes_bytes_to_(*lpdwBufSize,*lpdwBufSize) LPWSASERVICECLASSINFOA lpServiceClassInfo
3852 );
3853#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
3854#pragma endregion
3855
3856WINSOCK_API_LINKAGE
3857INT
3858WSAAPI
3859WSAGetServiceClassInfoW(
3860 _In_ LPGUID lpProviderId,
3861 _In_ LPGUID lpServiceClassId,
3862 _Inout_ LPDWORD lpdwBufSize,
3863 _Out_writes_bytes_to_(*lpdwBufSize,*lpdwBufSize) LPWSASERVICECLASSINFOW lpServiceClassInfo
3864 );
3865#ifdef UNICODE
3866#define WSAGetServiceClassInfo WSAGetServiceClassInfoW
3867#else
3868#define WSAGetServiceClassInfo WSAGetServiceClassInfoA
3869#endif /* !UNICODE */
3870#endif /* INCL_WINSOCK_API_PROTOTYPES */
3871
3872#if INCL_WINSOCK_API_TYPEDEFS
3873#pragma region Desktop Family or OneCore Family
3874#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
3875typedef
3876INT
3877(WSAAPI * LPFN_WSAGETSERVICECLASSINFOA)(
3878 _In_ LPGUID lpProviderId,
3879 _In_ LPGUID lpServiceClassId,
3880 _Inout_ LPDWORD lpdwBufSize,
3881 _Out_writes_bytes_to_(*lpdwBufSize,*lpdwBufSize) LPWSASERVICECLASSINFOA lpServiceClassInfo
3882 );
3883#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
3884#pragma endregion
3885
3886typedef
3887INT
3888(WSAAPI * LPFN_WSAGETSERVICECLASSINFOW)(
3889 _In_ LPGUID lpProviderId,
3890 _In_ LPGUID lpServiceClassId,
3891 _Inout_ LPDWORD lpdwBufSize,
3892 _Out_writes_bytes_to_(*lpdwBufSize,*lpdwBufSize) LPWSASERVICECLASSINFOW lpServiceClassInfo
3893 );
3894#ifdef UNICODE
3895#define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOW
3896#else
3897#define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOA
3898#endif /* !UNICODE */
3899#endif /* INCL_WINSOCK_API_TYPEDEFS */
3900
3901#if INCL_WINSOCK_API_PROTOTYPES
3902_WINSOCK_DEPRECATED_BY("WSAEnumNameSpaceProvidersW()")
3903WINSOCK_API_LINKAGE
3904INT
3905WSAAPI
3906WSAEnumNameSpaceProvidersA(
3907 _Inout_ LPDWORD lpdwBufferLength,
3908 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSANAMESPACE_INFOA lpnspBuffer
3909 );
3910
3911WINSOCK_API_LINKAGE
3912INT
3913WSAAPI
3914WSAEnumNameSpaceProvidersW(
3915 _Inout_ LPDWORD lpdwBufferLength,
3916 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSANAMESPACE_INFOW lpnspBuffer
3917 );
3918
3919#ifdef UNICODE
3920#define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
3921#else
3922#define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersA
3923#endif /* !UNICODE */
3924
3925#if(_WIN32_WINNT >= 0x0600 )
3926_WINSOCK_DEPRECATED_BY("WSAEnumNameSpaceProvidersW()")
3927WINSOCK_API_LINKAGE
3928INT
3929WSAAPI
3930WSAEnumNameSpaceProvidersExA(
3931 _Inout_ LPDWORD lpdwBufferLength,
3932 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSANAMESPACE_INFOEXA lpnspBuffer
3933 );
3934
3935WINSOCK_API_LINKAGE
3936INT
3937WSAAPI
3938WSAEnumNameSpaceProvidersExW(
3939 _Inout_ LPDWORD lpdwBufferLength,
3940 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSANAMESPACE_INFOEXW lpnspBuffer
3941 );
3942
3943#ifdef UNICODE
3944#define WSAEnumNameSpaceProvidersEx WSAEnumNameSpaceProvidersExW
3945#else
3946#define WSAEnumNameSpaceProvidersEx WSAEnumNameSpaceProvidersExA
3947#endif /* !UNICODE */
3948
3949#endif //(_WIN32_WINNT >= 0x0600 )
3950
3951
3952#endif /* INCL_WINSOCK_API_PROTOTYPES */
3953
3954#if INCL_WINSOCK_API_TYPEDEFS
3955typedef
3956INT
3957(WSAAPI * LPFN_WSAENUMNAMESPACEPROVIDERSA)(
3958 _Inout_ LPDWORD lpdwBufferLength,
3959 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSANAMESPACE_INFOA lpnspBuffer
3960 );
3961
3962typedef
3963INT
3964(WSAAPI * LPFN_WSAENUMNAMESPACEPROVIDERSW)(
3965 _Inout_ LPDWORD lpdwBufferLength,
3966 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSANAMESPACE_INFOW lpnspBuffer
3967 );
3968#ifdef UNICODE
3969#define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
3970#else
3971#define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSA
3972#endif /* !UNICODE */
3973
3974#if (_WIN32_WINNT >= 0x0600)
3975typedef
3976INT
3977(WSAAPI * LPFN_WSAENUMNAMESPACEPROVIDERSEXA)(
3978 _Inout_ LPDWORD lpdwBufferLength,
3979 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSANAMESPACE_INFOEXA lpnspBuffer
3980 );
3981
3982typedef
3983INT
3984(WSAAPI * LPFN_WSAENUMNAMESPACEPROVIDERSEXW)(
3985 _Inout_ LPDWORD lpdwBufferLength,
3986 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSANAMESPACE_INFOEXW lpnspBuffer
3987 );
3988#ifdef UNICODE
3989#define LPFN_WSAENUMNAMESPACEPROVIDERSEX LPFN_WSAENUMNAMESPACEPROVIDERSEXW
3990#else
3991#define LPFN_WSAENUMNAMESPACEPROVIDERSEX LPFN_WSAENUMNAMESPACEPROVIDERSEXA
3992#endif /* !UNICODE */
3993
3994#endif //(_WIN32_WINNT >= 0x600)
3995
3996#endif /* INCL_WINSOCK_API_TYPEDEFS */
3997
3998#if INCL_WINSOCK_API_PROTOTYPES
3999#pragma region Desktop Family or OneCore Family
4000#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
4001_WINSOCK_DEPRECATED_BY("WSAGetServiceClassNameByClassIdW()")
4002WINSOCK_API_LINKAGE
4003_Success_(return == 0) INT
4004WSAAPI
4005WSAGetServiceClassNameByClassIdA(
4006 _In_ LPGUID lpServiceClassId,
4007 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPSTR lpszServiceClassName,
4008 _Inout_ LPDWORD lpdwBufferLength
4009 );
4010#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
4011#pragma endregion
4012
4013WINSOCK_API_LINKAGE
4014_Success_(return == 0) INT
4015WSAAPI
4016WSAGetServiceClassNameByClassIdW(
4017 _In_ LPGUID lpServiceClassId,
4018 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSTR lpszServiceClassName,
4019 _Inout_ LPDWORD lpdwBufferLength
4020 );
4021#ifdef UNICODE
4022#define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdW
4023#else
4024#define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdA
4025#endif /* !UNICODE */
4026#endif /* INCL_WINSOCK_API_PROTOTYPES */
4027
4028#if INCL_WINSOCK_API_TYPEDEFS
4029#pragma region Desktop Family or OneCore Family
4030#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
4031typedef
4032INT
4033(WSAAPI * LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA)(
4034 _In_ LPGUID lpServiceClassId,
4035 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPSTR lpszServiceClassName,
4036 _Inout_ LPDWORD lpdwBufferLength
4037 );
4038#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
4039#pragma endregion
4040
4041typedef
4042INT
4043(WSAAPI * LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW)(
4044 _In_ LPGUID lpServiceClassId,
4045 _Out_writes_bytes_to_(*lpdwBufferLength,*lpdwBufferLength) LPWSTR lpszServiceClassName,
4046 _Inout_ LPDWORD lpdwBufferLength
4047 );
4048#ifdef UNICODE
4049#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW
4050#else
4051#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA
4052#endif /* !UNICODE */
4053#endif /* INCL_WINSOCK_API_TYPEDEFS */
4054
4055#if INCL_WINSOCK_API_PROTOTYPES
4056_WINSOCK_DEPRECATED_BY("WSASetServiceW()")
4057WINSOCK_API_LINKAGE
4058INT
4059WSAAPI
4060WSASetServiceA(
4061 _In_ LPWSAQUERYSETA lpqsRegInfo,
4062 _In_ WSAESETSERVICEOP essoperation,
4063 _In_ DWORD dwControlFlags
4064 );
4065
4066WINSOCK_API_LINKAGE
4067INT
4068WSAAPI
4069WSASetServiceW(
4070 _In_ LPWSAQUERYSETW lpqsRegInfo,
4071 _In_ WSAESETSERVICEOP essoperation,
4072 _In_ DWORD dwControlFlags
4073 );
4074#ifdef UNICODE
4075#define WSASetService WSASetServiceW
4076#else
4077#define WSASetService WSASetServiceA
4078#endif /* !UNICODE */
4079#endif /* INCL_WINSOCK_API_PROTOTYPES */
4080
4081#if INCL_WINSOCK_API_TYPEDEFS
4082typedef
4083INT
4084(WSAAPI * LPFN_WSASETSERVICEA)(
4085 _In_ LPWSAQUERYSETA lpqsRegInfo,
4086 _In_ WSAESETSERVICEOP essoperation,
4087 _In_ DWORD dwControlFlags
4088 );
4089
4090typedef
4091INT
4092(WSAAPI * LPFN_WSASETSERVICEW)(
4093 _In_ LPWSAQUERYSETW lpqsRegInfo,
4094 _In_ WSAESETSERVICEOP essoperation,
4095 _In_ DWORD dwControlFlags
4096 );
4097#ifdef UNICODE
4098#define LPFN_WSASETSERVICE LPFN_WSASETSERVICEW
4099#else
4100#define LPFN_WSASETSERVICE LPFN_WSASETSERVICEA
4101#endif /* !UNICODE */
4102#endif /* INCL_WINSOCK_API_TYPEDEFS */
4103
4104#if INCL_WINSOCK_API_PROTOTYPES
4105WINSOCK_API_LINKAGE
4106INT
4107WSAAPI
4108WSAProviderConfigChange(
4109 _Inout_ LPHANDLE lpNotificationHandle,
4110 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
4111 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
4112 );
4113#endif /* INCL_WINSOCK_API_PROTOTYPES */
4114
4115#if INCL_WINSOCK_API_TYPEDEFS
4116typedef
4117INT
4118(WSAAPI * LPFN_WSAPROVIDERCONFIGCHANGE)(
4119 _Inout_ LPHANDLE lpNotificationHandle,
4120 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
4121 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
4122 );
4123#endif /* INCL_WINSOCK_API_TYPEDEFS */
4124
4125#if(_WIN32_WINNT >= 0x0600)
4126#if INCL_WINSOCK_API_PROTOTYPES
4127WINSOCK_API_LINKAGE
4128int
4129WSAAPI
4130WSAPoll(
4131 _Inout_ LPWSAPOLLFD fdArray,
4132 _In_ ULONG fds,
4133 _In_ INT timeout
4134 );
4135#endif /* INCL_WINSOCK_API_PROTOTYPES */
4136#endif // (_WIN32_WINNT >= 0x0600)
4137
4138
4139
4140/* Microsoft Windows Extended data types */
4141typedef struct sockaddr_in FAR *LPSOCKADDR_IN;
4142
4143typedef struct linger LINGER;
4144typedef struct linger *PLINGER;
4145typedef struct linger FAR *LPLINGER;
4146
4147typedef struct fd_set FD_SET;
4148typedef struct fd_set *PFD_SET;
4149typedef struct fd_set FAR *LPFD_SET;
4150
4151typedef struct hostent HOSTENT;
4152typedef struct hostent *PHOSTENT;
4153typedef struct hostent FAR *LPHOSTENT;
4154
4155typedef struct servent SERVENT;
4156typedef struct servent *PSERVENT;
4157typedef struct servent FAR *LPSERVENT;
4158
4159typedef struct protoent PROTOENT;
4160typedef struct protoent *PPROTOENT;
4161typedef struct protoent FAR *LPPROTOENT;
4162
4163typedef struct timeval TIMEVAL;
4164typedef struct timeval *PTIMEVAL;
4165typedef struct timeval FAR *LPTIMEVAL;
4166
4167/*
4168 * Windows message parameter composition and decomposition
4169 * macros.
4170 *
4171 * WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation
4172 * when constructing the response to a WSAAsyncGetXByY() routine.
4173 */
4174#define WSAMAKEASYNCREPLY(buflen,error) MAKELONG(buflen,error)
4175/*
4176 * WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
4177 * when constructing the response to WSAAsyncSelect().
4178 */
4179#define WSAMAKESELECTREPLY(event,error) MAKELONG(event,error)
4180/*
4181 * WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application
4182 * to extract the buffer length from the lParam in the response
4183 * to a WSAAsyncGetXByY().
4184 */
4185#define WSAGETASYNCBUFLEN(lParam) LOWORD(lParam)
4186/*
4187 * WSAGETASYNCERROR is intended for use by the Windows Sockets application
4188 * to extract the error code from the lParam in the response
4189 * to a WSAGetXByY().
4190 */
4191#define WSAGETASYNCERROR(lParam) HIWORD(lParam)
4192/*
4193 * WSAGETSELECTEVENT is intended for use by the Windows Sockets application
4194 * to extract the event code from the lParam in the response
4195 * to a WSAAsyncSelect().
4196 */
4197#define WSAGETSELECTEVENT(lParam) LOWORD(lParam)
4198/*
4199 * WSAGETSELECTERROR is intended for use by the Windows Sockets application
4200 * to extract the error code from the lParam in the response
4201 * to a WSAAsyncSelect().
4202 */
4203#define WSAGETSELECTERROR(lParam) HIWORD(lParam)
4204
4205#ifdef __cplusplus
4206}
4207#endif
4208
4209#ifdef _NEED_POPPACK
4210#include <poppack.h>
4211#endif
4212
4213#if(_WIN32_WINNT >= 0x0501)
4214#ifdef IPV6STRICT
4215#include <wsipv6ok.h>
4216#endif // IPV6STRICT
4217#endif //(_WIN32_WINNT >= 0x0501)
4218
4219#endif /* _WINSOCK2API_ */