[CONSRV]
[reactos.git] / include / psdk / mswsock.h
1 /*
2 * mswsock.h
3 * MS-specific extensions to Windows Sockets, exported from mswsock.dll.
4 * These functions are N/A on Windows9x.
5 *
6 * This file is part of a free library for the Win32 API.
7 * This library is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 */
11
12 #pragma once
13
14 #define _MSWSOCK_
15
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19
20 #include <mswsockdef.h>
21
22 #define SO_CONNDATA 0x7000
23 #define SO_CONNOPT 0x7001
24 #define SO_DISCDATA 0x7002
25 #define SO_DISCOPT 0x7003
26 #define SO_CONNDATALEN 0x7004
27 #define SO_CONNOPTLEN 0x7005
28 #define SO_DISCDATALEN 0x7006
29 #define SO_DISCOPTLEN 0x7007
30 #define SO_OPENTYPE 0x7008
31 #define SO_SYNCHRONOUS_ALERT 0x10
32 #define SO_SYNCHRONOUS_NONALERT 0x20
33 #define SO_MAXDG 0x7009
34 #define SO_MAXPATHDG 0x700A
35 #define SO_UPDATE_ACCEPT_CONTEXT 0x700B
36 #define SO_CONNECT_TIME 0x700C
37 #if(_WIN32_WINNT >= 0x0501)
38 #define SO_UPDATE_CONNECT_CONTEXT 0x7010
39 #endif
40
41 #define TCP_BSDURGENT 0x7000
42
43 #define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)
44
45 #if((_WIN32_WINNT < 0x0600) && (_WIN32_WINNT >= 0x0501))
46 #define SIO_SOCKET_CLOSE_NOTIFY _WSAIOW(IOC_VENDOR,13)
47 #endif
48
49 #define SIO_UDP_NETRESET _WSAIOW(IOC_VENDOR,15)
50
51 #define TF_DISCONNECT 1
52 #define TF_REUSE_SOCKET 2
53 #define TF_WRITE_BEHIND 4
54
55 #define TF_USE_DEFAULT_WORKER 0
56 #define TF_USE_SYSTEM_THREAD 16
57 #define TF_USE_KERNEL_APC 32
58
59 #if(_WIN32_WINNT >= 0x0501)
60 #define TP_ELEMENT_MEMORY 1
61 #define TP_ELEMENT_FILE 2
62 #define TP_ELEMENT_EOP 4
63 #endif
64
65 #define TP_DISCONNECT TF_DISCONNECT
66 #define TP_REUSE_SOCKET TF_REUSE_SOCKET
67 #define TP_USE_DEFAULT_WORKER TF_USE_DEFAULT_WORKER
68 #define TP_USE_SYSTEM_THREAD TF_USE_SYSTEM_THREAD
69 #define TP_USE_KERNEL_APC TF_USE_KERNEL_APC
70
71 #define WSAID_TRANSMITFILE \
72 {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
73
74 #define WSAID_ACCEPTEX \
75 {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
76
77 #define WSAID_GETACCEPTEXSOCKADDRS \
78 {0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
79
80 typedef struct _TRANSMIT_FILE_BUFFERS {
81 LPVOID Head;
82 DWORD HeadLength;
83 LPVOID Tail;
84 DWORD TailLength;
85 } TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, FAR *LPTRANSMIT_FILE_BUFFERS;
86
87 typedef BOOL
88 (PASCAL FAR *LPFN_TRANSMITFILE)(
89 IN SOCKET hSocket,
90 IN HANDLE hFile,
91 IN DWORD nNumberOfBytesToWrite,
92 IN DWORD nNumberOfBytesPerSend,
93 IN OUT LPOVERLAPPED lpOverlapped OPTIONAL,
94 IN LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers OPTIONAL,
95 IN DWORD dwReserved);
96
97 typedef BOOL
98 (PASCAL FAR *LPFN_ACCEPTEX)(
99 IN SOCKET sListenSocket,
100 IN SOCKET sAcceptSocket,
101 IN PVOID lpOutputBuffer,
102 IN DWORD dwReceiveDataLength,
103 IN DWORD dwLocalAddressLength,
104 IN DWORD dwRemoteAddressLength,
105 OUT LPDWORD lpdwBytesReceived,
106 IN OUT LPOVERLAPPED lpOverlapped);
107
108 typedef VOID
109 (PASCAL FAR *LPFN_GETACCEPTEXSOCKADDRS)(
110 IN PVOID lpOutputBuffer,
111 IN DWORD dwReceiveDataLength,
112 IN DWORD dwLocalAddressLength,
113 IN DWORD dwRemoteAddressLength,
114 OUT struct sockaddr **LocalSockaddr,
115 OUT LPINT LocalSockaddrLength,
116 OUT struct sockaddr **RemoteSockaddr,
117 OUT LPINT RemoteSockaddrLength);
118
119 #if(_WIN32_WINNT >= 0x0501)
120
121 typedef struct _TRANSMIT_PACKETS_ELEMENT {
122 ULONG dwElFlags;
123 ULONG cLength;
124 union {
125 struct {
126 LARGE_INTEGER nFileOffset;
127 HANDLE hFile;
128 };
129 PVOID pBuffer;
130 };
131 } TRANSMIT_PACKETS_ELEMENT, *PTRANSMIT_PACKETS_ELEMENT, FAR *LPTRANSMIT_PACKETS_ELEMENT;
132
133 typedef BOOL
134 (PASCAL FAR *LPFN_TRANSMITPACKETS)(
135 IN SOCKET hSocket,
136 IN LPTRANSMIT_PACKETS_ELEMENT lpPacketArray OPTIONAL,
137 IN DWORD nElementCount,
138 IN DWORD nSendSize,
139 IN OUT LPOVERLAPPED lpOverlapped OPTIONAL,
140 IN DWORD dwFlags);
141
142 #define WSAID_TRANSMITPACKETS \
143 {0xd9689da0,0x1f90,0x11d3,{0x99,0x71,0x00,0xc0,0x4f,0x68,0xc8,0x76}}
144
145 typedef BOOL
146 (PASCAL FAR *LPFN_CONNECTEX)(
147 IN SOCKET s,
148 IN const struct sockaddr FAR *name,
149 IN int namelen,
150 IN PVOID lpSendBuffer OPTIONAL,
151 IN DWORD dwSendDataLength,
152 OUT LPDWORD lpdwBytesSent,
153 IN OUT LPOVERLAPPED lpOverlapped);
154
155 #define WSAID_CONNECTEX \
156 {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}}
157
158 typedef BOOL
159 (PASCAL FAR *LPFN_DISCONNECTEX)(
160 IN SOCKET s,
161 IN OUT LPOVERLAPPED lpOverlapped OPTIONAL,
162 IN DWORD dwFlags,
163 IN DWORD dwReserved);
164
165 #define WSAID_DISCONNECTEX \
166 {0x7fda2e11,0x8630,0x436f,{0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}}
167
168 #define DE_REUSE_SOCKET TF_REUSE_SOCKET
169
170 #define NLA_NAMESPACE_GUID \
171 {0x6642243a,0x3ba8,0x4aa6,{0xba,0xa5,0x2e,0xb,0xd7,0x1f,0xdd,0x83}}
172
173 #define NLA_SERVICE_CLASS_GUID \
174 {0x37e515,0xb5c9,0x4a43,{0xba,0xda,0x8b,0x48,0xa8,0x7a,0xd2,0x39}}
175
176 #define NLA_ALLUSERS_NETWORK 0x00000001
177 #define NLA_FRIENDLY_NAME 0x00000002
178
179 typedef enum _NLA_BLOB_DATA_TYPE {
180 NLA_RAW_DATA = 0,
181 NLA_INTERFACE = 1,
182 NLA_802_1X_LOCATION = 2,
183 NLA_CONNECTIVITY = 3,
184 NLA_ICS = 4,
185 } NLA_BLOB_DATA_TYPE, *PNLA_BLOB_DATA_TYPE;
186
187 typedef enum _NLA_CONNECTIVITY_TYPE {
188 NLA_NETWORK_AD_HOC = 0,
189 NLA_NETWORK_MANAGED = 1,
190 NLA_NETWORK_UNMANAGED = 2,
191 NLA_NETWORK_UNKNOWN = 3,
192 } NLA_CONNECTIVITY_TYPE, *PNLA_CONNECTIVITY_TYPE;
193
194 typedef enum _NLA_INTERNET {
195 NLA_INTERNET_UNKNOWN = 0,
196 NLA_INTERNET_NO = 1,
197 NLA_INTERNET_YES = 2,
198 } NLA_INTERNET, *PNLA_INTERNET;
199
200 typedef struct _NLA_BLOB {
201 struct {
202 NLA_BLOB_DATA_TYPE type;
203 DWORD dwSize;
204 DWORD nextOffset;
205 } header;
206 union {
207 CHAR rawData[1];
208 struct {
209 DWORD dwType;
210 DWORD dwSpeed;
211 CHAR adapterName[1];
212 } interfaceData;
213 struct {
214 CHAR information[1];
215 } locationData;
216 struct {
217 NLA_CONNECTIVITY_TYPE type;
218 NLA_INTERNET internet;
219 } connectivity;
220 struct {
221 struct {
222 DWORD speed;
223 DWORD type;
224 DWORD state;
225 WCHAR machineName[256];
226 WCHAR sharedAdapterName[256];
227 } remote;
228 } ICS;
229 } data;
230 } NLA_BLOB, *PNLA_BLOB, * FAR LPNLA_BLOB;
231
232 typedef INT
233 (PASCAL FAR *LPFN_WSARECVMSG)(
234 IN SOCKET s,
235 IN OUT LPWSAMSG lpMsg,
236 OUT LPDWORD lpdwNumberOfBytesRecvd OPTIONAL,
237 IN OUT LPWSAOVERLAPPED lpOverlapped OPTIONAL,
238 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL);
239
240 #define WSAID_WSARECVMSG \
241 {0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}
242
243 #endif /* (_WIN32_WINNT >= 0x0501) */
244
245 #if(_WIN32_WINNT >= 0x0600)
246
247 #define SIO_BSP_HANDLE _WSAIOR(IOC_WS2,27)
248 #define SIO_BSP_HANDLE_SELECT _WSAIOR(IOC_WS2,28)
249 #define SIO_BSP_HANDLE_POLL _WSAIOR(IOC_WS2,29)
250
251 #define SIO_BASE_HANDLE _WSAIOR(IOC_WS2,34)
252
253 #define SIO_EXT_SELECT _WSAIORW(IOC_WS2,30)
254 #define SIO_EXT_POLL _WSAIORW(IOC_WS2,31)
255 #define SIO_EXT_SENDMSG _WSAIORW(IOC_WS2,32)
256
257 typedef struct {
258 int result;
259 ULONG fds;
260 INT timeout;
261 WSAPOLLFD fdArray[0];
262 } WSAPOLLDATA, *LPWSAPOLLDATA;
263
264 typedef struct {
265 LPWSAMSG lpMsg;
266 DWORD dwFlags;
267 LPDWORD lpNumberOfBytesSent;
268 LPWSAOVERLAPPED lpOverlapped;
269 LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine;
270 } WSASENDMSG, *LPWSASENDMSG;
271
272 typedef INT
273 (PASCAL FAR *LPFN_WSASENDMSG)(
274 IN SOCKET s,
275 IN LPWSAMSG lpMsg,
276 IN DWORD dwFlags,
277 OUT LPDWORD lpNumberOfBytesSent OPTIONAL,
278 IN OUT LPWSAOVERLAPPED lpOverlapped OPTIONAL,
279 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL);
280
281 #define WSAID_WSASENDMSG
282 {0xa441e712,0x754f,0x43ca,{0x84,0xa7,0x0d,0xee,0x44,0xcf,0x60,0x6d}}
283
284 typedef INT
285 (WSAAPI *LPFN_WSAPOLL)(
286 IN OUT LPWSAPOLLFD fdarray,
287 IN ULONG nfds,
288 IN INT timeout);
289
290 #define WSAID_WSAPOLL \
291 {0x18C76F85,0xDC66,0x4964,{0x97,0x2E,0x23,0xC2,0x72,0x38,0x31,0x2B}}
292
293 #endif /* (_WIN32_WINNT >= 0x0600) */
294
295 #if(_WIN32_WINNT < 0x0600)
296 int
297 PASCAL
298 FAR
299 WSARecvEx(
300 IN SOCKET s,
301 OUT char FAR *buf,
302 IN int len,
303 IN OUT int FAR *flags);
304 #else
305 INT
306 PASCAL
307 FAR
308 WSARecvEx(
309 IN SOCKET s,
310 OUT CHAR FAR *buf,
311 IN INT len,
312 IN OUT INT FAR *flags);
313 #endif /* (_WIN32_WINNT < 0x0600) */
314
315 BOOL
316 PASCAL
317 FAR
318 TransmitFile(
319 IN SOCKET hSocket,
320 IN HANDLE hFile,
321 IN DWORD nNumberOfBytesToWrite,
322 IN DWORD nNumberOfBytesPerSend,
323 IN OUT LPOVERLAPPED lpOverlapped OPTIONAL,
324 IN LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers OPTIONAL,
325 IN DWORD dwReserved);
326
327 BOOL
328 PASCAL
329 FAR
330 AcceptEx(
331 IN SOCKET sListenSocket,
332 IN SOCKET sAcceptSocket,
333 OUT PVOID lpOutputBuffer,
334 IN DWORD dwReceiveDataLength,
335 IN DWORD dwLocalAddressLength,
336 IN DWORD dwRemoteAddressLength,
337 OUT LPDWORD lpdwBytesReceived,
338 IN OUT LPOVERLAPPED lpOverlapped);
339
340 VOID
341 PASCAL
342 FAR
343 GetAcceptExSockaddrs(
344 IN PVOID lpOutputBuffer,
345 IN DWORD dwReceiveDataLength,
346 IN DWORD dwLocalAddressLength,
347 IN DWORD dwRemoteAddressLength,
348 OUT struct sockaddr **LocalSockaddr,
349 OUT LPINT LocalSockaddrLength,
350 OUT struct sockaddr **RemoteSockaddr,
351 OUT LPINT RemoteSockaddrLength);
352
353 #ifdef __cplusplus
354 }
355 #endif