home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / ws2spi.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  19KB  |  980 lines

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