4 * WinSock v2 Service Provider Interface.
8 * Written by Casper S. Hornstrup <chorns@users.sourceforge.net>
9 * Copyright (C) 2002-2004, 2006, 2017, MinGW.org Project
12 * Permission is hereby granted, free of charge, to any person obtaining a
13 * copy of this software and associated documentation files (the "Software"),
14 * to deal in the Software without restriction, including without limitation
15 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16 * and/or sell copies of the Software, and to permit persons to whom the
17 * Software is furnished to do so, subject to the following conditions:
19 * The above copyright notice and this permission notice (including the next
20 * paragraph) shall be included in all copies or substantial portions of the
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29 * DEALINGS IN THE SOFTWARE.
33 #pragma GCC system_header
41 #define WSPDESCRIPTION_LEN 255
49 WCHAR szDescription[WSPDESCRIPTION_LEN+1];
50 } WSPDATA, FAR *LPWSPDATA;
54 { HANDLE ThreadHandle;
56 } WSATHREADID, FAR *LPWSATHREADID;
58 typedef BOOL (CALLBACK FAR *LPBLOCKINGCALLBACK) (DWORD);
59 typedef VOID (CALLBACK FAR *LPWSAUSERAPC) (DWORD);
61 /* Prototypes for functions which may be invoked
62 * via the Service Provider Procedure Table.
64 typedef SOCKET (WSPAPI *LPWSPACCEPT)
65 ( SOCKET, LPSOCKADDR, LPINT, LPCONDITIONPROC, DWORD, LPINT
67 typedef INT (WSPAPI *LPWSPADDRESSTOSTRING)
68 ( LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD, LPINT
70 typedef INT (WSPAPI *LPWSPASYNCSELECT) (SOCKET, HWND, UINT, LONG, LPINT);
71 typedef INT (WSPAPI *LPWSPBIND) (SOCKET, const struct sockaddr *, INT, LPINT);
72 typedef INT (WSPAPI *LPWSPCANCELBLOCKINGCALL) (LPINT);
73 typedef INT (WSPAPI *LPWSPCLEANUP) (LPINT);
74 typedef INT (WSPAPI *LPWSPCLOSESOCKET) (SOCKET, LPINT);
76 typedef INT (WSPAPI *LPWSPCONNECT)
77 ( SOCKET, const struct sockaddr *, INT, LPWSABUF, LPWSABUF,
80 typedef INT (WSPAPI *LPWSPDUPLICATESOCKET)
81 ( SOCKET, DWORD, LPWSAPROTOCOL_INFOW, LPINT
83 typedef INT (WSPAPI *LPWSPENUMNETWORKEVENTS)
84 ( SOCKET, WSAEVENT, LPWSANETWORKEVENTS, LPINT
86 typedef INT (WSPAPI *LPWSPEVENTSELECT) (SOCKET, WSAEVENT, LONG, LPINT);
88 typedef BOOL (WSPAPI *LPWSPGETOVERLAPPEDRESULT)
89 ( SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD, LPINT
91 typedef INT (WSPAPI *LPWSPGETPEERNAME) (SOCKET, LPSOCKADDR, LPINT, LPINT);
92 typedef BOOL (WSPAPI *LPWSPGETQOSBYNAME) (SOCKET, LPWSABUF, LPQOS, LPINT);
93 typedef INT (WSPAPI *LPWSPGETSOCKNAME) (SOCKET, LPSOCKADDR, LPINT, LPINT);
95 typedef INT (WSPAPI *LPWSPGETSOCKOPT)
96 ( SOCKET, INT, INT, CHAR FAR *, LPINT, LPINT
98 typedef INT (WSPAPI *LPWSPIOCTL)
99 ( SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED,
100 LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID, LPINT
102 typedef SOCKET (WSPAPI *LPWSPJOINLEAF)
103 ( SOCKET, const struct sockaddr*, INT, LPWSABUF, LPWSABUF,
104 LPQOS, LPQOS, DWORD, LPINT
106 typedef INT (WSPAPI *LPWSPLISTEN) (SOCKET, INT, LPINT);
108 typedef INT (WSPAPI *LPWSPRECV)
109 ( SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED,
110 LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID, LPINT
112 typedef INT (WSPAPI *LPWSPRECVDISCONNECT) (SOCKET, LPWSABUF, LPINT);
114 typedef INT (WSPAPI *LPWSPRECVFROM)
115 ( SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPSOCKADDR, LPINT,
116 LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID,
119 typedef INT (WSPAPI *LPWSPSELECT)
120 ( INT, fd_set *, fd_set *, fd_set *, CONST TIMEVAL *, LPINT
122 typedef INT (WSPAPI *LPWSPSEND)
123 ( SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED,
124 LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID, LPINT
126 typedef INT (WSPAPI *LPWSPSENDDISCONNECT) (SOCKET, LPWSABUF, LPINT);
128 typedef INT (WSPAPI *LPWSPSENDTO)
129 ( SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *,
130 INT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE,
133 typedef INT (WSPAPI *LPWSPSETSOCKOPT)
134 ( SOCKET, INT, INT, CONST CHAR FAR *, INT, LPINT
136 typedef INT (WSPAPI *LPWSPSHUTDOWN) (SOCKET, INT, LPINT);
138 typedef SOCKET (WSPAPI *LPWSPSOCKET)
139 ( INT, INT, INT, LPWSAPROTOCOL_INFOW, GROUP, DWORD, LPINT
141 typedef INT (WSPAPI *LPWSPSTRINGTOADDRESS)
142 ( LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT, LPINT
146 struct _WSPPROC_TABLE
147 { /* Service Provider Procedure Table
149 LPWSPACCEPT lpWSPAccept;
150 LPWSPADDRESSTOSTRING lpWSPAddressToString;
151 LPWSPASYNCSELECT lpWSPAsyncSelect;
153 LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall;
154 LPWSPCLEANUP lpWSPCleanup;
155 LPWSPCLOSESOCKET lpWSPCloseSocket;
156 LPWSPCONNECT lpWSPConnect;
157 LPWSPDUPLICATESOCKET lpWSPDuplicateSocket;
158 LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents;
159 LPWSPEVENTSELECT lpWSPEventSelect;
160 LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult;
161 LPWSPGETPEERNAME lpWSPGetPeerName;
162 LPWSPGETSOCKNAME lpWSPGetSockName;
163 LPWSPGETSOCKOPT lpWSPGetSockOpt;
164 LPWSPGETQOSBYNAME lpWSPGetQOSByName;
165 LPWSPIOCTL lpWSPIoctl;
166 LPWSPJOINLEAF lpWSPJoinLeaf;
167 LPWSPLISTEN lpWSPListen;
169 LPWSPRECVDISCONNECT lpWSPRecvDisconnect;
170 LPWSPRECVFROM lpWSPRecvFrom;
171 LPWSPSELECT lpWSPSelect;
173 LPWSPSENDDISCONNECT lpWSPSendDisconnect;
174 LPWSPSENDTO lpWSPSendTo;
175 LPWSPSETSOCKOPT lpWSPSetSockOpt;
176 LPWSPSHUTDOWN lpWSPShutdown;
177 LPWSPSOCKET lpWSPSocket;
178 LPWSPSTRINGTOADDRESS lpWSPStringToAddress;
179 } WSPPROC_TABLE, FAR *LPWSPPROC_TABLE;
181 /* Prototypes for functions which may be invoked via
182 * the Service Provider Upcall Procedure Table.
184 typedef BOOL (WSPAPI *LPWPUCLOSEEVENT) (WSAEVENT, LPINT);
185 typedef INT (WSPAPI *LPWPUCLOSESOCKETHANDLE) (SOCKET, LPINT);
186 typedef INT (WSPAPI *LPWPUCLOSETHREAD) (LPWSATHREADID, LPINT);
187 typedef WSAEVENT (WSPAPI *LPWPUCREATEEVENT) (LPINT);
188 typedef SOCKET (WSPAPI *LPWPUCREATESOCKETHANDLE) (DWORD, DWORD, LPINT);
189 typedef SOCKET (WSPAPI *LPWPUFDISSET) (SOCKET, fd_set *);
190 typedef INT (WSPAPI *LPWPUGETPROVIDERPATH) (LPGUID, LPWSTR, LPINT, LPINT);
191 typedef SOCKET (WSPAPI *LPWPUMODIFYIFSHANDLE) (DWORD, SOCKET, LPINT);
192 typedef INT (WSPAPI *LPWPUOPENCURRENTTHREAD) (LPWSATHREADID, LPINT);
193 typedef BOOL (WSPAPI *LPWPUPOSTMESSAGE) (HWND, UINT, WPARAM, LPARAM);
195 typedef INT (WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)
196 ( DWORD, LPBLOCKINGCALLBACK FAR *, LPDWORD, LPINT
198 typedef INT (WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT) (SOCKET, LPDWORD, LPINT);
200 typedef INT (WSPAPI *LPWPUQUEUEAPC)
201 ( LPWSATHREADID, LPWSAUSERAPC, DWORD, LPINT
203 typedef BOOL (WSPAPI *LPWPURESETEVENT) (WSAEVENT, LPINT);
204 typedef BOOL (WSPAPI *LPWPUSETEVENT) (WSAEVENT, LPINT);
206 /* Functions matching the following prototype are available
207 * only directly from the DLL
209 typedef INT (WSPAPI *LPWPUCOMPLETEOVERLAPPEDREQUEST)
210 ( SOCKET, LPWSAOVERLAPPED, DWORD, DWORD, LPINT
214 struct _WSPUPCALLTABLE
215 { /* Service Provider Upcall Table
217 LPWPUCLOSEEVENT lpWPUCloseEvent;
218 LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
219 LPWPUCREATEEVENT lpWPUCreateEvent;
220 LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
221 LPWPUFDISSET lpWPUFDIsSet;
222 LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
223 LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
224 LPWPUPOSTMESSAGE lpWPUPostMessage;
225 LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
226 LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
227 LPWPUQUEUEAPC lpWPUQueueApc;
228 LPWPURESETEVENT lpWPUResetEvent;
229 LPWPUSETEVENT lpWPUSetEvent;
230 LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
231 LPWPUCLOSETHREAD lpWPUCloseThread;
232 } WSPUPCALLTABLE, FAR *LPWSPUPCALLTABLE;
234 typedef INT (WSPAPI *LPWSPSTARTUP)
235 ( WORD, LPWSPDATA, LPWSAPROTOCOL_INFOW, WSPUPCALLTABLE, LPWSPPROC_TABLE
238 /* Prototypes for functions which may be invoked via
239 * the Service Provider Namespace Procedure Table.
241 typedef INT (WSPAPI *LPNSPCLEANUP) (LPGUID);
243 typedef INT (WSPAPI *LPNSPGETSERVICECLASSINFO)
244 ( LPGUID, LPDWORD, LPWSASERVICECLASSINFOW
246 typedef INT (WSPAPI *LPNSPINSTALLSERVICECLASS)
247 ( LPGUID, LPWSASERVICECLASSINFOW
249 typedef INT (WSPAPI *LPNSPLOOKUPSERVICEBEGIN)
250 ( LPGUID, LPWSAQUERYSETW, LPWSASERVICECLASSINFOW, DWORD, LPHANDLE
252 typedef INT (WSPAPI *LPNSPLOOKUPSERVICEEND) (HANDLE);
253 typedef INT (WSPAPI *LPNSPLOOKUPSERVICENEXT)
254 ( HANDLE, DWORD, LPDWORD, LPWSAQUERYSET
256 typedef INT (WSPAPI *LPNSPREMOVESERVICECLASS) (LPGUID, LPGUID);
258 typedef INT (WSPAPI *LPNSPSETSERVICE)
259 ( LPGUID, LPWSASERVICECLASSINFOW, LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD
264 { /* Service Provider Namespace Procedure Table
267 DWORD dwMajorVersion;
268 DWORD dwMinorVersion;
269 LPNSPCLEANUP NSPCleanup;
270 LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin;
271 LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext;
272 LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd;
273 LPNSPSETSERVICE NSPSetService;
274 LPNSPINSTALLSERVICECLASS NSPInstallServiceClass;
275 LPNSPREMOVESERVICECLASS NSPRemoveServiceClass;
276 LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo;
277 } NSP_ROUTINE, *PNSP_ROUTINE, *LPNSP_ROUTINE;
279 INT WSPAPI NSPStartup (LPGUID, LPNSP_ROUTINE);
281 /* WinSock v2 DLL function prototypes
283 INT WSPAPI WPUCompleteOverlappedRequest
284 ( SOCKET, LPWSAOVERLAPPED, DWORD, DWORD, LPINT
286 INT WSPAPI WSPStartup
287 ( WORD, LPWSPDATA, LPWSAPROTOCOL_INFOW, WSPUPCALLTABLE, LPWSPPROC_TABLE
289 INT WSPAPI WSCDeinstallProvider (LPGUID, LPINT);
290 INT WSPAPI WSCEnumProtocols (LPINT, LPWSAPROTOCOL_INFOW, LPDWORD, LPINT);
291 INT WSPAPI WSCGetProviderPath (LPGUID, LPWSTR, LPINT, LPINT);
293 INT WSPAPI WSCInstallProvider
294 ( CONST LPGUID, CONST LPWSTR, CONST LPWSAPROTOCOL_INFOW, DWORD, LPINT
296 INT WSPAPI WSCEnableNSProvider (LPGUID, BOOL);
297 INT WSPAPI WSCInstallNameSpace (LPWSTR, LPWSTR, DWORD, DWORD, LPGUID);
298 INT WSPAPI WSCUnInstallNameSpace (LPGUID);
299 INT WSPAPI WSCWriteProviderOrder (LPDWORD, DWORD);
301 #endif /* ! RC_INVOKED */
305 #endif /* !_WS2SPI_H: $RCSfile$: end of file */