6fb353dde4556d921bb2c5aa1e87ad709f191b8c
[reactos.git] / sdk / include / psdk / ws2spi.h
1 /*
2 * ws2spi.h
3 *
4 * Winsock 2 Service Provider interface.
5 *
6 *
7 * THIS SOFTWARE IS NOT COPYRIGHTED
8 *
9 * This source code is offered for use in the public domain. You may
10 * use, modify or distribute it freely.
11 *
12 * This code is distributed in the hope that it will be useful but
13 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
14 * DISCLAIMED. This includes but is not limited to warranties of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16 *
17 */
18
19 #pragma once
20
21 #define _WS2SPI_H
22
23 #ifndef _WINSOCK2API_
24 #include <winsock2.h>
25 #endif
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 #if !defined(_WIN64)
32 #include <pshpack4.h>
33 #endif
34
35 #define WSPDESCRIPTION_LEN 255
36
37 #define WSS_OPERATION_IN_PROGRESS 0x00000103L
38
39 #define WSPAPI WSAAPI
40
41 typedef struct _WSATHREADID {
42 HANDLE ThreadHandle;
43 DWORD_PTR Reserved;
44 } WSATHREADID, FAR *LPWSATHREADID;
45
46 typedef struct WSPData {
47 WORD wVersion;
48 WORD wHighVersion;
49 WCHAR szDescription[WSPDESCRIPTION_LEN+1];
50 } WSPDATA, FAR *LPWSPDATA;
51
52 typedef BOOL
53 (CALLBACK FAR *LPBLOCKINGCALLBACK)(
54 DWORD_PTR dwContext);
55
56 typedef
57 _Must_inspect_result_
58 SOCKET
59 (WSPAPI *LPWSPACCEPT)(
60 _In_ SOCKET s,
61 _Out_writes_bytes_to_opt_(*addrlen, *addrlen) struct sockaddr FAR *addr,
62 _Inout_opt_ LPINT addrlen,
63 _In_opt_ LPCONDITIONPROC lpfnCondition,
64 _In_opt_ DWORD_PTR dwCallbackData,
65 _Out_ LPINT lpErrno);
66
67 typedef VOID
68 (CALLBACK FAR *LPWSAUSERAPC)(
69 DWORD_PTR dwContext);
70
71 typedef INT
72 (WSPAPI *LPWSPADDRESSTOSTRING)(
73 _In_reads_bytes_(dwAddressLength) LPSOCKADDR lpsaAddress,
74 _In_ DWORD dwAddressLength,
75 _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
76 _Out_writes_to_(*lpdwAddressStringLength, *lpdwAddressStringLength) LPWSTR lpszAddressString,
77 _Inout_ LPDWORD lpdwAddressStringLength,
78 _Out_ LPINT lpErrno);
79
80 typedef int
81 (WSPAPI *LPWSPASYNCSELECT)(
82 _In_ SOCKET s,
83 _In_ HWND hWnd,
84 _In_ unsigned int wMsg,
85 _In_ long lEvent,
86 _Out_ LPINT lpErrno);
87
88 typedef int
89 (WSPAPI *LPWSPBIND)(
90 _In_ SOCKET s,
91 _In_reads_bytes_(namelen) const struct sockaddr FAR *name,
92 _In_ int namelen,
93 _Out_ LPINT lpErrno);
94
95 typedef int
96 (WSPAPI *LPWSPCANCELBLOCKINGCALL)(
97 _Out_ LPINT lpErrno);
98
99 typedef int
100 (WSPAPI *LPWSPCLEANUP)(
101 _Out_ LPINT lpErrno);
102
103 typedef int
104 (WSPAPI *LPWSPCLOSESOCKET)(
105 _In_ SOCKET s,
106 _Out_ LPINT lpErrno);
107
108 typedef int
109 (WSPAPI *LPWSPCONNECT)(
110 _In_ SOCKET s,
111 _In_reads_bytes_(namelen) const struct sockaddr FAR *name,
112 _In_ int namelen,
113 _In_opt_ LPWSABUF lpCallerData,
114 _Out_opt_ LPWSABUF lpCalleeData,
115 _In_opt_ LPQOS lpSQOS,
116 _In_opt_ LPQOS lpGQOS,
117 _Out_ LPINT lpErrno);
118
119 typedef int
120 (WSPAPI *LPWSPDUPLICATESOCKET)(
121 _In_ SOCKET s,
122 _In_ DWORD dwProcessId,
123 _Out_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
124 _Out_ LPINT lpErrno);
125
126 typedef int
127 (WSPAPI *LPWSPENUMNETWORKEVENTS)(
128 _In_ SOCKET s,
129 _In_ WSAEVENT hEventObject,
130 _Out_ LPWSANETWORKEVENTS lpNetworkEvents,
131 _Out_ LPINT lpErrno);
132
133 typedef int
134 (WSPAPI *LPWSPEVENTSELECT)(
135 _In_ SOCKET s,
136 _In_opt_ WSAEVENT hEventObject,
137 _In_ long lNetworkEvents,
138 _Out_ LPINT lpErrno);
139
140 typedef BOOL
141 (WSPAPI *LPWSPGETOVERLAPPEDRESULT)(
142 _In_ SOCKET s,
143 _In_ LPWSAOVERLAPPED lpOverlapped,
144 _Out_ LPDWORD lpcbTransfer,
145 _In_ BOOL fWait,
146 _Out_ LPDWORD lpdwFlags,
147 _Out_ LPINT lpErrno);
148
149 typedef int
150 (WSPAPI *LPWSPGETPEERNAME)(
151 _In_ SOCKET s,
152 _Out_writes_bytes_to_(*namelen, *namelen) struct sockaddr FAR *name,
153 _Inout_ LPINT namelen,
154 _Out_ LPINT lpErrno);
155
156 typedef int
157 (WSPAPI *LPWSPGETSOCKNAME)(
158 _In_ SOCKET s,
159 _Out_writes_bytes_to_(*namelen, *namelen) struct sockaddr FAR *name,
160 _Inout_ LPINT namelen,
161 _Out_ LPINT lpErrno);
162
163 typedef int
164 (WSPAPI *LPWSPGETSOCKOPT)(
165 _In_ SOCKET s,
166 _In_ int level,
167 _In_ int optname,
168 _Out_writes_bytes_(*optlen) char FAR *optval,
169 _Inout_ LPINT optlen,
170 _Out_ LPINT lpErrno);
171
172 typedef BOOL
173 (WSPAPI *LPWSPGETQOSBYNAME)(
174 _In_ SOCKET s,
175 _In_ LPWSABUF lpQOSName,
176 _Out_ LPQOS lpQOS,
177 _Out_ LPINT lpErrno);
178
179 typedef int
180 (WSPAPI *LPWSPIOCTL)(
181 _In_ SOCKET s,
182 _In_ DWORD dwIoControlCode,
183 _In_reads_bytes_opt_(cbInBuffer) LPVOID lpvInBuffer,
184 _In_ DWORD cbInBuffer,
185 _Out_writes_bytes_to_opt_(cbOutBuffer, *lpcbBytesReturned) LPVOID lpvOutBuffer,
186 _In_ DWORD cbOutBuffer,
187 _Out_ LPDWORD lpcbBytesReturned,
188 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
189 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
190 _In_opt_ LPWSATHREADID lpThreadId,
191 _Out_ LPINT lpErrno);
192
193 typedef SOCKET
194 (WSPAPI *LPWSPJOINLEAF)(
195 _In_ SOCKET s,
196 _In_reads_bytes_(namelen) const struct sockaddr FAR *name,
197 _In_ int namelen,
198 _In_opt_ LPWSABUF lpCallerData,
199 _Out_opt_ LPWSABUF lpCalleeData,
200 _In_opt_ LPQOS lpSQOS,
201 _In_opt_ LPQOS lpGQOS,
202 _In_ DWORD dwFlags,
203 _Out_ LPINT lpErrno);
204
205 typedef int
206 (WSPAPI *LPWSPLISTEN)(
207 _In_ SOCKET s,
208 _In_ int backlog,
209 _Out_ LPINT lpErrno);
210
211 typedef int
212 (WSPAPI *LPWSPRECV)(
213 _In_ SOCKET s,
214 _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
215 _In_ DWORD dwBufferCount,
216 _Out_opt_ LPDWORD lpNumberOfBytesRecvd,
217 _Inout_ LPDWORD lpFlags,
218 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
219 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
220 _In_opt_ LPWSATHREADID lpThreadId,
221 _In_ LPINT lpErrno);
222
223 typedef int
224 (WSPAPI *LPWSPRECVDISCONNECT)(
225 _In_ SOCKET s,
226 _In_opt_ LPWSABUF lpInboundDisconnectData,
227 _Out_ LPINT lpErrno);
228
229 typedef int
230 (WSPAPI *LPWSPRECVFROM)(
231 _In_ SOCKET s,
232 _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
233 _In_ DWORD dwBufferCount,
234 _Out_opt_ LPDWORD lpNumberOfBytesRecvd,
235 _Inout_ LPDWORD lpFlags,
236 _Out_writes_bytes_to_opt_(*lpFromlen, *lpFromlen) struct sockaddr FAR *lpFrom,
237 _Inout_opt_ LPINT lpFromlen,
238 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
239 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
240 _In_opt_ LPWSATHREADID lpThreadId,
241 _Out_ LPINT lpErrno);
242
243 typedef int
244 (WSPAPI *LPWSPSELECT)(
245 _In_ int nfds,
246 _Inout_opt_ fd_set FAR *readfds,
247 _Inout_opt_ fd_set FAR *writefds,
248 _Inout_opt_ fd_set FAR *exceptfds,
249 _In_opt_ const struct timeval FAR *timeout,
250 _Out_ LPINT lpErrno);
251
252 typedef int
253 (WSPAPI *LPWSPSEND)(
254 _In_ SOCKET s,
255 _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
256 _In_ DWORD dwBufferCount,
257 _Out_opt_ LPDWORD lpNumberOfBytesSent,
258 _In_ DWORD dwFlags,
259 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
260 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
261 _In_opt_ LPWSATHREADID lpThreadId,
262 _Out_ LPINT lpErrno);
263
264 typedef int
265 (WSPAPI *LPWSPSENDDISCONNECT)(
266 _In_ SOCKET s,
267 _In_opt_ LPWSABUF lpOutboundDisconnectData,
268 _Out_ LPINT lpErrno);
269
270 typedef int
271 (WSPAPI *LPWSPSENDTO)(
272 _In_ SOCKET s,
273 _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
274 _In_ DWORD dwBufferCount,
275 _Out_opt_ LPDWORD lpNumberOfBytesSent,
276 _In_ DWORD dwFlags,
277 _In_reads_bytes_opt_(iTolen) const struct sockaddr FAR *lpTo,
278 _In_ int iTolen,
279 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
280 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
281 _In_opt_ LPWSATHREADID lpThreadId,
282 _Out_ LPINT lpErrno);
283
284 typedef int
285 (WSPAPI *LPWSPSETSOCKOPT)(
286 _In_ SOCKET s,
287 _In_ int level,
288 _In_ int optname,
289 _In_reads_bytes_opt_(optlen) const char FAR *optval,
290 _In_ int optlen,
291 _Out_ LPINT lpErrno);
292
293 typedef int
294 (WSPAPI *LPWSPSHUTDOWN)(
295 _In_ SOCKET s,
296 _In_ int how,
297 _Out_ LPINT lpErrno);
298
299 typedef
300 _Must_inspect_result_
301 SOCKET
302 (WSPAPI *LPWSPSOCKET)(
303 _In_ int af,
304 _In_ int type,
305 _In_ int protocol,
306 _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
307 _In_ GROUP g,
308 _In_ DWORD dwFlags,
309 _Out_ LPINT lpErrno);
310
311 typedef INT
312 (WSPAPI *LPWSPSTRINGTOADDRESS)(
313 _In_ LPWSTR AddressString,
314 _In_ INT AddressFamily,
315 _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
316 _Out_writes_bytes_to_(*lpAddressLength, *lpAddressLength) LPSOCKADDR lpAddress,
317 _Inout_ LPINT lpAddressLength,
318 _Out_ LPINT lpErrno);
319
320 typedef BOOL
321 (WSPAPI *LPWPUCLOSEEVENT)(
322 _In_ WSAEVENT hEvent,
323 _Out_ LPINT lpErrno);
324
325 typedef int
326 (WSPAPI *LPWPUCLOSESOCKETHANDLE)(
327 _In_ SOCKET s,
328 _Out_ LPINT lpErrno);
329
330 typedef WSAEVENT
331 (WSPAPI *LPWPUCREATEEVENT)(
332 _Out_ LPINT lpErrno);
333
334 typedef
335 _Must_inspect_result_
336 SOCKET
337 (WSPAPI *LPWPUCREATESOCKETHANDLE)(
338 _In_ DWORD dwCatalogEntryId,
339 _In_ DWORD_PTR dwContext,
340 _Out_ LPINT lpErrno);
341
342 typedef int
343 (WSPAPI *LPWPUFDISSET)(
344 _In_ SOCKET s,
345 _In_ fd_set FAR *fdset);
346
347 typedef int
348 (WSPAPI *LPWPUGETPROVIDERPATH)(
349 _In_ LPGUID lpProviderId,
350 _Out_writes_(*lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath,
351 _Inout_ LPINT lpProviderDllPathLen,
352 _Out_ LPINT lpErrno);
353
354 typedef SOCKET
355 (WSPAPI *LPWPUMODIFYIFSHANDLE)(
356 _In_ DWORD dwCatalogEntryId,
357 _In_ SOCKET ProposedHandle,
358 _Out_ LPINT lpErrno);
359
360 typedef BOOL
361 (WSPAPI *LPWPUPOSTMESSAGE)(
362 _In_ HWND hWnd,
363 _In_ UINT Msg,
364 _In_ WPARAM wParam,
365 _In_ LPARAM lParam);
366
367 typedef int
368 (WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)(
369 _In_ DWORD dwCatalogEntryId,
370 _Out_ LPBLOCKINGCALLBACK FAR *lplpfnCallback,
371 _Out_ PDWORD_PTR lpdwContext,
372 _Out_ LPINT lpErrno);
373
374 typedef int
375 (WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT)(
376 _In_ SOCKET s,
377 _Out_ PDWORD_PTR lpContext,
378 _Out_ LPINT lpErrno);
379
380 typedef int
381 (WSPAPI *LPWPUQUEUEAPC)(
382 _In_ LPWSATHREADID lpThreadId,
383 _In_ LPWSAUSERAPC lpfnUserApc,
384 _In_ DWORD_PTR dwContext,
385 _Out_ LPINT lpErrno);
386
387 typedef BOOL
388 (WSPAPI *LPWPURESETEVENT)(
389 _In_ WSAEVENT hEvent,
390 _Out_ LPINT lpErrno);
391
392 typedef BOOL
393 (WSPAPI *LPWPUSETEVENT)(
394 _In_ WSAEVENT hEvent,
395 _Out_ LPINT lpErrno);
396
397 typedef int
398 (WSPAPI *LPWPUOPENCURRENTTHREAD)(
399 _Out_ LPWSATHREADID lpThreadId,
400 _Out_ LPINT lpErrno);
401
402 typedef int
403 (WSPAPI *LPWPUCLOSETHREAD)(
404 _In_ LPWSATHREADID lpThreadId,
405 _Out_ LPINT lpErrno);
406
407 typedef int
408 (WSPAPI *LPWPUCOMPLETEOVERLAPPEDREQUEST)(
409 _In_ SOCKET s,
410 _Inout_ LPWSAOVERLAPPED lpOverlapped,
411 _In_ DWORD dwError,
412 _In_ DWORD cbTransferred,
413 _Out_ LPINT lpErrno);
414
415 typedef int
416 (WSPAPI *LPWSCENUMPROTOCOLS)(
417 _In_opt_ LPINT lpiProtocols,
418 _Out_writes_bytes_to_opt_(*lpdwBufferLength, *lpdwBufferlength) LPWSAPROTOCOL_INFOW lpProtocolBuffer,
419 _Inout_ LPDWORD lpdwBufferLength,
420 _Out_ LPINT lpErrno);
421
422 typedef int
423 (WSPAPI *LPWSCDEINSTALLPROVIDER)(
424 _In_ LPGUID lpProviderId,
425 _Out_ LPINT lpErrno);
426
427 typedef int
428 (WSPAPI *LPWSCINSTALLPROVIDER)(
429 _In_ LPGUID lpProviderId,
430 _In_z_ const WCHAR FAR *lpszProviderDllPath,
431 _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
432 _In_ DWORD dwNumberOfEntries,
433 _Out_ LPINT lpErrno);
434
435 typedef int
436 (WSPAPI *LPWSCGETPROVIDERPATH)(
437 _In_ LPGUID lpProviderId,
438 _Out_writes_to_(*lpProviderDllPathLen, *lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath,
439 _Inout_ LPINT lpProviderDllPathLen,
440 _Out_ LPINT lpErrno);
441
442 typedef INT
443 (WSPAPI *LPWSCINSTALLNAMESPACE)(
444 _In_ LPWSTR lpszIdentifier,
445 _In_ LPWSTR lpszPathName,
446 _In_ DWORD dwNameSpace,
447 _In_ DWORD dwVersion,
448 _In_ LPGUID lpProviderId);
449
450 typedef INT
451 (WSPAPI *LPWSCUNINSTALLNAMESPACE)(
452 _In_ LPGUID lpProviderId);
453
454 typedef INT
455 (WSPAPI *LPWSCENABLENSPROVIDER)(
456 _In_ LPGUID lpProviderId,
457 _In_ BOOL fEnable);
458
459 /* Service provider procedure table */
460 typedef struct _WSPPROC_TABLE {
461 LPWSPACCEPT lpWSPAccept;
462 LPWSPADDRESSTOSTRING lpWSPAddressToString;
463 LPWSPASYNCSELECT lpWSPAsyncSelect;
464 LPWSPBIND lpWSPBind;
465 LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall;
466 LPWSPCLEANUP lpWSPCleanup;
467 LPWSPCLOSESOCKET lpWSPCloseSocket;
468 LPWSPCONNECT lpWSPConnect;
469 LPWSPDUPLICATESOCKET lpWSPDuplicateSocket;
470 LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents;
471 LPWSPEVENTSELECT lpWSPEventSelect;
472 LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult;
473 LPWSPGETPEERNAME lpWSPGetPeerName;
474 LPWSPGETSOCKNAME lpWSPGetSockName;
475 LPWSPGETSOCKOPT lpWSPGetSockOpt;
476 LPWSPGETQOSBYNAME lpWSPGetQOSByName;
477 LPWSPIOCTL lpWSPIoctl;
478 LPWSPJOINLEAF lpWSPJoinLeaf;
479 LPWSPLISTEN lpWSPListen;
480 LPWSPRECV lpWSPRecv;
481 LPWSPRECVDISCONNECT lpWSPRecvDisconnect;
482 LPWSPRECVFROM lpWSPRecvFrom;
483 LPWSPSELECT lpWSPSelect;
484 LPWSPSEND lpWSPSend;
485 LPWSPSENDDISCONNECT lpWSPSendDisconnect;
486 LPWSPSENDTO lpWSPSendTo;
487 LPWSPSETSOCKOPT lpWSPSetSockOpt;
488 LPWSPSHUTDOWN lpWSPShutdown;
489 LPWSPSOCKET lpWSPSocket;
490 LPWSPSTRINGTOADDRESS lpWSPStringToAddress;
491 } WSPPROC_TABLE, FAR* LPWSPPROC_TABLE;
492
493 typedef INT
494 (WSAAPI *LPNSPCLEANUP)(
495 _In_ LPGUID lpProviderId);
496
497 typedef INT
498 (WSAAPI *LPNSPLOOKUPSERVICEBEGIN)(
499 _In_ LPGUID lpProviderId,
500 _In_ LPWSAQUERYSETW lpqsRestrictions,
501 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo,
502 _In_ DWORD dwControlFlags,
503 _Out_ LPHANDLE lphLookup);
504
505 typedef INT
506 (WSAAPI *LPNSPLOOKUPSERVICENEXT)(
507 _In_ HANDLE hLookup,
508 _In_ DWORD dwControlFlags,
509 _Inout_ LPDWORD lpdwBufferLength,
510 _Out_writes_bytes_to_(*lpdwBufferLength, *lpdwBufferLength) LPWSAQUERYSETW lpqsResults);
511
512 #if(_WIN32_WINNT >= 0x0501)
513 typedef INT
514 (WSAAPI *LPNSPIOCTL)(
515 _In_ HANDLE hLookup,
516 _In_ DWORD dwControlCode,
517 _In_reads_bytes_(cbInBuffer) LPVOID lpvInBuffer,
518 _In_ DWORD cbInBuffer,
519 _Out_writes_bytes_to_(cbOutBuffer, *lpcbBytesReturned) LPVOID lpvOutBuffer,
520 _In_ DWORD cbOutBuffer,
521 _Out_ LPDWORD lpcbBytesReturned,
522 _In_opt_ LPWSACOMPLETION lpCompletion,
523 _In_ LPWSATHREADID lpThreadId);
524 #endif
525
526 typedef INT
527 (WSAAPI *LPNSPLOOKUPSERVICEEND)(
528 _In_ HANDLE hLookup);
529
530 typedef INT
531 (WSAAPI *LPNSPSETSERVICE)(
532 _In_ LPGUID lpProviderId,
533 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo,
534 _In_ LPWSAQUERYSETW lpqsRegInfo,
535 _In_ WSAESETSERVICEOP essOperation,
536 _In_ DWORD dwControlFlags);
537
538 typedef INT
539 (WSAAPI *LPNSPINSTALLSERVICECLASS)(
540 _In_ LPGUID lpProviderId,
541 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo);
542
543 typedef INT
544 (WSAAPI *LPNSPREMOVESERVICECLASS)(
545 _In_ LPGUID lpProviderId,
546 _In_ LPGUID lpServiceClassId);
547
548 typedef INT
549 (WSAAPI *LPNSPGETSERVICECLASSINFO)(
550 _In_ LPGUID lpProviderId,
551 _In_ LPDWORD lpdwBufSize,
552 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo);
553
554 typedef
555 _Must_inspect_result_
556 INT
557 (WSAAPI *LPNSPV2STARTUP)(
558 _In_ LPGUID lpProviderId,
559 _Outptr_ LPVOID *ppvClientSessionArg);
560
561 typedef INT
562 (WSAAPI *LPNSPV2CLEANUP)(
563 _In_ LPGUID lpProviderId,
564 _In_ LPVOID pvClientSessionArg);
565
566 typedef INT
567 (WSAAPI *LPNSPV2LOOKUPSERVICEBEGIN)(
568 _In_ LPGUID lpProviderId,
569 _In_ LPWSAQUERYSET2W lpqsRestrictions,
570 _In_ DWORD dwControlFlags,
571 _In_ LPVOID lpvClientSessionArg,
572 _Out_ LPHANDLE lphLookup);
573
574 typedef VOID
575 (WSAAPI *LPNSPV2LOOKUPSERVICENEXTEX)(
576 _In_ HANDLE hAsyncCall,
577 _In_ HANDLE hLookup,
578 _In_ DWORD dwControlFlags,
579 _In_ LPDWORD lpdwBufferLength,
580 _Out_ LPWSAQUERYSET2W lpqsResults);
581
582 typedef INT
583 (WSAAPI *LPNSPV2LOOKUPSERVICEEND)(
584 _In_ HANDLE hLookup);
585
586 typedef VOID
587 (WSAAPI *LPNSPV2SETSERVICEEX)(
588 _In_ HANDLE hAsyncCall,
589 _In_ LPGUID lpProviderId,
590 _In_ LPWSAQUERYSET2W lpqsRegInfo,
591 _In_ WSAESETSERVICEOP essOperation,
592 _In_ DWORD dwControlFlags,
593 _In_ LPVOID lpvClientSessionArg);
594
595 typedef VOID
596 (WSAAPI *LPNSPV2CLIENTSESSIONRUNDOWN)(
597 _In_ LPGUID lpProviderId,
598 _In_ LPVOID pvClientSessionArg);
599
600 /* Service Provider upcall table */
601 typedef struct _WSPUPCALLTABLE {
602 LPWPUCLOSEEVENT lpWPUCloseEvent;
603 LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
604 LPWPUCREATEEVENT lpWPUCreateEvent;
605 LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
606 LPWPUFDISSET lpWPUFDIsSet;
607 LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
608 LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
609 LPWPUPOSTMESSAGE lpWPUPostMessage;
610 LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
611 LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
612 LPWPUQUEUEAPC lpWPUQueueApc;
613 LPWPURESETEVENT lpWPUResetEvent;
614 LPWPUSETEVENT lpWPUSetEvent;
615 LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
616 LPWPUCLOSETHREAD lpWPUCloseThread;
617 } WSPUPCALLTABLE, FAR* LPWSPUPCALLTABLE;
618
619 typedef
620 _Must_inspect_result_
621 int
622 (WSPAPI *LPWSPSTARTUP)(
623 _In_ WORD wVersionRequested,
624 _In_ LPWSPDATA lpWSPData,
625 _In_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
626 _In_ WSPUPCALLTABLE UpcallTable,
627 _Out_ LPWSPPROC_TABLE lpProcTable);
628
629 #if (_WIN32_WINNT >= 0x0600)
630
631 #define LSP_SYSTEM 0x80000000
632 #define LSP_INSPECTOR 0x00000001
633 #define LSP_REDIRECTOR 0x00000002
634 #define LSP_PROXY 0x00000004
635 #define LSP_FIREWALL 0x00000008
636 #define LSP_INBOUND_MODIFY 0x00000010
637 #define LSP_OUTBOUND_MODIFY 0x00000020
638 #define LSP_CRYPTO_COMPRESS 0x00000040
639 #define LSP_LOCAL_CACHE 0x00000080
640
641 typedef enum _WSC_PROVIDER_INFO_TYPE {
642 ProviderInfoLspCategories,
643 ProviderInfoAudit
644 } WSC_PROVIDER_INFO_TYPE ;
645
646 typedef struct _WSC_PROVIDER_AUDIT_INFO {
647 DWORD RecordSize;
648 PVOID Reserved;
649 } WSC_PROVIDER_AUDIT_INFO;
650
651 #endif /* (_WIN32_WINNT >= 0x0600) */
652
653 typedef struct _NSP_ROUTINE {
654 DWORD cbSize;
655 DWORD dwMajorVersion;
656 DWORD dwMinorVersion;
657 LPNSPCLEANUP NSPCleanup;
658 LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin;
659 LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext;
660 LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd;
661 LPNSPSETSERVICE NSPSetService;
662 LPNSPINSTALLSERVICECLASS NSPInstallServiceClass;
663 LPNSPREMOVESERVICECLASS NSPRemoveServiceClass;
664 LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo;
665 LPNSPIOCTL NSPIoctl;
666 } NSP_ROUTINE, *PNSP_ROUTINE, FAR* LPNSP_ROUTINE;
667
668 typedef
669 _Must_inspect_result_
670 INT
671 (WSAAPI *LPNSPSTARTUP)(
672 _In_ LPGUID lpProviderId,
673 _Inout_ LPNSP_ROUTINE lpnspRoutines);
674
675 typedef struct _NSPV2_ROUTINE {
676 DWORD cbSize;
677 DWORD dwMajorVersion;
678 DWORD dwMinorVersion;
679 LPNSPV2STARTUP NSPv2Startup;
680 LPNSPV2CLEANUP NSPv2Cleanup;
681 LPNSPV2LOOKUPSERVICEBEGIN NSPv2LookupServiceBegin;
682 LPNSPV2LOOKUPSERVICENEXTEX NSPv2LookupServiceNextEx;
683 LPNSPV2LOOKUPSERVICEEND NSPv2LookupServiceEnd;
684 LPNSPV2SETSERVICEEX NSPv2SetServiceEx;
685 LPNSPV2CLIENTSESSIONRUNDOWN NSPv2ClientSessionRundown;
686 } NSPV2_ROUTINE, *PNSPV2_ROUTINE, *LPNSPV2_ROUTINE;
687 typedef const NSPV2_ROUTINE *PCNSPV2_ROUTINE, *LPCNSPV2_ROUTINE;
688
689 _Must_inspect_result_
690 int
691 WSPAPI
692 WSPStartup(
693 _In_ WORD wVersionRequested,
694 _In_ LPWSPDATA lpWSPData,
695 _In_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
696 _In_ WSPUPCALLTABLE UpcallTable,
697 _Out_ LPWSPPROC_TABLE lpProcTable);
698
699 int
700 WSPAPI
701 WSCEnumProtocols(
702 _In_opt_ LPINT lpiProtocols,
703 _Out_writes_bytes_to_opt_(*lpdwBufferLength, *lpdwBufferLength) LPWSAPROTOCOL_INFOW lpProtocolBuffer,
704 _Inout_ LPDWORD lpdwBufferLength,
705 _Out_ LPINT lpErrno);
706
707 #if (_WIN32_WINNT >= 0x0501)
708
709 int
710 WSPAPI
711 WPUOpenCurrentThread(
712 _Out_ LPWSATHREADID lpThreadId,
713 _Out_ LPINT lpErrno);
714
715 int
716 WSPAPI
717 WPUCloseThread(
718 _In_ LPWSATHREADID lpThreadId,
719 _Out_ LPINT lpErrno);
720
721 #define WSCEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
722 #define LPFN_WSCENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
723
724 int
725 WSPAPI
726 WSCUpdateProvider(
727 _In_ LPGUID lpProviderId,
728 _In_z_ const WCHAR FAR *lpszProviderDllPath,
729 _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
730 _In_ DWORD dwNumberOfEntries,
731 _Out_ LPINT lpErrno);
732
733 typedef int
734 (WSPAPI *LPWSCUPDATEPROVIDER)(
735 _In_ LPGUID lpProviderId,
736 _In_z_ const WCHAR FAR *lpszProviderDllPath,
737 _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
738 _In_ DWORD dwNumberOfEntries,
739 _Out_ LPINT lpErrno);
740
741 #if defined(_WIN64)
742
743 int
744 WSPAPI
745 WSCEnumProtocols32(
746 _In_opt_ LPINT lpiProtocols,
747 _Out_writes_bytes_(*lpdwBufferLength) LPWSAPROTOCOL_INFOW lpProtocolBuffer,
748 _Inout_ LPDWORD lpdwBufferLength,
749 _Out_ LPINT lpErrno);
750
751 int
752 WSPAPI
753 WSCDeinstallProvider32(
754 _In_ LPGUID lpProviderId,
755 _Out_ LPINT lpErrno);
756
757 int
758 WSPAPI
759 WSCInstallProvider64_32(
760 _In_ LPGUID lpProviderId,
761 _In_z_ const WCHAR FAR *lpszProviderDllPath,
762 _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
763 _In_ DWORD dwNumberOfEntries,
764 _Out_ LPINT lpErrno);
765
766 _Success_(return == 0)
767 int
768 WSPAPI
769 WSCGetProviderPath32(
770 _In_ LPGUID lpProviderId,
771 _Out_writes_to_(*lpProviderDllPathLen, *lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath,
772 _Inout_ LPINT lpProviderDllPathLen,
773 _Out_ LPINT lpErrno);
774
775 int
776 WSPAPI
777 WSCUpdateProvider32(
778 _In_ LPGUID lpProviderId,
779 _In_z_ const WCHAR FAR *lpszProviderDllPath,
780 _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
781 _In_ DWORD dwNumberOfEntries,
782 _Out_ LPINT lpErrno);
783
784 INT
785 WSAAPI
786 WSCEnumNameSpaceProviders32(
787 _Inout_ LPDWORD lpdwBufferLength,
788 _Out_writes_bytes_(*lpdwBufferLength) LPWSANAMESPACE_INFOW lpnspBuffer);
789
790 INT
791 WSPAPI
792 WSCInstallNameSpace32(
793 _In_ LPWSTR lpszIdentifier,
794 _In_ LPWSTR lpszPathName,
795 _In_ DWORD dwNameSpace,
796 _In_ DWORD dwVersion,
797 _In_ LPGUID lpProviderId);
798
799 INT
800 WSPAPI
801 WSCUnInstallNameSpace32(
802 _In_ LPGUID lpProviderId);
803
804 INT
805 WSPAPI
806 WSCEnableNSProvider32(
807 _In_ LPGUID lpProviderId,
808 _In_ BOOL fEnable);
809
810 #endif /* defined(_WIN64) */
811
812 #endif /* defined(_WIN32_WINNT >= 0x0501) */
813
814 int
815 WSPAPI
816 WSCDeinstallProvider(
817 _In_ LPGUID lpProviderId,
818 _Out_ LPINT lpErrno);
819
820 int
821 WSPAPI
822 WSCInstallProvider(
823 _In_ LPGUID lpProviderId,
824 _In_z_ const WCHAR FAR *lpszProviderDllPath,
825 _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
826 _In_ DWORD dwNumberOfEntries,
827 _Out_ LPINT lpErrno);
828
829 int
830 WSPAPI
831 WSCGetProviderPath(
832 _In_ LPGUID lpProviderId,
833 _Out_writes_to_(*lpProviderDllPathLen, *lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath,
834 _Inout_ LPINT lpProviderDllPathLen,
835 _Out_ LPINT lpErrno);
836
837 #if (_WIN32_WINNT < 0x0600)
838
839 int
840 WSPAPI
841 WSCInstallQOSTemplate(
842 _In_ const LPGUID Guid,
843 _In_ LPWSABUF QosName,
844 _In_ LPQOS Qos);
845
846 typedef int
847 (WSPAPI *LPWSCINSTALLQOSTEMPLATE)(
848 _In_ const LPGUID Guid,
849 _In_ LPWSABUF QosName,
850 _In_ LPQOS Qos);
851
852 int
853 WSPAPI
854 WSCRemoveQOSTemplate(
855 _In_ const LPGUID Guid,
856 _In_ LPWSABUF QosName);
857
858 typedef int
859 (WSPAPI *LPWSCREMOVEQOSTEMPLATE)(
860 _In_ const LPGUID Guid,
861 _In_ LPWSABUF QosName);
862
863 #endif /* (_WIN32_WINNT < 0x0600) */
864
865 #if(_WIN32_WINNT >= 0x0600)
866
867 int
868 WSPAPI
869 WSCSetProviderInfo(
870 _In_ LPGUID lpProviderId,
871 _In_ WSC_PROVIDER_INFO_TYPE InfoType,
872 _In_reads_bytes_(InfoSize) PBYTE Info,
873 _In_ size_t InfoSize,
874 _In_ DWORD Flags,
875 _Out_ LPINT lpErrno);
876
877 int
878 WSPAPI
879 WSCGetProviderInfo(
880 _In_ LPGUID lpProviderId,
881 _In_ WSC_PROVIDER_INFO_TYPE InfoType,
882 _Out_writes_bytes_to_(*InfoSize, *InfoSize) PBYTE Info,
883 _Inout_ *InfoSize,
884 _In_ DWORD Flags,
885 _Out_ LPINT lpErrno);
886
887 int
888 WSPAPI
889 WSCSetApplicationCategory(
890 _In_reads_(PathLength) LPCWSTR Path,
891 _In_ DWORD PathLength,
892 _In_reads_opt_(ExtraLength) LPCWSTR Extra,
893 _In_ DWORD ExtraLength,
894 _In_ DWORD PermittedLspCategories,
895 _Out_opt_ DWORD *pPrevPermLspCat,
896 _Out_ LPINT lpErrno);
897
898 int
899 WSPAPI
900 WSCGetApplicationCategory(
901 _In_reads_(PathLength) LPCWSTR Path,
902 _In_ DWORD PathLength,
903 _In_reads_opt_(ExtraLength) LPCWSTR Extra,
904 _In_ DWORD ExtraLength,
905 _Out_ DWORD *pPermittedLspCategories,
906 _Out_ LPINT lpErrno);
907
908 #define WSCEnumNameSpaceProvidersEx WSAEnumNameSpaceProvidersExW
909 #define LPFN_WSCENUMNAMESPACEPROVIDERSEX LPFN_WSAENUMNAMESPACEPROVIDERSEXW
910
911 INT
912 WSPAPI
913 WSCInstallNameSpaceEx(
914 _In_ LPWSTR lpszIdentifier,
915 _In_ LPWSTR lpszPathName,
916 _In_ DWORD dwNameSpace,
917 _In_ DWORD dwVersion,
918 _In_ LPGUID lpProviderId,
919 _In_ LPBLOB lpProviderSpecific);
920
921 INT
922 WSAAPI
923 WSAAdvertiseProvider(
924 _In_ const GUID *puuidProviderId,
925 _In_ const LPCNSPV2_ROUTINE pNSPv2Routine);
926
927 INT
928 WSAAPI
929 WSAUnadvertiseProvider(
930 _In_ const GUID *puuidProviderId);
931
932 INT
933 WSAAPI
934 WSAProviderCompleteAsyncCall(
935 _In_ HANDLE hAsyncCall,
936 _In_ INT iRetCode);
937
938 #if defined(_WIN64)
939
940 int
941 WSPAPI
942 WSCSetProviderInfo32(
943 _In_ LPGUID lpProviderId,
944 _In_ WSC_PROVIDER_INFO_TYPE InfoType,
945 _In_reads_bytes_(InfoSize) PBYTE Info,
946 _In_ size_t InfoSize,
947 _In_ DWORD Flags,
948 _Out_ LPINT lpErrno);
949
950 int
951 WSPAPI
952 WSCGetProviderInfo32(
953 _In_ LPGUID lpProviderId,
954 _In_ WSC_PROVIDER_INFO_TYPE InfoType,
955 _Out_writes_bytes_to_(*InfoSize, *InfoSize) PBYTE Info,
956 _Inout_ size_t *InfoSize,
957 _In_ DWORD Flags,
958 _Out_ LPINT lpErrno);
959
960 INT
961 WSAAPI
962 WSCEnumNameSpaceProvidersEx32(
963 _Inout_ LPDWORD lpdwBufferLength,
964 _Out_writes_bytes_(*lpdwBufferLength) LPWSANAMESPACE_INFOEXW lpnspBuffer);
965
966 INT
967 WSPAPI
968 WSCInstallNameSpaceEx32(
969 _In_ LPWSTR lpszIdentifier,
970 _In_ LPWSTR lpszPathName,
971 _In_ DWORD dwNameSpace,
972 _In_ DWORD dwVersion,
973 _In_ LPGUID lpProviderId,
974 _In_ LPBLOB lpProviderSpecific);
975
976 #endif /* (_WIN64) */
977
978 #if defined(_WIN64)
979 int
980 WSPAPI
981 WSCInstallProviderAndChains64_32(
982 #else
983 int
984 WSPAPI
985 WSCInstallProviderAndChains(
986 #endif
987 _In_ LPGUID lpProviderId,
988 _In_ const LPWSTR lpszProviderDllPath,
989 #if defined(_WIN64)
990 _In_ const LPWSTR lpszProviderDllPath32,
991 #endif
992 _In_ const LPWSTR lpszLspName,
993 _In_ DWORD dwServiceFlags,
994 _Inout_updates_(dwNumberOfEntries) LPWSAPROTOCOL_INFOW lpProtocolInfoList,
995 _In_ DWORD dwNumberOfEntries,
996 _Out_opt_ LPDWORD lpdwCatalogEntryId,
997 _Out_ LPINT lpErrno);
998
999 #endif /* (_WIN32_WINNT >= 0x0600) */
1000
1001 BOOL
1002 WSPAPI
1003 WPUCloseEvent(
1004 _In_ WSAEVENT hEvent,
1005 _Out_ LPINT lpErrno);
1006
1007 int
1008 WSPAPI
1009 WPUCloseSocketHandle(
1010 _In_ SOCKET s,
1011 _Out_ LPINT lpErrno);
1012
1013 WSAEVENT
1014 WSPAPI
1015 WPUCreateEvent(
1016 _Out_ LPINT lpErrno);
1017
1018 SOCKET
1019 WSPAPI
1020 WPUCreateSocketHandle(
1021 _In_ DWORD dwCatalogEntryId,
1022 _In_ DWORD_PTR dwContext,
1023 _Out_ LPINT lpErrno);
1024
1025 int
1026 WSPAPI
1027 WPUFDIsSet(
1028 _In_ SOCKET s,
1029 _In_ fd_set FAR *fdset);
1030
1031 int
1032 WSPAPI
1033 WPUGetProviderPath(
1034 _In_ LPGUID lpProviderId,
1035 _Out_writes_(*lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath,
1036 _Inout_ LPINT lpProviderDllPathLen,
1037 _Out_ LPINT lpErrno);
1038
1039 SOCKET
1040 WSPAPI
1041 WPUModifyIFSHandle(
1042 _In_ DWORD dwCatalogEntryId,
1043 _In_ SOCKET ProposedHandle,
1044 _Out_ LPINT lpErrno);
1045
1046 BOOL
1047 WSPAPI
1048 WPUPostMessage(
1049 _In_ HWND hWnd,
1050 _In_ UINT Msg,
1051 _In_ WPARAM wParam,
1052 _In_ LPARAM lParam);
1053
1054 int
1055 WSPAPI
1056 WPUQueryBlockingCallback(
1057 _In_ DWORD dwCatalogEntryId,
1058 _Out_ LPBLOCKINGCALLBACK FAR *lplpfnCallback,
1059 _Out_ PDWORD_PTR lpdwContext,
1060 _Out_ LPINT lpErrno);
1061
1062 int
1063 WSPAPI
1064 WPUQuerySocketHandleContext(
1065 _In_ SOCKET s,
1066 _Out_ PDWORD_PTR lpContext,
1067 _Out_ LPINT lpErrno);
1068
1069 int
1070 WSPAPI
1071 WPUQueueApc(
1072 _In_ LPWSATHREADID lpThreadId,
1073 _In_ LPWSAUSERAPC lpfnUserApc,
1074 _In_ DWORD_PTR dwContext,
1075 _Out_ LPINT lpErrno);
1076
1077 BOOL
1078 WSPAPI
1079 WPUResetEvent(
1080 _In_ WSAEVENT hEvent,
1081 _Out_ LPINT lpErrno);
1082
1083 BOOL
1084 WSPAPI
1085 WPUSetEvent(
1086 _In_ WSAEVENT hEvent,
1087 _Out_ LPINT lpErrno);
1088
1089 int
1090 WSPAPI
1091 WPUCompleteOverlappedRequest(
1092 _In_ SOCKET s,
1093 _Inout_ LPWSAOVERLAPPED lpOverlapped,
1094 _In_ DWORD dwError,
1095 _In_ DWORD cbTransferred,
1096 _Out_ LPINT lpErrno);
1097
1098 INT
1099 WSPAPI
1100 WSCInstallNameSpace(
1101 _In_ LPWSTR lpszIdentifier,
1102 _In_ LPWSTR lpszPathName,
1103 _In_ DWORD dwNameSpace,
1104 _In_ DWORD dwVersion,
1105 _In_ LPGUID lpProviderId);
1106
1107 INT
1108 WSPAPI
1109 WSCUnInstallNameSpace(
1110 _In_ LPGUID lpProviderId);
1111
1112 INT
1113 WSPAPI
1114 WSCEnableNSProvider(
1115 _In_ LPGUID lpProviderId,
1116 _In_ BOOL fEnable);
1117
1118 _Must_inspect_result_
1119 INT
1120 WSAAPI
1121 NSPStartup(
1122 _In_ LPGUID lpProviderId,
1123 _Inout_ LPNSP_ROUTINE lpnspRoutines);
1124
1125 #if !defined(_WIN64)
1126 #include <poppack.h>
1127 #endif
1128
1129 #ifdef __cplusplus
1130 }
1131 #endif