Reactos
at master 1131 lines 26 kB view raw
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 28extern "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 41typedef struct _WSATHREADID { 42 HANDLE ThreadHandle; 43 DWORD_PTR Reserved; 44} WSATHREADID, FAR *LPWSATHREADID; 45 46typedef struct WSPData { 47 WORD wVersion; 48 WORD wHighVersion; 49 WCHAR szDescription[WSPDESCRIPTION_LEN+1]; 50} WSPDATA, FAR *LPWSPDATA; 51 52typedef BOOL 53(CALLBACK FAR *LPBLOCKINGCALLBACK)( 54 DWORD_PTR dwContext); 55 56typedef 57_Must_inspect_result_ 58SOCKET 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 67typedef VOID 68(CALLBACK FAR *LPWSAUSERAPC)( 69 DWORD_PTR dwContext); 70 71typedef 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 80typedef 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 88typedef 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 95typedef int 96(WSPAPI *LPWSPCANCELBLOCKINGCALL)( 97 _Out_ LPINT lpErrno); 98 99typedef int 100(WSPAPI *LPWSPCLEANUP)( 101 _Out_ LPINT lpErrno); 102 103typedef int 104(WSPAPI *LPWSPCLOSESOCKET)( 105 _In_ SOCKET s, 106 _Out_ LPINT lpErrno); 107 108typedef 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 119typedef int 120(WSPAPI *LPWSPDUPLICATESOCKET)( 121 _In_ SOCKET s, 122 _In_ DWORD dwProcessId, 123 _Out_ LPWSAPROTOCOL_INFOW lpProtocolInfo, 124 _Out_ LPINT lpErrno); 125 126typedef int 127(WSPAPI *LPWSPENUMNETWORKEVENTS)( 128 _In_ SOCKET s, 129 _In_ WSAEVENT hEventObject, 130 _Out_ LPWSANETWORKEVENTS lpNetworkEvents, 131 _Out_ LPINT lpErrno); 132 133typedef int 134(WSPAPI *LPWSPEVENTSELECT)( 135 _In_ SOCKET s, 136 _In_opt_ WSAEVENT hEventObject, 137 _In_ long lNetworkEvents, 138 _Out_ LPINT lpErrno); 139 140typedef 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 149typedef 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 156typedef 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 163typedef 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 172typedef BOOL 173(WSPAPI *LPWSPGETQOSBYNAME)( 174 _In_ SOCKET s, 175 _In_ LPWSABUF lpQOSName, 176 _Out_ LPQOS lpQOS, 177 _Out_ LPINT lpErrno); 178 179typedef 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 193typedef 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 205typedef int 206(WSPAPI *LPWSPLISTEN)( 207 _In_ SOCKET s, 208 _In_ int backlog, 209 _Out_ LPINT lpErrno); 210 211typedef 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 223typedef int 224(WSPAPI *LPWSPRECVDISCONNECT)( 225 _In_ SOCKET s, 226 _In_opt_ LPWSABUF lpInboundDisconnectData, 227 _Out_ LPINT lpErrno); 228 229typedef 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 243typedef 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 252typedef 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 264typedef int 265(WSPAPI *LPWSPSENDDISCONNECT)( 266 _In_ SOCKET s, 267 _In_opt_ LPWSABUF lpOutboundDisconnectData, 268 _Out_ LPINT lpErrno); 269 270typedef 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 284typedef 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 293typedef int 294(WSPAPI *LPWSPSHUTDOWN)( 295 _In_ SOCKET s, 296 _In_ int how, 297 _Out_ LPINT lpErrno); 298 299typedef 300_Must_inspect_result_ 301SOCKET 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 311typedef 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 320typedef BOOL 321(WSPAPI *LPWPUCLOSEEVENT)( 322 _In_ WSAEVENT hEvent, 323 _Out_ LPINT lpErrno); 324 325typedef int 326(WSPAPI *LPWPUCLOSESOCKETHANDLE)( 327 _In_ SOCKET s, 328 _Out_ LPINT lpErrno); 329 330typedef WSAEVENT 331(WSPAPI *LPWPUCREATEEVENT)( 332 _Out_ LPINT lpErrno); 333 334typedef 335_Must_inspect_result_ 336SOCKET 337(WSPAPI *LPWPUCREATESOCKETHANDLE)( 338 _In_ DWORD dwCatalogEntryId, 339 _In_ DWORD_PTR dwContext, 340 _Out_ LPINT lpErrno); 341 342typedef int 343(WSPAPI *LPWPUFDISSET)( 344 _In_ SOCKET s, 345 _In_ fd_set FAR *fdset); 346 347typedef int 348(WSPAPI *LPWPUGETPROVIDERPATH)( 349 _In_ LPGUID lpProviderId, 350 _Out_writes_(*lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath, 351 _Inout_ LPINT lpProviderDllPathLen, 352 _Out_ LPINT lpErrno); 353 354typedef SOCKET 355(WSPAPI *LPWPUMODIFYIFSHANDLE)( 356 _In_ DWORD dwCatalogEntryId, 357 _In_ SOCKET ProposedHandle, 358 _Out_ LPINT lpErrno); 359 360typedef BOOL 361(WSPAPI *LPWPUPOSTMESSAGE)( 362 _In_ HWND hWnd, 363 _In_ UINT Msg, 364 _In_ WPARAM wParam, 365 _In_ LPARAM lParam); 366 367typedef int 368(WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)( 369 _In_ DWORD dwCatalogEntryId, 370 _Out_ LPBLOCKINGCALLBACK FAR *lplpfnCallback, 371 _Out_ PDWORD_PTR lpdwContext, 372 _Out_ LPINT lpErrno); 373 374typedef int 375(WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT)( 376 _In_ SOCKET s, 377 _Out_ PDWORD_PTR lpContext, 378 _Out_ LPINT lpErrno); 379 380typedef int 381(WSPAPI *LPWPUQUEUEAPC)( 382 _In_ LPWSATHREADID lpThreadId, 383 _In_ LPWSAUSERAPC lpfnUserApc, 384 _In_ DWORD_PTR dwContext, 385 _Out_ LPINT lpErrno); 386 387typedef BOOL 388(WSPAPI *LPWPURESETEVENT)( 389 _In_ WSAEVENT hEvent, 390 _Out_ LPINT lpErrno); 391 392typedef BOOL 393(WSPAPI *LPWPUSETEVENT)( 394 _In_ WSAEVENT hEvent, 395 _Out_ LPINT lpErrno); 396 397typedef int 398(WSPAPI *LPWPUOPENCURRENTTHREAD)( 399 _Out_ LPWSATHREADID lpThreadId, 400 _Out_ LPINT lpErrno); 401 402typedef int 403(WSPAPI *LPWPUCLOSETHREAD)( 404 _In_ LPWSATHREADID lpThreadId, 405 _Out_ LPINT lpErrno); 406 407typedef 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 415typedef 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 422typedef int 423(WSPAPI *LPWSCDEINSTALLPROVIDER)( 424 _In_ LPGUID lpProviderId, 425 _Out_ LPINT lpErrno); 426 427typedef 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 435typedef 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 442typedef 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 450typedef INT 451(WSPAPI *LPWSCUNINSTALLNAMESPACE)( 452 _In_ LPGUID lpProviderId); 453 454typedef INT 455(WSPAPI *LPWSCENABLENSPROVIDER)( 456 _In_ LPGUID lpProviderId, 457 _In_ BOOL fEnable); 458 459/* Service provider procedure table */ 460typedef 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 493typedef INT 494(WSAAPI *LPNSPCLEANUP)( 495 _In_ LPGUID lpProviderId); 496 497typedef 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 505typedef 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) 513typedef 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 526typedef INT 527(WSAAPI *LPNSPLOOKUPSERVICEEND)( 528 _In_ HANDLE hLookup); 529 530typedef 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 538typedef INT 539(WSAAPI *LPNSPINSTALLSERVICECLASS)( 540 _In_ LPGUID lpProviderId, 541 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo); 542 543typedef INT 544(WSAAPI *LPNSPREMOVESERVICECLASS)( 545 _In_ LPGUID lpProviderId, 546 _In_ LPGUID lpServiceClassId); 547 548typedef INT 549(WSAAPI *LPNSPGETSERVICECLASSINFO)( 550 _In_ LPGUID lpProviderId, 551 _In_ LPDWORD lpdwBufSize, 552 _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo); 553 554typedef 555_Must_inspect_result_ 556INT 557(WSAAPI *LPNSPV2STARTUP)( 558 _In_ LPGUID lpProviderId, 559 _Outptr_ LPVOID *ppvClientSessionArg); 560 561typedef INT 562(WSAAPI *LPNSPV2CLEANUP)( 563 _In_ LPGUID lpProviderId, 564 _In_ LPVOID pvClientSessionArg); 565 566typedef 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 574typedef 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 582typedef INT 583(WSAAPI *LPNSPV2LOOKUPSERVICEEND)( 584 _In_ HANDLE hLookup); 585 586typedef 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 595typedef VOID 596(WSAAPI *LPNSPV2CLIENTSESSIONRUNDOWN)( 597 _In_ LPGUID lpProviderId, 598 _In_ LPVOID pvClientSessionArg); 599 600/* Service Provider upcall table */ 601typedef 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 619typedef 620_Must_inspect_result_ 621int 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 641typedef enum _WSC_PROVIDER_INFO_TYPE { 642 ProviderInfoLspCategories, 643 ProviderInfoAudit 644} WSC_PROVIDER_INFO_TYPE ; 645 646typedef struct _WSC_PROVIDER_AUDIT_INFO { 647 DWORD RecordSize; 648 PVOID Reserved; 649} WSC_PROVIDER_AUDIT_INFO; 650 651#endif /* (_WIN32_WINNT >= 0x0600) */ 652 653typedef 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 668typedef 669_Must_inspect_result_ 670INT 671(WSAAPI *LPNSPSTARTUP)( 672 _In_ LPGUID lpProviderId, 673 _Inout_ LPNSP_ROUTINE lpnspRoutines); 674 675typedef 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; 687typedef const NSPV2_ROUTINE *PCNSPV2_ROUTINE, *LPCNSPV2_ROUTINE; 688 689_Must_inspect_result_ 690int 691WSPAPI 692WSPStartup( 693 _In_ WORD wVersionRequested, 694 _In_ LPWSPDATA lpWSPData, 695 _In_ LPWSAPROTOCOL_INFOW lpProtocolInfo, 696 _In_ WSPUPCALLTABLE UpcallTable, 697 _Out_ LPWSPPROC_TABLE lpProcTable); 698 699int 700WSPAPI 701WSCEnumProtocols( 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 709int 710WSPAPI 711WPUOpenCurrentThread( 712 _Out_ LPWSATHREADID lpThreadId, 713 _Out_ LPINT lpErrno); 714 715int 716WSPAPI 717WPUCloseThread( 718 _In_ LPWSATHREADID lpThreadId, 719 _Out_ LPINT lpErrno); 720 721#define WSCEnumNameSpaceProviders WSAEnumNameSpaceProvidersW 722#define LPFN_WSCENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW 723 724int 725WSPAPI 726WSCUpdateProvider( 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 733typedef 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 743int 744WSPAPI 745WSCEnumProtocols32( 746 _In_opt_ LPINT lpiProtocols, 747 _Out_writes_bytes_(*lpdwBufferLength) LPWSAPROTOCOL_INFOW lpProtocolBuffer, 748 _Inout_ LPDWORD lpdwBufferLength, 749 _Out_ LPINT lpErrno); 750 751int 752WSPAPI 753WSCDeinstallProvider32( 754 _In_ LPGUID lpProviderId, 755 _Out_ LPINT lpErrno); 756 757int 758WSPAPI 759WSCInstallProvider64_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) 767int 768WSPAPI 769WSCGetProviderPath32( 770 _In_ LPGUID lpProviderId, 771 _Out_writes_to_(*lpProviderDllPathLen, *lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath, 772 _Inout_ LPINT lpProviderDllPathLen, 773 _Out_ LPINT lpErrno); 774 775int 776WSPAPI 777WSCUpdateProvider32( 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 784INT 785WSAAPI 786WSCEnumNameSpaceProviders32( 787 _Inout_ LPDWORD lpdwBufferLength, 788 _Out_writes_bytes_(*lpdwBufferLength) LPWSANAMESPACE_INFOW lpnspBuffer); 789 790INT 791WSPAPI 792WSCInstallNameSpace32( 793 _In_ LPWSTR lpszIdentifier, 794 _In_ LPWSTR lpszPathName, 795 _In_ DWORD dwNameSpace, 796 _In_ DWORD dwVersion, 797 _In_ LPGUID lpProviderId); 798 799INT 800WSPAPI 801WSCUnInstallNameSpace32( 802 _In_ LPGUID lpProviderId); 803 804INT 805WSPAPI 806WSCEnableNSProvider32( 807 _In_ LPGUID lpProviderId, 808 _In_ BOOL fEnable); 809 810#endif /* defined(_WIN64) */ 811 812#endif /* defined(_WIN32_WINNT >= 0x0501) */ 813 814int 815WSPAPI 816WSCDeinstallProvider( 817 _In_ LPGUID lpProviderId, 818 _Out_ LPINT lpErrno); 819 820int 821WSPAPI 822WSCInstallProvider( 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 829int 830WSPAPI 831WSCGetProviderPath( 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 839int 840WSPAPI 841WSCInstallQOSTemplate( 842 _In_ const LPGUID Guid, 843 _In_ LPWSABUF QosName, 844 _In_ LPQOS Qos); 845 846typedef int 847(WSPAPI *LPWSCINSTALLQOSTEMPLATE)( 848 _In_ const LPGUID Guid, 849 _In_ LPWSABUF QosName, 850 _In_ LPQOS Qos); 851 852int 853WSPAPI 854WSCRemoveQOSTemplate( 855 _In_ const LPGUID Guid, 856 _In_ LPWSABUF QosName); 857 858typedef 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 867int 868WSPAPI 869WSCSetProviderInfo( 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 877int 878WSPAPI 879WSCGetProviderInfo( 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, 884 _In_ DWORD Flags, 885 _Out_ LPINT lpErrno); 886 887int 888WSPAPI 889WSCSetApplicationCategory( 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 898int 899WSPAPI 900WSCGetApplicationCategory( 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 911INT 912WSPAPI 913WSCInstallNameSpaceEx( 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 921INT 922WSAAPI 923WSAAdvertiseProvider( 924 _In_ const GUID *puuidProviderId, 925 _In_ const LPCNSPV2_ROUTINE pNSPv2Routine); 926 927INT 928WSAAPI 929WSAUnadvertiseProvider( 930 _In_ const GUID *puuidProviderId); 931 932INT 933WSAAPI 934WSAProviderCompleteAsyncCall( 935 _In_ HANDLE hAsyncCall, 936 _In_ INT iRetCode); 937 938#if defined(_WIN64) 939 940int 941WSPAPI 942WSCSetProviderInfo32( 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 950int 951WSPAPI 952WSCGetProviderInfo32( 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 960INT 961WSAAPI 962WSCEnumNameSpaceProvidersEx32( 963 _Inout_ LPDWORD lpdwBufferLength, 964 _Out_writes_bytes_(*lpdwBufferLength) LPWSANAMESPACE_INFOEXW lpnspBuffer); 965 966INT 967WSPAPI 968WSCInstallNameSpaceEx32( 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) 979int 980WSPAPI 981WSCInstallProviderAndChains64_32( 982#else 983int 984WSPAPI 985WSCInstallProviderAndChains( 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 1001BOOL 1002WSPAPI 1003WPUCloseEvent( 1004 _In_ WSAEVENT hEvent, 1005 _Out_ LPINT lpErrno); 1006 1007int 1008WSPAPI 1009WPUCloseSocketHandle( 1010 _In_ SOCKET s, 1011 _Out_ LPINT lpErrno); 1012 1013WSAEVENT 1014WSPAPI 1015WPUCreateEvent( 1016 _Out_ LPINT lpErrno); 1017 1018SOCKET 1019WSPAPI 1020WPUCreateSocketHandle( 1021 _In_ DWORD dwCatalogEntryId, 1022 _In_ DWORD_PTR dwContext, 1023 _Out_ LPINT lpErrno); 1024 1025int 1026WSPAPI 1027WPUFDIsSet( 1028 _In_ SOCKET s, 1029 _In_ fd_set FAR *fdset); 1030 1031int 1032WSPAPI 1033WPUGetProviderPath( 1034 _In_ LPGUID lpProviderId, 1035 _Out_writes_(*lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath, 1036 _Inout_ LPINT lpProviderDllPathLen, 1037 _Out_ LPINT lpErrno); 1038 1039SOCKET 1040WSPAPI 1041WPUModifyIFSHandle( 1042 _In_ DWORD dwCatalogEntryId, 1043 _In_ SOCKET ProposedHandle, 1044 _Out_ LPINT lpErrno); 1045 1046BOOL 1047WSPAPI 1048WPUPostMessage( 1049 _In_ HWND hWnd, 1050 _In_ UINT Msg, 1051 _In_ WPARAM wParam, 1052 _In_ LPARAM lParam); 1053 1054int 1055WSPAPI 1056WPUQueryBlockingCallback( 1057 _In_ DWORD dwCatalogEntryId, 1058 _Out_ LPBLOCKINGCALLBACK FAR *lplpfnCallback, 1059 _Out_ PDWORD_PTR lpdwContext, 1060 _Out_ LPINT lpErrno); 1061 1062int 1063WSPAPI 1064WPUQuerySocketHandleContext( 1065 _In_ SOCKET s, 1066 _Out_ PDWORD_PTR lpContext, 1067 _Out_ LPINT lpErrno); 1068 1069int 1070WSPAPI 1071WPUQueueApc( 1072 _In_ LPWSATHREADID lpThreadId, 1073 _In_ LPWSAUSERAPC lpfnUserApc, 1074 _In_ DWORD_PTR dwContext, 1075 _Out_ LPINT lpErrno); 1076 1077BOOL 1078WSPAPI 1079WPUResetEvent( 1080 _In_ WSAEVENT hEvent, 1081 _Out_ LPINT lpErrno); 1082 1083BOOL 1084WSPAPI 1085WPUSetEvent( 1086 _In_ WSAEVENT hEvent, 1087 _Out_ LPINT lpErrno); 1088 1089int 1090WSPAPI 1091WPUCompleteOverlappedRequest( 1092 _In_ SOCKET s, 1093 _Inout_ LPWSAOVERLAPPED lpOverlapped, 1094 _In_ DWORD dwError, 1095 _In_ DWORD cbTransferred, 1096 _Out_ LPINT lpErrno); 1097 1098INT 1099WSPAPI 1100WSCInstallNameSpace( 1101 _In_ LPWSTR lpszIdentifier, 1102 _In_ LPWSTR lpszPathName, 1103 _In_ DWORD dwNameSpace, 1104 _In_ DWORD dwVersion, 1105 _In_ LPGUID lpProviderId); 1106 1107INT 1108WSPAPI 1109WSCUnInstallNameSpace( 1110 _In_ LPGUID lpProviderId); 1111 1112INT 1113WSPAPI 1114WSCEnableNSProvider( 1115 _In_ LPGUID lpProviderId, 1116 _In_ BOOL fEnable); 1117 1118_Must_inspect_result_ 1119INT 1120WSAAPI 1121NSPStartup( 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