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.
25 #endif /* __cplusplus */
28 #define WSPDESCRIPTION_LEN 255
32 typedef struct WSPData
{
35 WCHAR szDescription
[WSPDESCRIPTION_LEN
+1];
36 } WSPDATA
, FAR
*LPWSPDATA
;
37 typedef struct _WSATHREADID
{
40 } WSATHREADID
, FAR
*LPWSATHREADID
;
42 typedef BOOL (CALLBACK FAR
*LPBLOCKINGCALLBACK
)(DWORD
);
43 typedef VOID (CALLBACK FAR
*LPWSAUSERAPC
)(DWORD
);
45 /* Prototypes for service provider procedure table */
46 typedef SOCKET (WSPAPI
*LPWSPACCEPT
)(SOCKET
,LPSOCKADDR
,LPINT
,LPCONDITIONPROC
,DWORD
,LPINT
);
47 typedef INT (WSPAPI
*LPWSPADDRESSTOSTRING
)(LPSOCKADDR
,DWORD
,LPWSAPROTOCOL_INFOW
,LPWSTR
,LPDWORD
,LPINT
);
48 typedef INT (WSPAPI
*LPWSPASYNCSELECT
)(SOCKET
,HWND
,UINT
,LONG
,LPINT
);
49 typedef INT (WSPAPI
*LPWSPBIND
)(SOCKET
,const struct sockaddr
*,INT
,LPINT
);
50 typedef INT (WSPAPI
*LPWSPCANCELBLOCKINGCALL
)(LPINT
);
51 typedef INT (WSPAPI
*LPWSPCLEANUP
)(LPINT
);
52 typedef INT (WSPAPI
*LPWSPCLOSESOCKET
)(SOCKET
,LPINT
);
53 typedef INT (WSPAPI
*LPWSPCONNECT
)(SOCKET
,const struct sockaddr
*,INT
,LPWSABUF
,LPWSABUF
,LPQOS
,LPQOS
,LPINT
);
54 typedef INT (WSPAPI
*LPWSPDUPLICATESOCKET
)(SOCKET
,DWORD
,LPWSAPROTOCOL_INFOW
,LPINT
);
55 typedef INT (WSPAPI
*LPWSPENUMNETWORKEVENTS
)(SOCKET
,WSAEVENT
,LPWSANETWORKEVENTS
,LPINT
);
56 typedef INT (WSPAPI
*LPWSPEVENTSELECT
)(SOCKET
,WSAEVENT
,LONG
,LPINT
);
57 typedef BOOL (WSPAPI
*LPWSPGETOVERLAPPEDRESULT
)(SOCKET
,LPWSAOVERLAPPED
,LPDWORD
,BOOL
,LPDWORD
,LPINT
);
58 typedef INT (WSPAPI
*LPWSPGETPEERNAME
)(SOCKET
,LPSOCKADDR
,LPINT
,LPINT
);
59 typedef BOOL (WSPAPI
*LPWSPGETQOSBYNAME
)(SOCKET
,LPWSABUF
,LPQOS
,LPINT
);
60 typedef INT (WSPAPI
*LPWSPGETSOCKNAME
)(SOCKET
,LPSOCKADDR
,LPINT
,LPINT
);
61 typedef INT (WSPAPI
*LPWSPGETSOCKOPT
)(SOCKET
,INT
,INT
,CHAR FAR
*,LPINT
,LPINT
);
62 typedef INT (WSPAPI
*LPWSPIOCTL
)(SOCKET
,DWORD
,LPVOID
,DWORD
,LPVOID
,DWORD
,LPDWORD
,
63 LPWSAOVERLAPPED
,LPWSAOVERLAPPED_COMPLETION_ROUTINE
,LPWSATHREADID
,LPINT
);
64 typedef SOCKET (WSPAPI
*LPWSPJOINLEAF
)(SOCKET
,const struct sockaddr
*,INT
,LPWSABUF
,LPWSABUF
,LPQOS
,LPQOS
,DWORD
,LPINT
);
65 typedef INT (WSPAPI
*LPWSPLISTEN
)(SOCKET
,INT
,LPINT
);
66 typedef INT (WSPAPI
*LPWSPRECV
)(SOCKET
,LPWSABUF
,DWORD
,LPDWORD
,LPDWORD
,
67 LPWSAOVERLAPPED
,LPWSAOVERLAPPED_COMPLETION_ROUTINE
,LPWSATHREADID
,LPINT
);
68 typedef INT (WSPAPI
*LPWSPRECVDISCONNECT
)(SOCKET
,LPWSABUF
,LPINT
);
69 typedef INT (WSPAPI
*LPWSPRECVFROM
)(SOCKET
,LPWSABUF
,DWORD
,LPDWORD
,LPDWORD
,LPSOCKADDR
,
70 LPINT
,LPWSAOVERLAPPED
,LPWSAOVERLAPPED_COMPLETION_ROUTINE
,LPWSATHREADID
,LPINT
);
71 typedef INT (WSPAPI
*LPWSPSELECT
)(INT
,LPFD_SET
,LPFD_SET
,LPFD_SET
,CONST LPTIMEVAL
,LPINT
);
72 typedef INT (WSPAPI
*LPWSPSEND
)(SOCKET
,LPWSABUF
,DWORD
,LPDWORD
,DWORD
,
73 LPWSAOVERLAPPED
,LPWSAOVERLAPPED_COMPLETION_ROUTINE
,LPWSATHREADID
,LPINT
);
74 typedef INT (WSPAPI
*LPWSPSENDDISCONNECT
)(SOCKET
,LPWSABUF
,LPINT
);
75 typedef INT (WSPAPI
*LPWSPSENDTO
)(SOCKET
,LPWSABUF
,DWORD
,LPDWORD
,DWORD
,const struct sockaddr
*,
76 INT
,LPWSAOVERLAPPED
,LPWSAOVERLAPPED_COMPLETION_ROUTINE
,LPWSATHREADID
,LPINT
);
77 typedef INT (WSPAPI
*LPWSPSETSOCKOPT
)(SOCKET
,INT
,INT
,CONST CHAR FAR
*,INT
,LPINT
);
78 typedef INT (WSPAPI
*LPWSPSHUTDOWN
)(SOCKET
,INT
,LPINT
);
79 typedef SOCKET (WSPAPI
*LPWSPSOCKET
)(INT
,INT
,INT
,LPWSAPROTOCOL_INFOW
,GROUP
,DWORD
,LPINT
);
80 typedef INT (WSPAPI
*LPWSPSTRINGTOADDRESS
)(LPWSTR
,INT
,LPWSAPROTOCOL_INFOW
,LPSOCKADDR
,LPINT
,LPINT
);
82 /* Service provider procedure table */
83 typedef struct _WSPPROC_TABLE
{
84 LPWSPACCEPT lpWSPAccept
;
85 LPWSPADDRESSTOSTRING lpWSPAddressToString
;
86 LPWSPASYNCSELECT lpWSPAsyncSelect
;
88 LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall
;
89 LPWSPCLEANUP lpWSPCleanup
;
90 LPWSPCLOSESOCKET lpWSPCloseSocket
;
91 LPWSPCONNECT lpWSPConnect
;
92 LPWSPDUPLICATESOCKET lpWSPDuplicateSocket
;
93 LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents
;
94 LPWSPEVENTSELECT lpWSPEventSelect
;
95 LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult
;
96 LPWSPGETPEERNAME lpWSPGetPeerName
;
97 LPWSPGETSOCKNAME lpWSPGetSockName
;
98 LPWSPGETSOCKOPT lpWSPGetSockOpt
;
99 LPWSPGETQOSBYNAME lpWSPGetQOSByName
;
100 LPWSPIOCTL lpWSPIoctl
;
101 LPWSPJOINLEAF lpWSPJoinLeaf
;
102 LPWSPLISTEN lpWSPListen
;
104 LPWSPRECVDISCONNECT lpWSPRecvDisconnect
;
105 LPWSPRECVFROM lpWSPRecvFrom
;
106 LPWSPSELECT lpWSPSelect
;
108 LPWSPSENDDISCONNECT lpWSPSendDisconnect
;
109 LPWSPSENDTO lpWSPSendTo
;
110 LPWSPSETSOCKOPT lpWSPSetSockOpt
;
111 LPWSPSHUTDOWN lpWSPShutdown
;
112 LPWSPSOCKET lpWSPSocket
;
113 LPWSPSTRINGTOADDRESS lpWSPStringToAddress
;
114 } WSPPROC_TABLE
, FAR
* LPWSPPROC_TABLE
;
116 /* Prototypes for service provider namespace procedure table */
117 typedef INT (WSAAPI
*LPNSPCLEANUP
)(LPGUID
);
118 typedef INT (WSAAPI
*LPNSPLOOKUPSERVICEBEGIN
)(LPGUID
,LPWSAQUERYSETW
,LPWSASERVICECLASSINFOW
,DWORD
,LPHANDLE
);
119 typedef INT (WSAAPI
*LPNSPLOOKUPSERVICENEXT
)(HANDLE
,DWORD
,LPDWORD
,LPWSAQUERYSETW
);
120 typedef INT (WSAAPI
*LPNSPLOOKUPSERVICEEND
)(HANDLE
);
121 typedef INT (WSAAPI
*LPNSPSETSERVICE
)(LPGUID
,LPWSASERVICECLASSINFOW
,LPWSAQUERYSETW
,WSAESETSERVICEOP
,DWORD
);
122 typedef INT (WSAAPI
*LPNSPINSTALLSERVICECLASS
)(LPGUID
,LPWSASERVICECLASSINFOW
);
123 typedef INT (WSAAPI
*LPNSPREMOVESERVICECLASS
)(LPGUID
,LPGUID
);
124 typedef INT (WSAAPI
*LPNSPGETSERVICECLASSINFO
)(LPGUID
,LPDWORD
,LPWSASERVICECLASSINFOW
);
125 typedef INT (WSAAPI
*LPNSPIOCTL
)(HANDLE
,DWORD
,LPVOID
,DWORD
,LPVOID
,DWORD
,LPDWORD
,LPWSACOMPLETION
,LPWSATHREADID
);
127 typedef struct _NSP_ROUTINE
{
129 DWORD dwMajorVersion
;
130 DWORD dwMinorVersion
;
131 LPNSPCLEANUP NSPCleanup
;
132 LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin
;
133 LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext
;
134 LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd
;
135 LPNSPSETSERVICE NSPSetService
;
136 LPNSPINSTALLSERVICECLASS NSPInstallServiceClass
;
137 LPNSPREMOVESERVICECLASS NSPRemoveServiceClass
;
138 LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo
;
140 } NSP_ROUTINE
, *PNSP_ROUTINE
, FAR
* LPNSP_ROUTINE
;
142 /* Prototypes for service provider upcall procedure table */
143 typedef BOOL (WSPAPI
*LPWPUCLOSEEVENT
)(WSAEVENT
,LPINT
);
144 typedef INT (WSPAPI
*LPWPUCLOSESOCKETHANDLE
)(SOCKET
,LPINT
);
145 typedef INT (WSPAPI
*LPWPUCLOSETHREAD
)(LPWSATHREADID
,LPINT
);
146 typedef WSAEVENT (WSPAPI
*LPWPUCREATEEVENT
)(LPINT
);
147 typedef SOCKET (WSPAPI
*LPWPUCREATESOCKETHANDLE
)(DWORD
,DWORD_PTR
,LPINT
);
148 typedef INT (WSPAPI
*LPWPUFDISSET
)(SOCKET
,LPFD_SET
);
149 typedef INT (WSPAPI
*LPWPUGETPROVIDERPATH
)(LPGUID
,LPWSTR
,LPINT
,LPINT
);
150 typedef SOCKET (WSPAPI
*LPWPUMODIFYIFSHANDLE
)(DWORD
,SOCKET
,LPINT
);
151 typedef INT (WSPAPI
*LPWPUOPENCURRENTTHREAD
)(LPWSATHREADID
,LPINT
);
152 typedef BOOL (WSPAPI
*LPWPUPOSTMESSAGE
)(HWND
,UINT
,WPARAM
,LPARAM
);
153 typedef INT (WSPAPI
*LPWPUQUERYBLOCKINGCALLBACK
)(DWORD
,LPBLOCKINGCALLBACK FAR
*,PDWORD_PTR
,LPINT
);
154 typedef INT (WSPAPI
*LPWPUQUERYSOCKETHANDLECONTEXT
)(SOCKET
,PDWORD_PTR
,LPINT
);
155 typedef INT (WSPAPI
*LPWPUQUEUEAPC
)(LPWSATHREADID
,LPWSAUSERAPC
,DWORD_PTR
,LPINT
);
156 typedef BOOL (WSPAPI
*LPWPURESETEVENT
)(WSAEVENT
,LPINT
);
157 typedef BOOL (WSPAPI
*LPWPUSETEVENT
)(WSAEVENT
,LPINT
);
158 typedef INT (WSAAPI
*LPNSPSTARTUP
)(LPGUID
,LPNSP_ROUTINE
);
159 /* Available only directly from the DLL */
160 typedef INT (WSPAPI
*LPWPUCOMPLETEOVERLAPPEDREQUEST
)(SOCKET
,LPWSAOVERLAPPED
,DWORD
,DWORD
,LPINT
);
162 /* Service Provider upcall table */
163 typedef struct _WSPUPCALLTABLE
{
164 LPWPUCLOSEEVENT lpWPUCloseEvent
;
165 LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle
;
166 LPWPUCREATEEVENT lpWPUCreateEvent
;
167 LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle
;
168 LPWPUFDISSET lpWPUFDIsSet
;
169 LPWPUGETPROVIDERPATH lpWPUGetProviderPath
;
170 LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle
;
171 LPWPUPOSTMESSAGE lpWPUPostMessage
;
172 LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback
;
173 LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext
;
174 LPWPUQUEUEAPC lpWPUQueueApc
;
175 LPWPURESETEVENT lpWPUResetEvent
;
176 LPWPUSETEVENT lpWPUSetEvent
;
177 LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread
;
178 LPWPUCLOSETHREAD lpWPUCloseThread
;
179 } WSPUPCALLTABLE
, FAR
* LPWSPUPCALLTABLE
;
181 typedef INT (WSPAPI
*LPWSPSTARTUP
)(WORD
,LPWSPDATA
,LPWSAPROTOCOL_INFOW
,WSPUPCALLTABLE
,LPWSPPROC_TABLE
);
183 INT WSPAPI
NSPStartup(LPGUID
,LPNSP_ROUTINE
);
185 /* WinSock 2 DLL function prototypes */
186 INT WSPAPI
WPUCompleteOverlappedRequest(SOCKET
,LPWSAOVERLAPPED
,DWORD
,DWORD
,LPINT
);
187 INT WSPAPI
WSPStartup(WORD
,LPWSPDATA
,LPWSAPROTOCOL_INFOW
,WSPUPCALLTABLE
,LPWSPPROC_TABLE
);
188 INT WSPAPI
WSCDeinstallProvider(LPGUID
,LPINT
);
189 INT WSPAPI
WSCEnumProtocols(LPINT
,LPWSAPROTOCOL_INFOW
,LPDWORD
,LPINT
);
190 INT WSPAPI
WSCGetProviderPath(LPGUID
,LPWSTR
,LPINT
,LPINT
);
191 INT WSPAPI
WSCInstallProvider(LPGUID
,CONST WCHAR
*,CONST LPWSAPROTOCOL_INFOW
,DWORD
,LPINT
);
192 INT WSPAPI
WSCEnableNSProvider(LPGUID
,BOOL
);
193 INT WSPAPI
WSCInstallNameSpace(LPWSTR
,LPWSTR
,DWORD
,DWORD
,LPGUID
);
194 INT WSPAPI
WSCUnInstallNameSpace(LPGUID
);
195 INT WSPAPI
WSCWriteProviderOrder(LPDWORD
,DWORD
);
196 BOOL WSPAPI
WPUPostMessage(HWND
,UINT
,WPARAM
,LPARAM
);
197 BOOL WSPAPI
WPUCloseEvent(WSAEVENT
,LPINT
);
198 int WSPAPI
WPUCloseSocketHandle(SOCKET
,LPINT
);
199 WSAEVENT WSPAPI
WPUCreateEvent(LPINT
);
200 SOCKET WSPAPI
WPUModifyIFSHandle(DWORD
,SOCKET
,LPINT
);
201 SOCKET WSPAPI
WPUCreateSocketHandle(DWORD
,DWORD_PTR
,LPINT
);
202 int WSPAPI
WPUFDIsSet(SOCKET
,LPFD_SET
);
203 int WSPAPI
WPUGetProviderPath(LPGUID
,WCHAR FAR
*,LPINT
,LPINT
);
204 int WSPAPI
WPUQueryBlockingCallback(DWORD
,LPBLOCKINGCALLBACK FAR
*,PDWORD_PTR
,LPINT
);
205 int WSPAPI
WPUQuerySocketHandleContext(SOCKET
,PDWORD_PTR
,LPINT
);
206 int WSPAPI
WPUQueueApc(LPWSATHREADID
,LPWSAUSERAPC
,DWORD_PTR
,LPINT
);
207 BOOL WSPAPI
WPUResetEvent(WSAEVENT
,LPINT
);
208 BOOL WSPAPI
WPUSetEvent(WSAEVENT
,LPINT
);
209 int WSPAPI
WPUOpenCurrentThread(LPWSATHREADID
,LPINT
);
210 int WSPAPI
WPUCloseThread(LPWSATHREADID
,LPINT
);
212 #endif /* RC_INVOKED */
216 #endif /* __cplusplus */
218 #endif /* _WS2SPI_H */