home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / ws2spi.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  19.5 KB  |  1,020 lines

  1. /* WS2SPI.H -- definitions to be used with the WinSock service provider.
  2.  *
  3.  * Copyright (c) 1997-1999  Microsoft Corporation
  4.  *
  5.  * This header file corresponds to version 2.2.x of the WinSock SPI
  6.  * specification.
  7.  *
  8.  * This file includes parts which are Copyright (c) 1982-1986 Regents
  9.  * of the University of California.  All rights reserved.  The
  10.  * Berkeley Software License Agreement specifies the terms and
  11.  * conditions for redistribution.
  12.  */
  13.  
  14. #ifndef _WINSOCK2SPI_
  15. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  16. #define _WINSOCK2SPI_
  17.  
  18. #if _MSC_VER > 1000
  19. #pragma once
  20. #endif
  21.  
  22. /*
  23.  * Ensure structures are packed consistently.
  24.  */
  25.  
  26. #if !defined(_WIN64)
  27. #include <pshpack4.h>
  28. #endif
  29.  
  30. /*
  31.  * Pull in WINSOCK2.H if necessary
  32.  */
  33.  
  34. #ifndef _WINSOCK2API_
  35. #include <winsock2.h>
  36. #endif /* _WINSOCK2API_ */
  37.  
  38. #define WSPDESCRIPTION_LEN 255
  39.  
  40. #define WSS_OPERATION_IN_PROGRESS 0x00000103L
  41.  
  42. typedef struct WSPData {
  43.     WORD         wVersion;
  44.     WORD         wHighVersion;
  45.     WCHAR        szDescription[WSPDESCRIPTION_LEN+1];
  46. } WSPDATA, FAR * LPWSPDATA;
  47.  
  48. typedef struct _WSATHREADID {
  49.     HANDLE      ThreadHandle;
  50.     DWORD_PTR    Reserved;
  51. } WSATHREADID, FAR * LPWSATHREADID;
  52.  
  53. /*
  54.  * SPI function linkage.
  55.  */
  56.  
  57. #define WSPAPI WSAAPI
  58.  
  59.  
  60. #ifdef __cplusplus
  61. extern "C" {
  62. #endif
  63.  
  64. /*
  65.  * Pointer to a blocking callback. A pointer to a blocking callback is
  66.  * returned from the WPUQueryBlockingCallback() upcall. Note that this
  67.  * function's signature is not identical to an application's blocking
  68.  * hook function.
  69.  */
  70.  
  71. typedef
  72. BOOL
  73. (CALLBACK FAR * LPBLOCKINGCALLBACK)(
  74.     DWORD_PTR dwContext
  75.     );
  76.  
  77. /*
  78.  * Pointer to a user APC function. This is used as a parameter to the
  79.  * WPUQueueUserApc() upcall. Note that this function's signature is not
  80.  * identical to an application's completion routine.
  81.  */
  82.  
  83. typedef
  84. VOID
  85. (CALLBACK FAR * LPWSAUSERAPC)(
  86.     DWORD_PTR dwContext
  87.     );
  88.  
  89. /*
  90.  * Pointers to the individual entries in a service provider's proc table.
  91.  */
  92.  
  93. typedef
  94. SOCKET
  95. (WSPAPI * LPWSPACCEPT)(
  96.     SOCKET s,
  97.     struct sockaddr FAR * addr,
  98.     LPINT addrlen,
  99.     LPCONDITIONPROC lpfnCondition,
  100.     DWORD_PTR dwCallbackData,
  101.     LPINT lpErrno
  102.     );
  103.  
  104. typedef
  105. INT
  106. (WSPAPI * LPWSPADDRESSTOSTRING)(
  107.     LPSOCKADDR lpsaAddress,
  108.     DWORD dwAddressLength,
  109.     LPWSAPROTOCOL_INFOW lpProtocolInfo,
  110.     LPWSTR lpszAddressString,
  111.     LPDWORD lpdwAddressStringLength,
  112.     LPINT lpErrno
  113.     );
  114.  
  115. typedef
  116. int
  117. (WSPAPI * LPWSPASYNCSELECT)(
  118.     SOCKET s,
  119.     HWND hWnd,
  120.     unsigned int wMsg,
  121.     long lEvent,
  122.     LPINT lpErrno
  123.     );
  124.  
  125. typedef
  126. int
  127. (WSPAPI * LPWSPBIND)(
  128.     SOCKET s,
  129.     const struct sockaddr FAR * name,
  130.     int namelen,
  131.     LPINT lpErrno
  132.     );
  133.  
  134. typedef
  135. int
  136. (WSPAPI * LPWSPCANCELBLOCKINGCALL)(
  137.     LPINT lpErrno
  138.     );
  139.  
  140. typedef
  141. int
  142. (WSPAPI * LPWSPCLEANUP)(
  143.     LPINT lpErrno
  144.     );
  145.  
  146. typedef
  147. int
  148. (WSPAPI * LPWSPCLOSESOCKET)(
  149.     SOCKET s,
  150.     LPINT lpErrno
  151.     );
  152.  
  153. typedef
  154. int
  155. (WSPAPI * LPWSPCONNECT)(
  156.     SOCKET s,
  157.     const struct sockaddr FAR * name,
  158.     int namelen,
  159.     LPWSABUF lpCallerData,
  160.     LPWSABUF lpCalleeData,
  161.     LPQOS lpSQOS,
  162.     LPQOS lpGQOS,
  163.     LPINT lpErrno
  164.     );
  165.  
  166. typedef
  167. int
  168. (WSPAPI * LPWSPDUPLICATESOCKET)(
  169.     SOCKET s,
  170.     DWORD dwProcessId,
  171.     LPWSAPROTOCOL_INFOW lpProtocolInfo,
  172.     LPINT lpErrno
  173.     );
  174.  
  175. typedef
  176. int
  177. (WSPAPI * LPWSPENUMNETWORKEVENTS)(
  178.     SOCKET s,
  179.     WSAEVENT hEventObject,
  180.     LPWSANETWORKEVENTS lpNetworkEvents,
  181.     LPINT lpErrno
  182.     );
  183.  
  184. typedef
  185. int
  186. (WSPAPI * LPWSPEVENTSELECT)(
  187.     SOCKET s,
  188.     WSAEVENT hEventObject,
  189.     long lNetworkEvents,
  190.     LPINT lpErrno
  191.     );
  192.  
  193. typedef
  194. BOOL
  195. (WSPAPI * LPWSPGETOVERLAPPEDRESULT)(
  196.     SOCKET s,
  197.     LPWSAOVERLAPPED lpOverlapped,
  198.     LPDWORD lpcbTransfer,
  199.     BOOL fWait,
  200.     LPDWORD lpdwFlags,
  201.     LPINT lpErrno
  202.     );
  203.  
  204. typedef
  205. int
  206. (WSPAPI * LPWSPGETPEERNAME)(
  207.     SOCKET s,
  208.     struct sockaddr FAR * name,
  209.     LPINT namelen,
  210.     LPINT lpErrno
  211.     );
  212.  
  213. typedef
  214. int
  215. (WSPAPI * LPWSPGETSOCKNAME)(
  216.     SOCKET s,
  217.     struct sockaddr FAR * name,
  218.     LPINT namelen,
  219.     LPINT lpErrno
  220.     );
  221.  
  222. typedef
  223. int
  224. (WSPAPI * LPWSPGETSOCKOPT)(
  225.     SOCKET s,
  226.     int level,
  227.     int optname,
  228.     char FAR * optval,
  229.     LPINT optlen,
  230.     LPINT lpErrno
  231.     );
  232.  
  233. typedef
  234. BOOL
  235. (WSPAPI * LPWSPGETQOSBYNAME)(
  236.     SOCKET s,
  237.     LPWSABUF lpQOSName,
  238.     LPQOS lpQOS,
  239.     LPINT lpErrno
  240.     );
  241.  
  242. typedef
  243. int
  244. (WSPAPI * LPWSPIOCTL)(
  245.     SOCKET s,
  246.     DWORD dwIoControlCode,
  247.     LPVOID lpvInBuffer,
  248.     DWORD cbInBuffer,
  249.     LPVOID lpvOutBuffer,
  250.     DWORD cbOutBuffer,
  251.     LPDWORD lpcbBytesReturned,
  252.     LPWSAOVERLAPPED lpOverlapped,
  253.     LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
  254.     LPWSATHREADID lpThreadId,
  255.     LPINT lpErrno
  256.     );
  257.  
  258. typedef
  259. SOCKET
  260. (WSPAPI * LPWSPJOINLEAF)(
  261.     SOCKET s,
  262.     const struct sockaddr FAR * name,
  263.     int namelen,
  264.     LPWSABUF lpCallerData,
  265.     LPWSABUF lpCalleeData,
  266.     LPQOS lpSQOS,
  267.     LPQOS lpGQOS,
  268.     DWORD dwFlags,
  269.     LPINT lpErrno
  270.     );
  271.  
  272. typedef
  273. int
  274. (WSPAPI * LPWSPLISTEN)(
  275.     SOCKET s,
  276.     int backlog,
  277.     LPINT lpErrno
  278.     );
  279.  
  280. typedef
  281. int
  282. (WSPAPI * LPWSPRECV)(
  283.     SOCKET s,
  284.     LPWSABUF lpBuffers,
  285.     DWORD dwBufferCount,
  286.     LPDWORD lpNumberOfBytesRecvd,
  287.     LPDWORD lpFlags,
  288.     LPWSAOVERLAPPED lpOverlapped,
  289.     LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
  290.     LPWSATHREADID lpThreadId,
  291.     LPINT lpErrno
  292.     );
  293.  
  294. typedef
  295. int
  296. (WSPAPI * LPWSPRECVDISCONNECT)(
  297.     SOCKET s,
  298.     LPWSABUF lpInboundDisconnectData,
  299.     LPINT lpErrno
  300.     );
  301.  
  302. typedef
  303. int
  304. (WSPAPI * LPWSPRECVFROM)(
  305.     SOCKET s,
  306.     LPWSABUF lpBuffers,
  307.     DWORD dwBufferCount,
  308.     LPDWORD lpNumberOfBytesRecvd,
  309.     LPDWORD lpFlags,
  310.     struct sockaddr FAR * lpFrom,
  311.     LPINT lpFromlen,
  312.     LPWSAOVERLAPPED lpOverlapped,
  313.     LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
  314.     LPWSATHREADID lpThreadId,
  315.     LPINT lpErrno
  316.     );
  317.  
  318. typedef
  319. int
  320. (WSPAPI * LPWSPSELECT)(
  321.     int nfds,
  322.     fd_set FAR * readfds,
  323.     fd_set FAR * writefds,
  324.     fd_set FAR * exceptfds,
  325.     const struct timeval FAR * timeout,
  326.     LPINT lpErrno
  327.     );
  328.  
  329. typedef
  330. int
  331. (WSPAPI * LPWSPSEND)(
  332.     SOCKET s,
  333.     LPWSABUF lpBuffers,
  334.     DWORD dwBufferCount,
  335.     LPDWORD lpNumberOfBytesSent,
  336.     DWORD dwFlags,
  337.     LPWSAOVERLAPPED lpOverlapped,
  338.     LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
  339.     LPWSATHREADID lpThreadId,
  340.     LPINT lpErrno
  341.     );
  342.  
  343. typedef
  344. int
  345. (WSPAPI * LPWSPSENDDISCONNECT)(
  346.     SOCKET s,
  347.     LPWSABUF lpOutboundDisconnectData,
  348.     LPINT lpErrno
  349.     );
  350.  
  351. typedef
  352. int
  353. (WSPAPI * LPWSPSENDTO)(
  354.     SOCKET s,
  355.     LPWSABUF lpBuffers,
  356.     DWORD dwBufferCount,
  357.     LPDWORD lpNumberOfBytesSent,
  358.     DWORD dwFlags,
  359.     const struct sockaddr FAR * lpTo,
  360.     int iTolen,
  361.     LPWSAOVERLAPPED lpOverlapped,
  362.     LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
  363.     LPWSATHREADID lpThreadId,
  364.     LPINT lpErrno
  365.     );
  366.  
  367. typedef
  368. int
  369. (WSPAPI * LPWSPSETSOCKOPT)(
  370.     SOCKET s,
  371.     int level,
  372.     int optname,
  373.     const char FAR * optval,
  374.     int optlen,
  375.     LPINT lpErrno
  376.     );
  377.  
  378. typedef
  379. int
  380. (WSPAPI * LPWSPSHUTDOWN)(
  381.     SOCKET s,
  382.     int how,
  383.     LPINT lpErrno
  384.     );
  385.  
  386. typedef
  387. SOCKET
  388. (WSPAPI * LPWSPSOCKET)(
  389.     int af,
  390.     int type,
  391.     int protocol,
  392.     LPWSAPROTOCOL_INFOW lpProtocolInfo,
  393.     GROUP g,
  394.     DWORD dwFlags,
  395.     LPINT lpErrno
  396.     );
  397.  
  398. typedef
  399. INT
  400. (WSPAPI * LPWSPSTRINGTOADDRESS)(
  401.     LPWSTR AddressString,
  402.     INT AddressFamily,
  403.     LPWSAPROTOCOL_INFOW lpProtocolInfo,
  404.     LPSOCKADDR lpAddress,
  405.     LPINT lpAddressLength,
  406.     LPINT lpErrno
  407.     );
  408.  
  409. /*
  410.  * A service provider proc table. This structure is returned by value
  411.  * from the service provider's WSPStartup() entrypoint.
  412.  */
  413.  
  414. typedef struct _WSPPROC_TABLE {
  415.  
  416.     LPWSPACCEPT              lpWSPAccept;
  417.     LPWSPADDRESSTOSTRING     lpWSPAddressToString;
  418.     LPWSPASYNCSELECT         lpWSPAsyncSelect;
  419.     LPWSPBIND                lpWSPBind;
  420.     LPWSPCANCELBLOCKINGCALL  lpWSPCancelBlockingCall;
  421.     LPWSPCLEANUP             lpWSPCleanup;
  422.     LPWSPCLOSESOCKET         lpWSPCloseSocket;
  423.     LPWSPCONNECT             lpWSPConnect;
  424.     LPWSPDUPLICATESOCKET     lpWSPDuplicateSocket;
  425.     LPWSPENUMNETWORKEVENTS   lpWSPEnumNetworkEvents;
  426.     LPWSPEVENTSELECT         lpWSPEventSelect;
  427.     LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult;
  428.     LPWSPGETPEERNAME         lpWSPGetPeerName;
  429.     LPWSPGETSOCKNAME         lpWSPGetSockName;
  430.     LPWSPGETSOCKOPT          lpWSPGetSockOpt;
  431.     LPWSPGETQOSBYNAME        lpWSPGetQOSByName;
  432.     LPWSPIOCTL               lpWSPIoctl;
  433.     LPWSPJOINLEAF            lpWSPJoinLeaf;
  434.     LPWSPLISTEN              lpWSPListen;
  435.     LPWSPRECV                lpWSPRecv;
  436.     LPWSPRECVDISCONNECT      lpWSPRecvDisconnect;
  437.     LPWSPRECVFROM            lpWSPRecvFrom;
  438.     LPWSPSELECT              lpWSPSelect;
  439.     LPWSPSEND                lpWSPSend;
  440.     LPWSPSENDDISCONNECT      lpWSPSendDisconnect;
  441.     LPWSPSENDTO              lpWSPSendTo;
  442.     LPWSPSETSOCKOPT          lpWSPSetSockOpt;
  443.     LPWSPSHUTDOWN            lpWSPShutdown;
  444.     LPWSPSOCKET              lpWSPSocket;
  445.     LPWSPSTRINGTOADDRESS     lpWSPStringToAddress;
  446.  
  447. } WSPPROC_TABLE, FAR * LPWSPPROC_TABLE;
  448.  
  449. /*
  450.  * Pointers to the individual entries in the upcall table.
  451.  */
  452.  
  453. typedef
  454. BOOL
  455. (WSPAPI * LPWPUCLOSEEVENT)(
  456.     WSAEVENT hEvent,
  457.     LPINT lpErrno
  458.     );
  459.  
  460. typedef
  461. int
  462. (WSPAPI * LPWPUCLOSESOCKETHANDLE)(
  463.     SOCKET s,
  464.     LPINT lpErrno
  465.     );
  466.  
  467. typedef
  468. WSAEVENT
  469. (WSPAPI * LPWPUCREATEEVENT)(
  470.     LPINT lpErrno
  471.     );
  472.  
  473. typedef
  474. SOCKET
  475. (WSPAPI * LPWPUCREATESOCKETHANDLE)(
  476.     DWORD dwCatalogEntryId,
  477.     DWORD_PTR dwContext,
  478.     LPINT lpErrno
  479.     );
  480.  
  481. typedef
  482. int
  483. (WSPAPI * LPWPUFDISSET)(
  484.     SOCKET s,
  485.     fd_set FAR * fdset
  486.     );
  487.  
  488. typedef
  489. int
  490. (WSPAPI * LPWPUGETPROVIDERPATH)(
  491.     LPGUID lpProviderId,
  492.     WCHAR FAR * lpszProviderDllPath,
  493.     LPINT lpProviderDllPathLen,
  494.     LPINT lpErrno
  495.     );
  496.  
  497. typedef
  498. SOCKET
  499. (WSPAPI * LPWPUMODIFYIFSHANDLE)(
  500.     DWORD dwCatalogEntryId,
  501.     SOCKET ProposedHandle,
  502.     LPINT lpErrno
  503.     );
  504.  
  505. typedef
  506. BOOL
  507. (WSPAPI * LPWPUPOSTMESSAGE)(
  508.     HWND hWnd,
  509.     UINT Msg,
  510.     WPARAM wParam,
  511.     LPARAM lParam
  512.     );
  513.  
  514. typedef
  515. int
  516. (WSPAPI * LPWPUQUERYBLOCKINGCALLBACK)(
  517.     DWORD dwCatalogEntryId,
  518.     LPBLOCKINGCALLBACK FAR * lplpfnCallback,
  519.     PDWORD_PTR lpdwContext,
  520.     LPINT lpErrno
  521.     );
  522.  
  523. typedef
  524. int
  525. (WSPAPI * LPWPUQUERYSOCKETHANDLECONTEXT)(
  526.     SOCKET s,
  527.     PDWORD_PTR lpContext,
  528.     LPINT lpErrno
  529.     );
  530.  
  531. typedef
  532. int
  533. (WSPAPI * LPWPUQUEUEAPC)(
  534.     LPWSATHREADID lpThreadId,
  535.     LPWSAUSERAPC lpfnUserApc,
  536.     DWORD_PTR dwContext,
  537.     LPINT lpErrno
  538.     );
  539.  
  540. typedef
  541. BOOL
  542. (WSPAPI * LPWPURESETEVENT)(
  543.     WSAEVENT hEvent,
  544.     LPINT lpErrno
  545.     );
  546.  
  547. typedef
  548. BOOL
  549. (WSPAPI * LPWPUSETEVENT)(
  550.     WSAEVENT hEvent,
  551.     LPINT lpErrno
  552.     );
  553.  
  554. typedef
  555. int
  556. (WSPAPI * LPWPUOPENCURRENTTHREAD)(
  557.     LPWSATHREADID lpThreadId,
  558.     LPINT lpErrno
  559.     );
  560.  
  561. typedef
  562. int
  563. (WSPAPI * LPWPUCLOSETHREAD)(
  564.     LPWSATHREADID lpThreadId,
  565.     LPINT lpErrno
  566.     );
  567.  
  568.  
  569. // Available only directly from ws2_32.dll
  570. typedef
  571. int
  572. (WSPAPI * LPWPUCOMPLETEOVERLAPPEDREQUEST) (
  573.     IN SOCKET s,     
  574.     LPWSAOVERLAPPED lpOverlapped,     
  575.     DWORD dwError,     
  576.     DWORD cbTransferred,     
  577.     LPINT lpErrno
  578. );
  579.  
  580. /*
  581.  * The upcall table. This structure is passed by value to the service
  582.  * provider's WSPStartup() entrypoint.
  583.  */
  584.  
  585. typedef struct _WSPUPCALLTABLE {
  586.  
  587.     LPWPUCLOSEEVENT               lpWPUCloseEvent;
  588.     LPWPUCLOSESOCKETHANDLE        lpWPUCloseSocketHandle;
  589.     LPWPUCREATEEVENT              lpWPUCreateEvent;
  590.     LPWPUCREATESOCKETHANDLE       lpWPUCreateSocketHandle;
  591.     LPWPUFDISSET                  lpWPUFDIsSet;
  592.     LPWPUGETPROVIDERPATH          lpWPUGetProviderPath;
  593.     LPWPUMODIFYIFSHANDLE          lpWPUModifyIFSHandle;
  594.     LPWPUPOSTMESSAGE              lpWPUPostMessage;
  595.     LPWPUQUERYBLOCKINGCALLBACK    lpWPUQueryBlockingCallback;
  596.     LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
  597.     LPWPUQUEUEAPC                 lpWPUQueueApc;
  598.     LPWPURESETEVENT               lpWPUResetEvent;
  599.     LPWPUSETEVENT                 lpWPUSetEvent;
  600.     LPWPUOPENCURRENTTHREAD        lpWPUOpenCurrentThread;
  601.     LPWPUCLOSETHREAD              lpWPUCloseThread;
  602.  
  603. } WSPUPCALLTABLE, FAR * LPWSPUPCALLTABLE;
  604.  
  605. /*
  606.  *  WinSock 2 SPI socket function prototypes
  607.  */
  608.  
  609. int
  610. WSPAPI
  611. WSPStartup(
  612.     IN WORD wVersionRequested,
  613.     OUT LPWSPDATA lpWSPData,
  614.     IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
  615.     IN WSPUPCALLTABLE UpcallTable,
  616.     OUT LPWSPPROC_TABLE lpProcTable
  617.     );
  618.  
  619. typedef
  620. int
  621. (WSPAPI * LPWSPSTARTUP)(
  622.     WORD wVersionRequested,
  623.     LPWSPDATA lpWSPData,
  624.     LPWSAPROTOCOL_INFOW lpProtocolInfo,
  625.     WSPUPCALLTABLE UpcallTable,
  626.     LPWSPPROC_TABLE lpProcTable
  627.     );
  628.  
  629. /*
  630.  * Installation and configuration entrypoints.
  631.  */
  632.  
  633. int
  634. WSPAPI
  635. WSCEnumProtocols(
  636.     IN LPINT lpiProtocols,
  637.     OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer,
  638.     IN OUT LPDWORD lpdwBufferLength,
  639.     OUT LPINT lpErrno
  640.     );
  641.  
  642. typedef
  643. int
  644. (WSPAPI * LPWSCENUMPROTOCOLS)(
  645.     LPINT lpiProtocols,
  646.     LPWSAPROTOCOL_INFOW lpProtocolBuffer,
  647.     LPDWORD lpdwBufferLength,
  648.     LPINT lpErrno
  649.     );
  650.  
  651. int
  652. WSPAPI
  653. WSCDeinstallProvider(
  654.     IN LPGUID lpProviderId,
  655.     OUT LPINT lpErrno
  656.     );
  657.  
  658. typedef
  659. int
  660. (WSPAPI * LPWSCDEINSTALLPROVIDER)(
  661.     LPGUID lpProviderId,
  662.     LPINT lpErrno
  663.     );
  664.  
  665. int
  666. WSPAPI
  667. WSCInstallProvider(
  668.     IN LPGUID lpProviderId,
  669.     IN const WCHAR FAR * lpszProviderDllPath,
  670.     IN const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
  671.     IN DWORD dwNumberOfEntries,
  672.     OUT LPINT lpErrno
  673.     );
  674.  
  675. typedef
  676. int
  677. (WSPAPI * LPWSCINSTALLPROVIDER)(
  678.     LPGUID lpProviderId,
  679.     const WCHAR FAR * lpszProviderDllPath,
  680.     const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
  681.     DWORD dwNumberOfEntries,
  682.     LPINT lpErrno
  683.     );
  684.  
  685. int
  686. WSPAPI
  687. WSCGetProviderPath(
  688.     IN LPGUID lpProviderId,
  689.     OUT WCHAR FAR * lpszProviderDllPath,
  690.     IN OUT LPINT lpProviderDllPathLen,
  691.     OUT LPINT lpErrno
  692.     );
  693.  
  694. typedef
  695. int
  696. (WSPAPI * LPWSCGETPROVIDERPATH)(
  697.     LPGUID lpProviderId,
  698.     WCHAR FAR * lpszProviderDllPath,
  699.     LPINT lpProviderDllPathLen,
  700.     LPINT lpErrno
  701.     );
  702.  
  703. int
  704. WSPAPI
  705. WSCInstallQOSTemplate (
  706.     IN  const LPGUID    Guid,
  707.     IN  LPWSABUF        QosName,
  708.     IN  LPQOS           Qos
  709.     );
  710.  
  711. typedef
  712. int
  713. (WSPAPI * LPWSCINSTALLQOSTEMPLATE)(
  714.     const LPGUID    Guid,
  715.     LPWSABUF        QosName,
  716.     LPQOS           Qos
  717.     );
  718.  
  719. int
  720. WSPAPI
  721. WSCRemoveQOSTemplate (
  722.     IN  const LPGUID    Guid,
  723.     IN  LPWSABUF        QosName
  724.     );
  725.  
  726. typedef
  727. int
  728. (WSPAPI * LPWSCREMOVEQOSTEMPLATE)(
  729.     const LPGUID    Guid,
  730.     LPWSABUF        QosName
  731.     );
  732.  
  733. /*
  734.  *  The following upcall function prototypes are only used by WinSock 2 DLL and
  735.  *  should not be used by any service providers.
  736.  */
  737.  
  738. BOOL
  739. WSPAPI
  740. WPUCloseEvent(
  741.     IN WSAEVENT hEvent,
  742.     OUT LPINT lpErrno
  743.     );
  744.  
  745. int
  746. WSPAPI
  747. WPUCloseSocketHandle(
  748.     IN SOCKET s,
  749.     OUT LPINT lpErrno
  750.     );
  751.  
  752. WSAEVENT
  753. WSPAPI
  754. WPUCreateEvent(
  755.     OUT LPINT lpErrno
  756.     );
  757.  
  758. SOCKET
  759. WSPAPI
  760. WPUCreateSocketHandle(
  761.     IN DWORD dwCatalogEntryId,
  762.     IN DWORD_PTR dwContext,
  763.     OUT LPINT lpErrno
  764.     );
  765.  
  766. int
  767. WSPAPI
  768. WPUFDIsSet(
  769.     IN SOCKET s,
  770.     IN fd_set FAR * fdset
  771.     );
  772.  
  773. int
  774. WSPAPI
  775. WPUGetProviderPath(
  776.     IN LPGUID lpProviderId,
  777.     OUT WCHAR FAR * lpszProviderDllPath,
  778.     IN OUT LPINT lpProviderDllPathLen,
  779.     OUT LPINT lpErrno
  780.     );
  781.  
  782. SOCKET
  783. WSPAPI
  784. WPUModifyIFSHandle(
  785.     IN DWORD dwCatalogEntryId,
  786.     IN SOCKET ProposedHandle,
  787.     OUT LPINT lpErrno
  788.     );
  789.  
  790. BOOL
  791. WSPAPI
  792. WPUPostMessage(
  793.     IN HWND hWnd,
  794.     IN UINT Msg,
  795.     IN WPARAM wParam,
  796.     IN LPARAM lParam
  797.     );
  798.  
  799. int
  800. WSPAPI
  801. WPUQueryBlockingCallback(
  802.     IN DWORD dwCatalogEntryId,
  803.     OUT LPBLOCKINGCALLBACK FAR * lplpfnCallback,
  804.     OUT PDWORD_PTR lpdwContext,
  805.     OUT LPINT lpErrno
  806.     );
  807.  
  808. int
  809. WSPAPI
  810. WPUQuerySocketHandleContext(
  811.     IN SOCKET s,
  812.     OUT PDWORD_PTR lpContext,
  813.     OUT LPINT lpErrno
  814.     );
  815.  
  816. int
  817. WSPAPI
  818. WPUQueueApc(
  819.     IN LPWSATHREADID lpThreadId,
  820.     IN LPWSAUSERAPC lpfnUserApc,
  821.     IN DWORD_PTR dwContext,
  822.     OUT LPINT lpErrno
  823.     );
  824.  
  825. BOOL
  826. WSPAPI
  827. WPUResetEvent(
  828.     IN WSAEVENT hEvent,
  829.     OUT LPINT lpErrno
  830.     );
  831.  
  832. BOOL
  833. WSPAPI
  834. WPUSetEvent(
  835.     IN WSAEVENT hEvent,
  836.     OUT LPINT lpErrno
  837.     );
  838.  
  839. int
  840. WSPAPI
  841. WPUCompleteOverlappedRequest (
  842.     SOCKET s,     
  843.     LPWSAOVERLAPPED lpOverlapped,     
  844.     DWORD dwError,     
  845.     DWORD cbTransferred,     
  846.     LPINT lpErrno
  847. );
  848.  
  849. /*
  850.  * Installing and uninstalling name space providers.
  851.  */
  852.  
  853. INT
  854. WSPAPI
  855. WSCInstallNameSpace (
  856.     IN LPWSTR lpszIdentifier,
  857.     IN LPWSTR lpszPathName,
  858.     IN DWORD dwNameSpace,
  859.     IN DWORD dwVersion,
  860.     IN LPGUID lpProviderId
  861.     );
  862.  
  863. typedef
  864. INT
  865. (WSPAPI * LPWSCINSTALLNAMESPACE)(
  866.     LPWSTR lpszIdentifier,
  867.     LPWSTR lpszPathName,
  868.     DWORD dwNameSpace,
  869.     DWORD dwVersion,
  870.     LPGUID lpProviderId
  871.     );
  872.  
  873. INT
  874. WSPAPI
  875. WSCUnInstallNameSpace (
  876.     IN LPGUID lpProviderId
  877.     );
  878.  
  879. typedef
  880. INT
  881. (WSPAPI * LPWSCUNINSTALLNAMESPACE)(
  882.     LPGUID lpProviderId
  883.     );
  884.  
  885. INT
  886. WSPAPI
  887. WSCEnableNSProvider (
  888.     IN LPGUID lpProviderId,
  889.     IN BOOL fEnable
  890.     );
  891.  
  892. typedef
  893. INT
  894. (WSPAPI * LPWSCENABLENSPROVIDER)(
  895.     LPGUID lpProviderId,
  896.     BOOL fEnable
  897.     );
  898.  
  899. /*
  900.  * Pointers to the individual entries in the namespace proc table.
  901.  */
  902.  
  903. typedef
  904. INT
  905. (WSAAPI * LPNSPCLEANUP)(
  906.     LPGUID lpProviderId
  907.     );
  908.  
  909. typedef
  910. INT
  911. (WSAAPI * LPNSPLOOKUPSERVICEBEGIN)(
  912.     LPGUID lpProviderId,
  913.     LPWSAQUERYSETW lpqsRestrictions,
  914.     LPWSASERVICECLASSINFOW lpServiceClassInfo,
  915.     DWORD dwControlFlags,
  916.     LPHANDLE lphLookup
  917.     );
  918.  
  919. typedef
  920. INT
  921. (WSAAPI * LPNSPLOOKUPSERVICENEXT)(
  922.     HANDLE hLookup,
  923.     DWORD dwControlFlags,
  924.     LPDWORD lpdwBufferLength,
  925.     LPWSAQUERYSETW lpqsResults
  926.     );
  927.  
  928. typedef
  929. INT
  930. (WSAAPI * LPNSPLOOKUPSERVICEEND)(
  931.     HANDLE hLookup
  932.     );
  933.  
  934. typedef
  935. INT
  936. (WSAAPI * LPNSPSETSERVICE)(
  937.     LPGUID lpProviderId,
  938.     LPWSASERVICECLASSINFOW lpServiceClassInfo,
  939.     LPWSAQUERYSETW lpqsRegInfo,
  940.     WSAESETSERVICEOP essOperation,
  941.     DWORD dwControlFlags
  942.     );
  943.  
  944. typedef
  945. INT
  946. (WSAAPI * LPNSPINSTALLSERVICECLASS)(
  947.     LPGUID lpProviderId,
  948.     LPWSASERVICECLASSINFOW lpServiceClassInfo
  949.     );
  950.  
  951. typedef
  952. INT
  953. (WSAAPI * LPNSPREMOVESERVICECLASS)(
  954.     LPGUID lpProviderId,
  955.     LPGUID lpServiceClassId
  956.     );
  957.  
  958. typedef
  959. INT
  960. (WSAAPI * LPNSPGETSERVICECLASSINFO)(
  961.     LPGUID lpProviderId,
  962.     LPDWORD lpdwBufSize,
  963.     LPWSASERVICECLASSINFOW lpServiceClassInfo
  964.     );
  965.  
  966. /*
  967.  * The name space service provider procedure table.
  968.  */
  969.  
  970. typedef struct _NSP_ROUTINE {
  971.  
  972.     /* Structure version information: */
  973.     DWORD           cbSize;
  974.     DWORD           dwMajorVersion;
  975.     DWORD           dwMinorVersion;
  976.  
  977.     /* Procedure-pointer table: */
  978.  
  979.     LPNSPCLEANUP             NSPCleanup;
  980.     LPNSPLOOKUPSERVICEBEGIN  NSPLookupServiceBegin;
  981.     LPNSPLOOKUPSERVICENEXT   NSPLookupServiceNext;
  982.     LPNSPLOOKUPSERVICEEND    NSPLookupServiceEnd;
  983.     LPNSPSETSERVICE          NSPSetService;
  984.     LPNSPINSTALLSERVICECLASS NSPInstallServiceClass;
  985.     LPNSPREMOVESERVICECLASS  NSPRemoveServiceClass;
  986.     LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo;
  987.  
  988. } NSP_ROUTINE, FAR * LPNSP_ROUTINE;
  989.  
  990. /*
  991.  * Startup procedures.
  992.  */
  993.  
  994. INT
  995. WSAAPI
  996. NSPStartup(
  997.     LPGUID lpProviderId,
  998.     LPNSP_ROUTINE lpnspRoutines
  999.     );
  1000.  
  1001. typedef
  1002. INT
  1003. (WSAAPI * LPNSPSTARTUP)(
  1004.     LPGUID lpProviderId,
  1005.     LPNSP_ROUTINE lpnspRoutines
  1006.     );
  1007.  
  1008.  
  1009. #ifdef __cplusplus
  1010. }
  1011. #endif
  1012.  
  1013. #if !defined(_WIN64)
  1014. #include <poppack.h>
  1015. #endif
  1016.  
  1017. #pragma option pop /*P_O_Pop*/
  1018. #endif  /* _WINSOCK2SPI_ */
  1019.  
  1020.