Do a dummy BitBlt at the end of a MaskBitBlt to inform the driver that
[reactos.git] / reactos / include / ws2spi.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Winsock 2 DLL
4 * FILE: include/ws2spi.h
5 * PURPOSE: Header file for the WinSock 2 DLL
6 * and WinSock 2 Service Providers
7 */
8 #ifndef __WS2SPI_H
9 #define __WS2SPI_H
10
11 #include <winsock2.h>
12
13 #ifdef __cplusplus
14 extern "C"
15 {
16 #endif /* __cplusplus */
17
18 #define WSPAPI WSAAPI
19
20
21 #define WSPDESCRIPTION_LEN 255
22
23 typedef struct WSPData {
24 WORD wVersion;
25 WORD wHighVersion;
26 WCHAR szDescription[WSPDESCRIPTION_LEN + 1];
27 } WSPDATA, FAR * LPWSPDATA;
28
29
30 typedef struct _WSATHREADID {
31 HANDLE ThreadHandle;
32 DWORD Reserved;
33 } WSATHREADID, FAR* LPWSATHREADID;
34
35
36 typedef BOOL (CALLBACK FAR* LPBLOCKINGCALLBACK)(
37 DWORD dwContext);
38
39 typedef VOID (CALLBACK FAR* LPWSAUSERAPC)(
40 DWORD dwContext);
41
42
43 /* Prototypes for service provider procedure table */
44
45 typedef SOCKET (WSPAPI * LPWSPACCEPT)(
46 IN SOCKET s,
47 OUT LPSOCKADDR addr,
48 IN OUT LPINT addrlen,
49 IN LPCONDITIONPROC lpfnCondition,
50 IN DWORD dwCallbackData,
51 OUT LPINT lpErrno);
52
53 typedef INT (WSPAPI * LPWSPADDRESSTOSTRING)(
54 IN LPSOCKADDR lpsaAddress,
55 IN DWORD dwAddressLength,
56 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
57 OUT LPWSTR lpszAddressString,
58 IN OUT LPDWORD lpdwAddressStringLength,
59 OUT LPINT lpErrno);
60
61 typedef INT (WSPAPI * LPWSPASYNCSELECT)(
62 IN SOCKET s,
63 IN HWND hWnd,
64 IN UINT wMsg,
65 IN LONG lEvent,
66 OUT LPINT lpErrno);
67
68 typedef INT (WSPAPI * LPWSPBIND)(
69 IN SOCKET s,
70 IN CONST LPSOCKADDR name,
71 IN INT namelen,
72 OUT LPINT lpErrno);
73
74 typedef INT (WSPAPI * LPWSPCANCELBLOCKINGCALL)(
75 OUT LPINT lpErrno);
76
77 typedef INT (WSPAPI * LPWSPCLEANUP)(
78 OUT LPINT lpErrno);
79
80 typedef INT (WSPAPI * LPWSPCLOSESOCKET)(
81 IN SOCKET s,
82 OUT LPINT lpErrno);
83
84 typedef INT (WSPAPI * LPWSPCONNECT)(
85 IN SOCKET s,
86 IN CONST LPSOCKADDR name,
87 IN INT namelen,
88 IN LPWSABUF lpCallerData,
89 OUT LPWSABUF lpCalleeData,
90 IN LPQOS lpSQOS,
91 IN LPQOS lpGQOS,
92 OUT LPINT lpErrno);
93
94 typedef INT (WSPAPI * LPWSPDUPLICATESOCKET)(
95 IN SOCKET s,
96 IN DWORD dwProcessId,
97 OUT LPWSAPROTOCOL_INFOW lpProtocolInfo,
98 OUT LPINT lpErrno);
99
100 typedef INT (WSPAPI * LPWSPENUMNETWORKEVENTS)(
101 IN SOCKET s,
102 IN WSAEVENT hEventObject,
103 OUT LPWSANETWORKEVENTS lpNetworkEvents,
104 OUT LPINT lpErrno);
105
106 typedef INT (WSPAPI * LPWSPEVENTSELECT)(
107 IN SOCKET s,
108 IN WSAEVENT hEventObject,
109 IN LONG lNetworkEvents,
110 OUT LPINT lpErrno);
111
112 typedef BOOL (WSPAPI * LPWSPGETOVERLAPPEDRESULT)(
113 IN SOCKET s,
114 IN LPWSAOVERLAPPED lpOverlapped,
115 OUT LPDWORD lpcbTransfer,
116 IN BOOL fWait,
117 OUT LPDWORD lpdwFlags,
118 OUT LPINT lpErrno);
119
120 typedef INT (WSPAPI * LPWSPGETPEERNAME)(
121 IN SOCKET s,
122 OUT LPSOCKADDR name,
123 IN OUT LPINT namelen,
124 OUT LPINT lpErrno);
125
126 typedef BOOL (WSPAPI * LPWSPGETQOSBYNAME)(
127 IN SOCKET s,
128 IN OUT LPWSABUF lpQOSName,
129 OUT LPQOS lpQOS,
130 OUT LPINT lpErrno);
131
132 typedef INT (WSPAPI * LPWSPGETSOCKNAME)(
133 IN SOCKET s,
134 OUT LPSOCKADDR name,
135 IN OUT LPINT namelen,
136 OUT LPINT lpErrno);
137
138 typedef INT (WSPAPI * LPWSPGETSOCKOPT)(
139 IN SOCKET s,
140 IN INT level,
141 IN INT optname,
142 OUT CHAR FAR* optval,
143 IN OUT LPINT optlen,
144 OUT LPINT lpErrno);
145
146 typedef INT (WSPAPI * LPWSPIOCTL)(
147 IN SOCKET s,
148 IN DWORD dwIoControlCode,
149 IN LPVOID lpvInBuffer,
150 IN DWORD cbInBuffer,
151 OUT LPVOID lpvOutBuffer,
152 IN DWORD cbOutBuffer,
153 OUT LPDWORD lpcbBytesReturned,
154 IN LPWSAOVERLAPPED lpOverlapped,
155 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
156 IN LPWSATHREADID lpThreadId,
157 OUT LPINT lpErrno);
158
159 typedef SOCKET (WSPAPI * LPWSPJOINLEAF)(
160 IN SOCKET s,
161 IN CONST LPSOCKADDR name,
162 IN INT namelen,
163 IN LPWSABUF lpCallerData,
164 OUT LPWSABUF lpCalleeData,
165 IN LPQOS lpSQOS,
166 IN LPQOS lpGQOS,
167 IN DWORD dwFlags,
168 OUT LPINT lpErrno);
169
170 typedef INT (WSPAPI * LPWSPLISTEN)(
171 IN SOCKET s,
172 IN INT backlog,
173 OUT LPINT lpErrno);
174
175 typedef INT (WSPAPI * LPWSPRECV)(
176 IN SOCKET s,
177 IN OUT LPWSABUF lpBuffers,
178 IN DWORD dwBufferCount,
179 OUT LPDWORD lpNumberOfBytesRecvd,
180 IN OUT LPDWORD lpFlags,
181 IN LPWSAOVERLAPPED lpOverlapped,
182 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
183 IN LPWSATHREADID lpThreadId,
184 OUT LPINT lpErrno);
185
186 typedef INT (WSPAPI * LPWSPRECVDISCONNECT)(
187 IN SOCKET s,
188 OUT LPWSABUF lpInboundDisconnectData,
189 OUT LPINT lpErrno);
190
191 typedef INT (WSPAPI * LPWSPRECVFROM)(
192 IN SOCKET s,
193 IN OUT LPWSABUF lpBuffers,
194 IN DWORD dwBufferCount,
195 OUT LPDWORD lpNumberOfBytesRecvd,
196 IN OUT LPDWORD lpFlags,
197 OUT LPSOCKADDR lpFrom,
198 IN OUT LPINT lpFromlen,
199 IN LPWSAOVERLAPPED lpOverlapped,
200 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
201 IN LPWSATHREADID lpThreadId,
202 OUT LPINT lpErrno);
203
204 typedef INT (WSPAPI * LPWSPSELECT)(
205 IN INT nfds,
206 IN OUT LPFD_SET readfds,
207 IN OUT LPFD_SET writefds,
208 IN OUT LPFD_SET exceptfds,
209 IN CONST LPTIMEVAL timeout,
210 OUT LPINT lpErrno);
211
212 typedef INT (WSPAPI * LPWSPSEND)(
213 IN SOCKET s,
214 IN LPWSABUF lpBuffers,
215 IN DWORD dwBufferCount,
216 OUT LPDWORD lpNumberOfBytesSent,
217 IN DWORD dwFlags,
218 IN LPWSAOVERLAPPED lpOverlapped,
219 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
220 IN LPWSATHREADID lpThreadId,
221 OUT LPINT lpErrno);
222
223 typedef INT (WSPAPI * LPWSPSENDDISCONNECT)(
224 IN SOCKET s,
225 IN LPWSABUF lpOutboundDisconnectData,
226 OUT LPINT lpErrno);
227
228 typedef INT (WSPAPI * LPWSPSENDTO)(
229 IN SOCKET s,
230 IN LPWSABUF lpBuffers,
231 IN DWORD dwBufferCount,
232 OUT LPDWORD lpNumberOfBytesSent,
233 IN DWORD dwFlags,
234 IN CONST LPSOCKADDR lpTo,
235 IN INT iTolen,
236 IN LPWSAOVERLAPPED lpOverlapped,
237 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
238 IN LPWSATHREADID lpThreadId,
239 OUT LPINT lpErrno);
240
241 typedef INT (WSPAPI * LPWSPSETSOCKOPT)(
242 IN SOCKET s,
243 IN INT level,
244 IN INT optname,
245 IN CONST CHAR FAR* optval,
246 IN INT optlen,
247 OUT LPINT lpErrno);
248
249 typedef INT (WSPAPI * LPWSPSHUTDOWN)(
250 IN SOCKET s,
251 IN INT how,
252 OUT LPINT lpErrno);
253
254 typedef SOCKET (WSPAPI * LPWSPSOCKET)(
255 IN INT af,
256 IN INT type,
257 IN INT protocol,
258 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
259 IN GROUP g,
260 IN DWORD dwFlags,
261 OUT LPINT lpErrno);
262
263 typedef INT (WSPAPI * LPWSPSTRINGTOADDRESS)(
264 IN LPWSTR AddressString,
265 IN INT AddressFamily,
266 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
267 OUT LPSOCKADDR lpAddress,
268 IN OUT LPINT lpAddressLength,
269 OUT LPINT lpErrno);
270
271
272 /* Service provider procedure table */
273 typedef struct _WSPPROC_TABLE {
274 LPWSPACCEPT lpWSPAccept;
275 LPWSPADDRESSTOSTRING lpWSPAddressToString;
276 LPWSPASYNCSELECT lpWSPAsyncSelect;
277 LPWSPBIND lpWSPBind;
278 LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall;
279 LPWSPCLEANUP lpWSPCleanup;
280 LPWSPCLOSESOCKET lpWSPCloseSocket;
281 LPWSPCONNECT lpWSPConnect;
282 LPWSPDUPLICATESOCKET lpWSPDuplicateSocket;
283 LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents;
284 LPWSPEVENTSELECT lpWSPEventSelect;
285 LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult;
286 LPWSPGETPEERNAME lpWSPGetPeerName;
287 LPWSPGETSOCKNAME lpWSPGetSockName;
288 LPWSPGETSOCKOPT lpWSPGetSockOpt;
289 LPWSPGETQOSBYNAME lpWSPGetQOSByName;
290 LPWSPIOCTL lpWSPIoctl;
291 LPWSPJOINLEAF lpWSPJoinLeaf;
292 LPWSPLISTEN lpWSPListen;
293 LPWSPRECV lpWSPRecv;
294 LPWSPRECVDISCONNECT lpWSPRecvDisconnect;
295 LPWSPRECVFROM lpWSPRecvFrom;
296 LPWSPSELECT lpWSPSelect;
297 LPWSPSEND lpWSPSend;
298 LPWSPSENDDISCONNECT lpWSPSendDisconnect;
299 LPWSPSENDTO lpWSPSendTo;
300 LPWSPSETSOCKOPT lpWSPSetSockOpt;
301 LPWSPSHUTDOWN lpWSPShutdown;
302 LPWSPSOCKET lpWSPSocket;
303 LPWSPSTRINGTOADDRESS lpWSPStringToAddress;
304 } WSPPROC_TABLE, FAR* LPWSPPROC_TABLE;
305
306
307 /* Prototypes for service provider upcall procedure table */
308
309 typedef BOOL (WSPAPI * LPWPUCLOSEEVENT)(
310 IN WSAEVENT hEvent,
311 OUT LPINT lpErrno);
312
313 typedef INT (WSPAPI * LPWPUCLOSESOCKETHANDLE)(
314 IN SOCKET s,
315 OUT LPINT lpErrno);
316
317 typedef INT (WSPAPI * LPWPUCLOSETHREAD)(
318 IN LPWSATHREADID lpThreadId,
319 OUT LPINT lpErrno);
320
321 typedef WSAEVENT (WSPAPI * LPWPUCREATEEVENT)(
322 OUT LPINT lpErrno);
323
324 typedef SOCKET (WSPAPI * LPWPUCREATESOCKETHANDLE)(
325 IN DWORD dwCatalogEntryId,
326 IN DWORD dwContext,
327 OUT LPINT lpErrno);
328
329 typedef SOCKET (WSPAPI * LPWPUFDISSET)(
330 IN SOCKET s,
331 IN LPFD_SET set);
332
333 typedef INT (WSPAPI * LPWPUGETPROVIDERPATH)(
334 IN LPGUID lpProviderId,
335 OUT LPWSTR lpszProviderDllPath,
336 IN OUT LPINT lpProviderDllPathLen,
337 OUT LPINT lpErrno);
338
339 typedef SOCKET (WSPAPI * LPWPUMODIFYIFSHANDLE)(
340 IN DWORD dwCatalogEntryId,
341 IN SOCKET ProposedHandle,
342 OUT LPINT lpErrno);
343
344 typedef INT (WSPAPI * LPWPUOPENCURRENTTHREAD)(
345 OUT LPWSATHREADID lpThreadId,
346 OUT LPINT lpErrno);
347
348 typedef BOOL (WSPAPI * LPWPUPOSTMESSAGE)(
349 IN HWND hWnd,
350 IN UINT Msg,
351 IN WPARAM wParam,
352 IN LPARAM lParam);
353
354 typedef INT (WSPAPI * LPWPUQUERYBLOCKINGCALLBACK)(
355 IN DWORD dwCatalogEntryId,
356 OUT LPBLOCKINGCALLBACK FAR* lplpfnCallback,
357 OUT LPDWORD lpdwContext,
358 OUT LPINT lpErrno);
359
360 typedef INT (WSPAPI * LPWPUQUERYSOCKETHANDLECONTEXT)(
361 IN SOCKET s,
362 OUT LPDWORD lpContext,
363 OUT LPINT lpErrno);
364
365 typedef INT (WSPAPI * LPWPUQUEUEAPC)(
366 IN LPWSATHREADID lpThreadId,
367 IN LPWSAUSERAPC lpfnUserApc,
368 IN DWORD dwContext,
369 OUT LPINT lpErrno);
370
371 typedef BOOL (WSPAPI * LPWPURESETEVENT)(
372 IN WSAEVENT hEvent,
373 OUT LPINT lpErrno);
374
375 typedef BOOL (WSPAPI * LPWPUSETEVENT)(
376 IN WSAEVENT hEvent,
377 OUT LPINT lpErrno);
378
379
380 /* Available only directly from the DLL */
381
382 typedef INT (WSPAPI * LPWPUCOMPLETEOVERLAPPEDREQUEST)(
383 SOCKET s,
384 LPWSAOVERLAPPED lpOverlapped,
385 DWORD dwError,
386 DWORD cbTransferred,
387 LPINT lpErrno);
388
389
390 /* Service Provider upcall table */
391
392 typedef struct _WSPUPCALLTABLE {
393 LPWPUCLOSEEVENT lpWPUCloseEvent;
394 LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
395 LPWPUCREATEEVENT lpWPUCreateEvent;
396 LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
397 LPWPUFDISSET lpWPUFDIsSet;
398 LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
399 LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
400 LPWPUPOSTMESSAGE lpWPUPostMessage;
401 LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
402 LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
403 LPWPUQUEUEAPC lpWPUQueueApc;
404 LPWPURESETEVENT lpWPUResetEvent;
405 LPWPUSETEVENT lpWPUSetEvent;
406 LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
407 LPWPUCLOSETHREAD lpWPUCloseThread;
408 } WSPUPCALLTABLE, FAR* LPWSPUPCALLTABLE;
409
410
411 typedef INT (WSPAPI * LPWSPSTARTUP)(
412 IN WORD wVersionRequested,
413 OUT LPWSPDATA lpWSPData,
414 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
415 IN WSPUPCALLTABLE UpcallTable,
416 OUT LPWSPPROC_TABLE lpProcTable);
417
418
419 /* Prototypes for service provider namespace procedure table */
420
421 typedef INT (WSPAPI * LPNSPCLEANUP)(
422 IN LPGUID lpProviderId);
423
424 typedef INT (WSPAPI * LPNSPGETSERVICECLASSINFO)(
425 IN LPGUID lpProviderId,
426 IN OUT LPDWORD lpdwBufSize,
427 IN OUT LPWSASERVICECLASSINFOW lpServiceClassInfo);
428
429 typedef INT (WSPAPI * LPNSPINSTALLSERVICECLASS)(
430 IN LPGUID lpProviderId,
431 IN LPWSASERVICECLASSINFOW lpServiceClassInfo);
432
433 typedef INT (WSPAPI * LPNSPLOOKUPSERVICEBEGIN)(
434 IN LPGUID lpProviderId,
435 IN LPWSAQUERYSETW lpqsRestrictions,
436 IN LPWSASERVICECLASSINFOW lpServiceClassInfo,
437 IN DWORD dwControlFlags,
438 OUT LPHANDLE lphLookup);
439
440 typedef INT (WSPAPI * LPNSPLOOKUPSERVICEEND)(
441 IN HANDLE hLookup);
442
443 typedef INT (WSPAPI * LPNSPLOOKUPSERVICENEXT)(
444 IN HANDLE hLookup,
445 IN DWORD dwControlFlags,
446 IN OUT LPDWORD lpdwBufferLength,
447 OUT LPWSAQUERYSETW lpqsResults);
448
449 typedef INT (WSPAPI * LPNSPREMOVESERVICECLASS)(
450 IN LPGUID lpProviderId,
451 IN LPGUID lpServiceClassId);
452
453 typedef INT (WSPAPI * LPNSPSETSERVICE)(
454 IN LPGUID lpProviderId,
455 IN LPWSASERVICECLASSINFOW lpServiceClassInfo,
456 IN LPWSAQUERYSETW lpqsRegInfo,
457 IN WSAESETSERVICEOP essOperation,
458 IN DWORD dwControlFlags);
459
460
461 typedef struct _NSP_ROUTINE {
462 DWORD cbSize;
463 DWORD dwMajorVersion;
464 DWORD dwMinorVersion;
465 LPNSPCLEANUP NSPCleanup;
466 LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin;
467 LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext;
468 LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd;
469 LPNSPSETSERVICE NSPSetService;
470 LPNSPINSTALLSERVICECLASS NSPInstallServiceClass;
471 LPNSPREMOVESERVICECLASS NSPRemoveServiceClass;
472 LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo;
473 } NSP_ROUTINE, *PNSP_ROUTINE, *LPNSP_ROUTINE;
474
475
476 INT
477 WSPAPI
478 NSPStartup(
479 IN LPGUID lpProviderId,
480 OUT LPNSP_ROUTINE lpNspRoutines);
481
482
483 /* WinSock 2 DLL function prototypes */
484
485 INT
486 WSPAPI
487 WPUCompleteOverlappedRequest(
488 IN SOCKET s,
489 IN LPWSAOVERLAPPED lpOverlapped,
490 IN DWORD dwError,
491 IN DWORD cbTransferred,
492 OUT LPINT lpErrno);
493
494 INT
495 WSPAPI
496 WSPStartup(
497 IN WORD wVersionRequested,
498 OUT LPWSPDATA lpWSPData,
499 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
500 IN WSPUPCALLTABLE UpcallTable,
501 OUT LPWSPPROC_TABLE lpProcTable);
502
503 INT
504 WSPAPI
505 WSCDeinstallProvider(
506 IN LPGUID lpProviderId,
507 OUT LPINT lpErrno);
508
509 INT
510 WSPAPI
511 WSCEnumProtocols(
512 IN LPINT lpiProtocols,
513 OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer,
514 IN OUT LPDWORD lpdwBufferLength,
515 OUT LPINT lpErrno);
516
517 INT
518 WSPAPI
519 WSCGetProviderPath(
520 IN LPGUID lpProviderId,
521 OUT LPWSTR lpszProviderDllPath,
522 IN OUT LPINT lpProviderDllPathLen,
523 OUT LPINT lpErrno);
524
525 INT
526 WSPAPI
527 WSCInstallProvider(
528 IN CONST LPGUID lpProviderId,
529 IN CONST LPWSTR lpszProviderDllPath,
530 IN CONST LPWSAPROTOCOL_INFOW lpProtocolInfoList,
531 IN DWORD dwNumberOfEntries,
532 OUT LPINT lpErrno);
533
534 INT
535 WSPAPI
536 WSCEnableNSProvider(
537 IN LPGUID lpProviderId,
538 IN BOOL fEnable);
539
540 INT
541 WSPAPI
542 WSCInstallNameSpace(
543 IN LPWSTR lpszIdentifier,
544 IN LPWSTR lpszPathName,
545 IN DWORD dwNameSpace,
546 IN DWORD dwVersion,
547 IN LPGUID lpProviderId);
548
549 INT
550 WSPAPI
551 WSCUnInstallNameSpace(
552 IN LPGUID lpProviderId);
553
554 INT
555 WSPAPI
556 WSCWriteProviderOrder(
557 IN LPDWORD lpwdCatalogEntryId,
558 IN DWORD dwNumberOfEntries);
559
560 #ifdef __cplusplus
561 };
562 #endif /* __cplusplus */
563
564 #endif /* __WS2SPI_H */
565
566 /* EOF */