4 * Winsock 2 Service Provider interface.
7 * THIS SOFTWARE IS NOT COPYRIGHTED
9 * This source code is offered for use in the public domain. You may
10 * use, modify or distribute it freely.
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.
35 #define WSPDESCRIPTION_LEN 255
37 #define WSS_OPERATION_IN_PROGRESS 0x00000103L
41 typedef struct _WSATHREADID
{
44 } WSATHREADID
, FAR
*LPWSATHREADID
;
46 typedef struct WSPData
{
49 WCHAR szDescription
[WSPDESCRIPTION_LEN
+1];
50 } WSPDATA
, FAR
*LPWSPDATA
;
53 (CALLBACK FAR
*LPBLOCKINGCALLBACK
)(
59 (WSPAPI
*LPWSPACCEPT
)(
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
,
68 (CALLBACK FAR
*LPWSAUSERAPC
)(
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
,
81 (WSPAPI
*LPWSPASYNCSELECT
)(
84 _In_
unsigned int wMsg
,
91 _In_reads_bytes_(namelen
) const struct sockaddr FAR
*name
,
96 (WSPAPI
*LPWSPCANCELBLOCKINGCALL
)(
100 (WSPAPI
*LPWSPCLEANUP
)(
101 _Out_ LPINT lpErrno
);
104 (WSPAPI
*LPWSPCLOSESOCKET
)(
106 _Out_ LPINT lpErrno
);
109 (WSPAPI
*LPWSPCONNECT
)(
111 _In_reads_bytes_(namelen
) const struct sockaddr FAR
*name
,
113 _In_opt_ LPWSABUF lpCallerData
,
114 _Out_opt_ LPWSABUF lpCalleeData
,
115 _In_opt_ LPQOS lpSQOS
,
116 _In_opt_ LPQOS lpGQOS
,
117 _Out_ LPINT lpErrno
);
120 (WSPAPI
*LPWSPDUPLICATESOCKET
)(
122 _In_ DWORD dwProcessId
,
123 _Out_ LPWSAPROTOCOL_INFOW lpProtocolInfo
,
124 _Out_ LPINT lpErrno
);
127 (WSPAPI
*LPWSPENUMNETWORKEVENTS
)(
129 _In_ WSAEVENT hEventObject
,
130 _Out_ LPWSANETWORKEVENTS lpNetworkEvents
,
131 _Out_ LPINT lpErrno
);
134 (WSPAPI
*LPWSPEVENTSELECT
)(
136 _In_opt_ WSAEVENT hEventObject
,
137 _In_
long lNetworkEvents
,
138 _Out_ LPINT lpErrno
);
141 (WSPAPI
*LPWSPGETOVERLAPPEDRESULT
)(
143 _In_ LPWSAOVERLAPPED lpOverlapped
,
144 _Out_ LPDWORD lpcbTransfer
,
146 _Out_ LPDWORD lpdwFlags
,
147 _Out_ LPINT lpErrno
);
150 (WSPAPI
*LPWSPGETPEERNAME
)(
152 _Out_writes_bytes_to_(*namelen
, *namelen
) struct sockaddr FAR
*name
,
153 _Inout_ LPINT namelen
,
154 _Out_ LPINT lpErrno
);
157 (WSPAPI
*LPWSPGETSOCKNAME
)(
159 _Out_writes_bytes_to_(*namelen
, *namelen
) struct sockaddr FAR
*name
,
160 _Inout_ LPINT namelen
,
161 _Out_ LPINT lpErrno
);
164 (WSPAPI
*LPWSPGETSOCKOPT
)(
168 _Out_writes_bytes_(*optlen
) char FAR
*optval
,
169 _Inout_ LPINT optlen
,
170 _Out_ LPINT lpErrno
);
173 (WSPAPI
*LPWSPGETQOSBYNAME
)(
175 _In_ LPWSABUF lpQOSName
,
177 _Out_ LPINT lpErrno
);
180 (WSPAPI
*LPWSPIOCTL
)(
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
);
194 (WSPAPI
*LPWSPJOINLEAF
)(
196 _In_reads_bytes_(namelen
) const struct sockaddr FAR
*name
,
198 _In_opt_ LPWSABUF lpCallerData
,
199 _Out_opt_ LPWSABUF lpCalleeData
,
200 _In_opt_ LPQOS lpSQOS
,
201 _In_opt_ LPQOS lpGQOS
,
203 _Out_ LPINT lpErrno
);
206 (WSPAPI
*LPWSPLISTEN
)(
209 _Out_ LPINT lpErrno
);
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
,
224 (WSPAPI
*LPWSPRECVDISCONNECT
)(
226 _In_opt_ LPWSABUF lpInboundDisconnectData
,
227 _Out_ LPINT lpErrno
);
230 (WSPAPI
*LPWSPRECVFROM
)(
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
);
244 (WSPAPI
*LPWSPSELECT
)(
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
);
255 _In_reads_(dwBufferCount
) LPWSABUF lpBuffers
,
256 _In_ DWORD dwBufferCount
,
257 _Out_opt_ LPDWORD lpNumberOfBytesSent
,
259 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped
,
260 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
261 _In_opt_ LPWSATHREADID lpThreadId
,
262 _Out_ LPINT lpErrno
);
265 (WSPAPI
*LPWSPSENDDISCONNECT
)(
267 _In_opt_ LPWSABUF lpOutboundDisconnectData
,
268 _Out_ LPINT lpErrno
);
271 (WSPAPI
*LPWSPSENDTO
)(
273 _In_reads_(dwBufferCount
) LPWSABUF lpBuffers
,
274 _In_ DWORD dwBufferCount
,
275 _Out_opt_ LPDWORD lpNumberOfBytesSent
,
277 _In_reads_bytes_opt_(iTolen
) const struct sockaddr FAR
*lpTo
,
279 _Inout_opt_ LPWSAOVERLAPPED lpOverlapped
,
280 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
281 _In_opt_ LPWSATHREADID lpThreadId
,
282 _Out_ LPINT lpErrno
);
285 (WSPAPI
*LPWSPSETSOCKOPT
)(
289 _In_reads_bytes_opt_(optlen
) const char FAR
*optval
,
291 _Out_ LPINT lpErrno
);
294 (WSPAPI
*LPWSPSHUTDOWN
)(
297 _Out_ LPINT lpErrno
);
300 _Must_inspect_result_
302 (WSPAPI
*LPWSPSOCKET
)(
306 _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo
,
309 _Out_ LPINT lpErrno
);
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
);
321 (WSPAPI
*LPWPUCLOSEEVENT
)(
322 _In_ WSAEVENT hEvent
,
323 _Out_ LPINT lpErrno
);
326 (WSPAPI
*LPWPUCLOSESOCKETHANDLE
)(
328 _Out_ LPINT lpErrno
);
331 (WSPAPI
*LPWPUCREATEEVENT
)(
332 _Out_ LPINT lpErrno
);
335 _Must_inspect_result_
337 (WSPAPI
*LPWPUCREATESOCKETHANDLE
)(
338 _In_ DWORD dwCatalogEntryId
,
339 _In_ DWORD_PTR dwContext
,
340 _Out_ LPINT lpErrno
);
343 (WSPAPI
*LPWPUFDISSET
)(
345 _In_ fd_set FAR
*fdset
);
348 (WSPAPI
*LPWPUGETPROVIDERPATH
)(
349 _In_ LPGUID lpProviderId
,
350 _Out_writes_(*lpProviderDllPathLen
) WCHAR FAR
*lpszProviderDllPath
,
351 _Inout_ LPINT lpProviderDllPathLen
,
352 _Out_ LPINT lpErrno
);
355 (WSPAPI
*LPWPUMODIFYIFSHANDLE
)(
356 _In_ DWORD dwCatalogEntryId
,
357 _In_ SOCKET ProposedHandle
,
358 _Out_ LPINT lpErrno
);
361 (WSPAPI
*LPWPUPOSTMESSAGE
)(
368 (WSPAPI
*LPWPUQUERYBLOCKINGCALLBACK
)(
369 _In_ DWORD dwCatalogEntryId
,
370 _Out_ LPBLOCKINGCALLBACK FAR
*lplpfnCallback
,
371 _Out_ PDWORD_PTR lpdwContext
,
372 _Out_ LPINT lpErrno
);
375 (WSPAPI
*LPWPUQUERYSOCKETHANDLECONTEXT
)(
377 _Out_ PDWORD_PTR lpContext
,
378 _Out_ LPINT lpErrno
);
381 (WSPAPI
*LPWPUQUEUEAPC
)(
382 _In_ LPWSATHREADID lpThreadId
,
383 _In_ LPWSAUSERAPC lpfnUserApc
,
384 _In_ DWORD_PTR dwContext
,
385 _Out_ LPINT lpErrno
);
388 (WSPAPI
*LPWPURESETEVENT
)(
389 _In_ WSAEVENT hEvent
,
390 _Out_ LPINT lpErrno
);
393 (WSPAPI
*LPWPUSETEVENT
)(
394 _In_ WSAEVENT hEvent
,
395 _Out_ LPINT lpErrno
);
398 (WSPAPI
*LPWPUOPENCURRENTTHREAD
)(
399 _Out_ LPWSATHREADID lpThreadId
,
400 _Out_ LPINT lpErrno
);
403 (WSPAPI
*LPWPUCLOSETHREAD
)(
404 _In_ LPWSATHREADID lpThreadId
,
405 _Out_ LPINT lpErrno
);
408 (WSPAPI
*LPWPUCOMPLETEOVERLAPPEDREQUEST
)(
410 _Inout_ LPWSAOVERLAPPED lpOverlapped
,
412 _In_ DWORD cbTransferred
,
413 _Out_ LPINT lpErrno
);
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
);
423 (WSPAPI
*LPWSCDEINSTALLPROVIDER
)(
424 _In_ LPGUID lpProviderId
,
425 _Out_ LPINT lpErrno
);
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
);
436 (WSPAPI
*LPWSCGETPROVIDERPATH
)(
437 _In_ LPGUID lpProviderId
,
438 _Out_writes_to_(*lpProviderDllPathLen
, *lpProviderDllPathLen
) WCHAR FAR
*lpszProviderDllPath
,
439 _Inout_ LPINT lpProviderDllPathLen
,
440 _Out_ LPINT lpErrno
);
443 (WSPAPI
*LPWSCINSTALLNAMESPACE
)(
444 _In_ LPWSTR lpszIdentifier
,
445 _In_ LPWSTR lpszPathName
,
446 _In_ DWORD dwNameSpace
,
447 _In_ DWORD dwVersion
,
448 _In_ LPGUID lpProviderId
);
451 (WSPAPI
*LPWSCUNINSTALLNAMESPACE
)(
452 _In_ LPGUID lpProviderId
);
455 (WSPAPI
*LPWSCENABLENSPROVIDER
)(
456 _In_ LPGUID lpProviderId
,
459 /* Service provider procedure table */
460 typedef struct _WSPPROC_TABLE
{
461 LPWSPACCEPT lpWSPAccept
;
462 LPWSPADDRESSTOSTRING lpWSPAddressToString
;
463 LPWSPASYNCSELECT lpWSPAsyncSelect
;
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
;
481 LPWSPRECVDISCONNECT lpWSPRecvDisconnect
;
482 LPWSPRECVFROM lpWSPRecvFrom
;
483 LPWSPSELECT lpWSPSelect
;
485 LPWSPSENDDISCONNECT lpWSPSendDisconnect
;
486 LPWSPSENDTO lpWSPSendTo
;
487 LPWSPSETSOCKOPT lpWSPSetSockOpt
;
488 LPWSPSHUTDOWN lpWSPShutdown
;
489 LPWSPSOCKET lpWSPSocket
;
490 LPWSPSTRINGTOADDRESS lpWSPStringToAddress
;
491 } WSPPROC_TABLE
, FAR
* LPWSPPROC_TABLE
;
494 (WSAAPI
*LPNSPCLEANUP
)(
495 _In_ LPGUID lpProviderId
);
498 (WSAAPI
*LPNSPLOOKUPSERVICEBEGIN
)(
499 _In_ LPGUID lpProviderId
,
500 _In_ LPWSAQUERYSETW lpqsRestrictions
,
501 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo
,
502 _In_ DWORD dwControlFlags
,
503 _Out_ LPHANDLE lphLookup
);
506 (WSAAPI
*LPNSPLOOKUPSERVICENEXT
)(
508 _In_ DWORD dwControlFlags
,
509 _Inout_ LPDWORD lpdwBufferLength
,
510 _Out_writes_bytes_to_(*lpdwBufferLength
, *lpdwBufferLength
) LPWSAQUERYSETW lpqsResults
);
512 #if(_WIN32_WINNT >= 0x0501)
514 (WSAAPI
*LPNSPIOCTL
)(
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
);
527 (WSAAPI
*LPNSPLOOKUPSERVICEEND
)(
528 _In_ HANDLE hLookup
);
531 (WSAAPI
*LPNSPSETSERVICE
)(
532 _In_ LPGUID lpProviderId
,
533 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo
,
534 _In_ LPWSAQUERYSETW lpqsRegInfo
,
535 _In_ WSAESETSERVICEOP essOperation
,
536 _In_ DWORD dwControlFlags
);
539 (WSAAPI
*LPNSPINSTALLSERVICECLASS
)(
540 _In_ LPGUID lpProviderId
,
541 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo
);
544 (WSAAPI
*LPNSPREMOVESERVICECLASS
)(
545 _In_ LPGUID lpProviderId
,
546 _In_ LPGUID lpServiceClassId
);
549 (WSAAPI
*LPNSPGETSERVICECLASSINFO
)(
550 _In_ LPGUID lpProviderId
,
551 _In_ LPDWORD lpdwBufSize
,
552 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo
);
555 _Must_inspect_result_
557 (WSAAPI
*LPNSPV2STARTUP
)(
558 _In_ LPGUID lpProviderId
,
559 _Outptr_ LPVOID
*ppvClientSessionArg
);
562 (WSAAPI
*LPNSPV2CLEANUP
)(
563 _In_ LPGUID lpProviderId
,
564 _In_ LPVOID pvClientSessionArg
);
567 (WSAAPI
*LPNSPV2LOOKUPSERVICEBEGIN
)(
568 _In_ LPGUID lpProviderId
,
569 _In_ LPWSAQUERYSET2W lpqsRestrictions
,
570 _In_ DWORD dwControlFlags
,
571 _In_ LPVOID lpvClientSessionArg
,
572 _Out_ LPHANDLE lphLookup
);
575 (WSAAPI
*LPNSPV2LOOKUPSERVICENEXTEX
)(
576 _In_ HANDLE hAsyncCall
,
578 _In_ DWORD dwControlFlags
,
579 _In_ LPDWORD lpdwBufferLength
,
580 _Out_ LPWSAQUERYSET2W lpqsResults
);
583 (WSAAPI
*LPNSPV2LOOKUPSERVICEEND
)(
584 _In_ HANDLE hLookup
);
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
);
596 (WSAAPI
*LPNSPV2CLIENTSESSIONRUNDOWN
)(
597 _In_ LPGUID lpProviderId
,
598 _In_ LPVOID pvClientSessionArg
);
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
;
620 _Must_inspect_result_
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
);
629 #if (_WIN32_WINNT >= 0x0600)
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
641 typedef enum _WSC_PROVIDER_INFO_TYPE
{
642 ProviderInfoLspCategories
,
644 } WSC_PROVIDER_INFO_TYPE
;
646 typedef struct _WSC_PROVIDER_AUDIT_INFO
{
649 } WSC_PROVIDER_AUDIT_INFO
;
651 #endif /* (_WIN32_WINNT >= 0x0600) */
653 typedef struct _NSP_ROUTINE
{
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
;
666 } NSP_ROUTINE
, *PNSP_ROUTINE
, FAR
* LPNSP_ROUTINE
;
669 _Must_inspect_result_
671 (WSAAPI
*LPNSPSTARTUP
)(
672 _In_ LPGUID lpProviderId
,
673 _Inout_ LPNSP_ROUTINE lpnspRoutines
);
675 typedef struct _NSPV2_ROUTINE
{
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
;
689 _Must_inspect_result_
693 _In_ WORD wVersionRequested
,
694 _In_ LPWSPDATA lpWSPData
,
695 _In_ LPWSAPROTOCOL_INFOW lpProtocolInfo
,
696 _In_ WSPUPCALLTABLE UpcallTable
,
697 _Out_ LPWSPPROC_TABLE lpProcTable
);
702 _In_opt_ LPINT lpiProtocols
,
703 _Out_writes_bytes_to_opt_(*lpdwBufferLength
, *lpdwBufferLength
) LPWSAPROTOCOL_INFOW lpProtocolBuffer
,
704 _Inout_ LPDWORD lpdwBufferLength
,
705 _Out_ LPINT lpErrno
);
707 #if (_WIN32_WINNT >= 0x0501)
711 WPUOpenCurrentThread(
712 _Out_ LPWSATHREADID lpThreadId
,
713 _Out_ LPINT lpErrno
);
718 _In_ LPWSATHREADID lpThreadId
,
719 _Out_ LPINT lpErrno
);
721 #define WSCEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
722 #define LPFN_WSCENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
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
);
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
);
746 _In_opt_ LPINT lpiProtocols
,
747 _Out_writes_bytes_(*lpdwBufferLength
) LPWSAPROTOCOL_INFOW lpProtocolBuffer
,
748 _Inout_ LPDWORD lpdwBufferLength
,
749 _Out_ LPINT lpErrno
);
753 WSCDeinstallProvider32(
754 _In_ LPGUID lpProviderId
,
755 _Out_ LPINT lpErrno
);
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
);
766 _Success_(return == 0)
769 WSCGetProviderPath32(
770 _In_ LPGUID lpProviderId
,
771 _Out_writes_to_(*lpProviderDllPathLen
, *lpProviderDllPathLen
) WCHAR FAR
*lpszProviderDllPath
,
772 _Inout_ LPINT lpProviderDllPathLen
,
773 _Out_ LPINT lpErrno
);
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
);
786 WSCEnumNameSpaceProviders32(
787 _Inout_ LPDWORD lpdwBufferLength
,
788 _Out_writes_bytes_(*lpdwBufferLength
) LPWSANAMESPACE_INFOW lpnspBuffer
);
792 WSCInstallNameSpace32(
793 _In_ LPWSTR lpszIdentifier
,
794 _In_ LPWSTR lpszPathName
,
795 _In_ DWORD dwNameSpace
,
796 _In_ DWORD dwVersion
,
797 _In_ LPGUID lpProviderId
);
801 WSCUnInstallNameSpace32(
802 _In_ LPGUID lpProviderId
);
806 WSCEnableNSProvider32(
807 _In_ LPGUID lpProviderId
,
810 #endif /* defined(_WIN64) */
812 #endif /* defined(_WIN32_WINNT >= 0x0501) */
816 WSCDeinstallProvider(
817 _In_ LPGUID lpProviderId
,
818 _Out_ LPINT lpErrno
);
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
);
832 _In_ LPGUID lpProviderId
,
833 _Out_writes_to_(*lpProviderDllPathLen
, *lpProviderDllPathLen
) WCHAR FAR
*lpszProviderDllPath
,
834 _Inout_ LPINT lpProviderDllPathLen
,
835 _Out_ LPINT lpErrno
);
837 #if (_WIN32_WINNT < 0x0600)
841 WSCInstallQOSTemplate(
842 _In_
const LPGUID Guid
,
843 _In_ LPWSABUF QosName
,
847 (WSPAPI
*LPWSCINSTALLQOSTEMPLATE
)(
848 _In_
const LPGUID Guid
,
849 _In_ LPWSABUF QosName
,
854 WSCRemoveQOSTemplate(
855 _In_
const LPGUID Guid
,
856 _In_ LPWSABUF QosName
);
859 (WSPAPI
*LPWSCREMOVEQOSTEMPLATE
)(
860 _In_
const LPGUID Guid
,
861 _In_ LPWSABUF QosName
);
863 #endif /* (_WIN32_WINNT < 0x0600) */
865 #if(_WIN32_WINNT >= 0x0600)
870 _In_ LPGUID lpProviderId
,
871 _In_ WSC_PROVIDER_INFO_TYPE InfoType
,
872 _In_reads_bytes_(InfoSize
) PBYTE Info
,
873 _In_
size_t InfoSize
,
875 _Out_ LPINT lpErrno
);
880 _In_ LPGUID lpProviderId
,
881 _In_ WSC_PROVIDER_INFO_TYPE InfoType
,
882 _Out_writes_bytes_to_(*InfoSize
, *InfoSize
) PBYTE Info
,
883 _Inout_
size_t *InfoSize
,
885 _Out_ LPINT lpErrno
);
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
);
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
);
908 #define WSCEnumNameSpaceProvidersEx WSAEnumNameSpaceProvidersExW
909 #define LPFN_WSCENUMNAMESPACEPROVIDERSEX LPFN_WSAENUMNAMESPACEPROVIDERSEXW
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
);
923 WSAAdvertiseProvider(
924 _In_
const GUID
*puuidProviderId
,
925 _In_
const LPCNSPV2_ROUTINE pNSPv2Routine
);
929 WSAUnadvertiseProvider(
930 _In_
const GUID
*puuidProviderId
);
934 WSAProviderCompleteAsyncCall(
935 _In_ HANDLE hAsyncCall
,
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
,
948 _Out_ LPINT lpErrno
);
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
,
958 _Out_ LPINT lpErrno
);
962 WSCEnumNameSpaceProvidersEx32(
963 _Inout_ LPDWORD lpdwBufferLength
,
964 _Out_writes_bytes_(*lpdwBufferLength
) LPWSANAMESPACE_INFOEXW lpnspBuffer
);
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
);
976 #endif /* (_WIN64) */
981 WSCInstallProviderAndChains64_32(
985 WSCInstallProviderAndChains(
987 _In_ LPGUID lpProviderId
,
988 _In_
const LPWSTR lpszProviderDllPath
,
990 _In_
const LPWSTR lpszProviderDllPath32
,
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
);
999 #endif /* (_WIN32_WINNT >= 0x0600) */
1004 _In_ WSAEVENT hEvent
,
1005 _Out_ LPINT lpErrno
);
1009 WPUCloseSocketHandle(
1011 _Out_ LPINT lpErrno
);
1016 _Out_ LPINT lpErrno
);
1020 WPUCreateSocketHandle(
1021 _In_ DWORD dwCatalogEntryId
,
1022 _In_ DWORD_PTR dwContext
,
1023 _Out_ LPINT lpErrno
);
1029 _In_ fd_set FAR
*fdset
);
1034 _In_ LPGUID lpProviderId
,
1035 _Out_writes_(*lpProviderDllPathLen
) WCHAR FAR
*lpszProviderDllPath
,
1036 _Inout_ LPINT lpProviderDllPathLen
,
1037 _Out_ LPINT lpErrno
);
1042 _In_ DWORD dwCatalogEntryId
,
1043 _In_ SOCKET ProposedHandle
,
1044 _Out_ LPINT lpErrno
);
1052 _In_ LPARAM lParam
);
1056 WPUQueryBlockingCallback(
1057 _In_ DWORD dwCatalogEntryId
,
1058 _Out_ LPBLOCKINGCALLBACK FAR
*lplpfnCallback
,
1059 _Out_ PDWORD_PTR lpdwContext
,
1060 _Out_ LPINT lpErrno
);
1064 WPUQuerySocketHandleContext(
1066 _Out_ PDWORD_PTR lpContext
,
1067 _Out_ LPINT lpErrno
);
1072 _In_ LPWSATHREADID lpThreadId
,
1073 _In_ LPWSAUSERAPC lpfnUserApc
,
1074 _In_ DWORD_PTR dwContext
,
1075 _Out_ LPINT lpErrno
);
1080 _In_ WSAEVENT hEvent
,
1081 _Out_ LPINT lpErrno
);
1086 _In_ WSAEVENT hEvent
,
1087 _Out_ LPINT lpErrno
);
1091 WPUCompleteOverlappedRequest(
1093 _Inout_ LPWSAOVERLAPPED lpOverlapped
,
1095 _In_ DWORD cbTransferred
,
1096 _Out_ LPINT lpErrno
);
1100 WSCInstallNameSpace(
1101 _In_ LPWSTR lpszIdentifier
,
1102 _In_ LPWSTR lpszPathName
,
1103 _In_ DWORD dwNameSpace
,
1104 _In_ DWORD dwVersion
,
1105 _In_ LPGUID lpProviderId
);
1109 WSCUnInstallNameSpace(
1110 _In_ LPGUID lpProviderId
);
1114 WSCEnableNSProvider(
1115 _In_ LPGUID lpProviderId
,
1118 _Must_inspect_result_
1122 _In_ LPGUID lpProviderId
,
1123 _Inout_ LPNSP_ROUTINE lpnspRoutines
);
1125 #if !defined(_WIN64)
1126 #include <poppack.h>