2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Winsock 2 DLL
4 * FILE: include/ws2spi.h
5 * PURPOSE: Header file for the WinSock 2 DLL
6 * and WinSock 2 Service Providers
16 #endif /* __cplusplus */
21 #define WSPDESCRIPTION_LEN 255
23 typedef struct WSPData {
26 WCHAR szDescription[WSPDESCRIPTION_LEN + 1];
27 } WSPDATA, FAR * LPWSPDATA;
30 typedef struct _WSATHREADID {
33 } WSATHREADID, FAR* LPWSATHREADID;
36 typedef BOOL (CALLBACK FAR* LPBLOCKINGCALLBACK)(
39 typedef VOID (CALLBACK FAR* LPWSAUSERAPC)(
43 /* Prototypes for service provider procedure table */
45 typedef SOCKET (WSPAPI * LPWSPACCEPT)(
49 IN LPCONDITIONPROC lpfnCondition,
50 IN DWORD dwCallbackData,
53 typedef INT (WSPAPI * LPWSPADDRESSTOSTRING)(
54 IN LPSOCKADDR lpsaAddress,
55 IN DWORD dwAddressLength,
56 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
57 OUT LPWSTR lpszAddressString,
58 IN OUT LPDWORD lpdwAddressStringLength,
61 typedef INT (WSPAPI * LPWSPASYNCSELECT)(
68 typedef INT (WSPAPI * LPWSPBIND)(
70 IN CONST LPSOCKADDR name,
74 typedef INT (WSPAPI * LPWSPCANCELBLOCKINGCALL)(
77 typedef INT (WSPAPI * LPWSPCLEANUP)(
80 typedef INT (WSPAPI * LPWSPCLOSESOCKET)(
84 typedef INT (WSPAPI * LPWSPCONNECT)(
86 IN CONST LPSOCKADDR name,
88 IN LPWSABUF lpCallerData,
89 OUT LPWSABUF lpCalleeData,
94 typedef INT (WSPAPI * LPWSPDUPLICATESOCKET)(
97 OUT LPWSAPROTOCOL_INFOW lpProtocolInfo,
100 typedef INT (WSPAPI * LPWSPENUMNETWORKEVENTS)(
102 IN WSAEVENT hEventObject,
103 OUT LPWSANETWORKEVENTS lpNetworkEvents,
106 typedef INT (WSPAPI * LPWSPEVENTSELECT)(
108 IN WSAEVENT hEventObject,
109 IN LONG lNetworkEvents,
112 typedef BOOL (WSPAPI * LPWSPGETOVERLAPPEDRESULT)(
114 IN LPWSAOVERLAPPED lpOverlapped,
115 OUT LPDWORD lpcbTransfer,
117 OUT LPDWORD lpdwFlags,
120 typedef INT (WSPAPI * LPWSPGETPEERNAME)(
123 IN OUT LPINT namelen,
126 typedef BOOL (WSPAPI * LPWSPGETQOSBYNAME)(
128 IN OUT LPWSABUF lpQOSName,
132 typedef INT (WSPAPI * LPWSPGETSOCKNAME)(
135 IN OUT LPINT namelen,
138 typedef INT (WSPAPI * LPWSPGETSOCKOPT)(
142 OUT CHAR FAR* optval,
146 typedef INT (WSPAPI * LPWSPIOCTL)(
148 IN DWORD dwIoControlCode,
149 IN LPVOID lpvInBuffer,
151 OUT LPVOID lpvOutBuffer,
152 IN DWORD cbOutBuffer,
153 OUT LPDWORD lpcbBytesReturned,
154 IN LPWSAOVERLAPPED lpOverlapped,
155 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
156 IN LPWSATHREADID lpThreadId,
159 typedef SOCKET (WSPAPI * LPWSPJOINLEAF)(
161 IN CONST LPSOCKADDR name,
163 IN LPWSABUF lpCallerData,
164 OUT LPWSABUF lpCalleeData,
170 typedef INT (WSPAPI * LPWSPLISTEN)(
175 typedef INT (WSPAPI * LPWSPRECV)(
177 IN OUT LPWSABUF lpBuffers,
178 IN DWORD dwBufferCount,
179 OUT LPDWORD lpNumberOfBytesRecvd,
180 IN OUT LPDWORD lpFlags,
181 IN LPWSAOVERLAPPED lpOverlapped,
182 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
183 IN LPWSATHREADID lpThreadId,
186 typedef INT (WSPAPI * LPWSPRECVDISCONNECT)(
188 OUT LPWSABUF lpInboundDisconnectData,
191 typedef INT (WSPAPI * LPWSPRECVFROM)(
193 IN OUT LPWSABUF lpBuffers,
194 IN DWORD dwBufferCount,
195 OUT LPDWORD lpNumberOfBytesRecvd,
196 IN OUT LPDWORD lpFlags,
197 OUT LPSOCKADDR lpFrom,
198 IN OUT LPINT lpFromlen,
199 IN LPWSAOVERLAPPED lpOverlapped,
200 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
201 IN LPWSATHREADID lpThreadId,
204 typedef INT (WSPAPI * LPWSPSELECT)(
206 IN OUT LPFD_SET readfds,
207 IN OUT LPFD_SET writefds,
208 IN OUT LPFD_SET exceptfds,
209 IN CONST LPTIMEVAL timeout,
212 typedef INT (WSPAPI * LPWSPSEND)(
214 IN LPWSABUF lpBuffers,
215 IN DWORD dwBufferCount,
216 OUT LPDWORD lpNumberOfBytesSent,
218 IN LPWSAOVERLAPPED lpOverlapped,
219 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
220 IN LPWSATHREADID lpThreadId,
223 typedef INT (WSPAPI * LPWSPSENDDISCONNECT)(
225 IN LPWSABUF lpOutboundDisconnectData,
228 typedef INT (WSPAPI * LPWSPSENDTO)(
230 IN LPWSABUF lpBuffers,
231 IN DWORD dwBufferCount,
232 OUT LPDWORD lpNumberOfBytesSent,
234 IN CONST LPSOCKADDR lpTo,
236 IN LPWSAOVERLAPPED lpOverlapped,
237 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
238 IN LPWSATHREADID lpThreadId,
241 typedef INT (WSPAPI * LPWSPSETSOCKOPT)(
245 IN CONST CHAR FAR* optval,
249 typedef INT (WSPAPI * LPWSPSHUTDOWN)(
254 typedef SOCKET (WSPAPI * LPWSPSOCKET)(
258 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
263 typedef INT (WSPAPI * LPWSPSTRINGTOADDRESS)(
264 IN LPWSTR AddressString,
265 IN INT AddressFamily,
266 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
267 OUT LPSOCKADDR lpAddress,
268 IN OUT LPINT lpAddressLength,
272 /* Service provider procedure table */
273 typedef struct _WSPPROC_TABLE {
274 LPWSPACCEPT lpWSPAccept;
275 LPWSPADDRESSTOSTRING lpWSPAddressToString;
276 LPWSPASYNCSELECT lpWSPAsyncSelect;
278 LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall;
279 LPWSPCLEANUP lpWSPCleanup;
280 LPWSPCLOSESOCKET lpWSPCloseSocket;
281 LPWSPCONNECT lpWSPConnect;
282 LPWSPDUPLICATESOCKET lpWSPDuplicateSocket;
283 LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents;
284 LPWSPEVENTSELECT lpWSPEventSelect;
285 LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult;
286 LPWSPGETPEERNAME lpWSPGetPeerName;
287 LPWSPGETSOCKNAME lpWSPGetSockName;
288 LPWSPGETSOCKOPT lpWSPGetSockOpt;
289 LPWSPGETQOSBYNAME lpWSPGetQOSByName;
290 LPWSPIOCTL lpWSPIoctl;
291 LPWSPJOINLEAF lpWSPJoinLeaf;
292 LPWSPLISTEN lpWSPListen;
294 LPWSPRECVDISCONNECT lpWSPRecvDisconnect;
295 LPWSPRECVFROM lpWSPRecvFrom;
296 LPWSPSELECT lpWSPSelect;
298 LPWSPSENDDISCONNECT lpWSPSendDisconnect;
299 LPWSPSENDTO lpWSPSendTo;
300 LPWSPSETSOCKOPT lpWSPSetSockOpt;
301 LPWSPSHUTDOWN lpWSPShutdown;
302 LPWSPSOCKET lpWSPSocket;
303 LPWSPSTRINGTOADDRESS lpWSPStringToAddress;
304 } WSPPROC_TABLE, FAR* LPWSPPROC_TABLE;
307 /* Prototypes for service provider upcall procedure table */
309 typedef BOOL (WSPAPI * LPWPUCLOSEEVENT)(
313 typedef INT (WSPAPI * LPWPUCLOSESOCKETHANDLE)(
317 typedef INT (WSPAPI * LPWPUCLOSETHREAD)(
318 IN LPWSATHREADID lpThreadId,
321 typedef WSAEVENT (WSPAPI * LPWPUCREATEEVENT)(
324 typedef SOCKET (WSPAPI * LPWPUCREATESOCKETHANDLE)(
325 IN DWORD dwCatalogEntryId,
329 typedef SOCKET (WSPAPI * LPWPUFDISSET)(
333 typedef INT (WSPAPI * LPWPUGETPROVIDERPATH)(
334 IN LPGUID lpProviderId,
335 OUT LPWSTR lpszProviderDllPath,
336 IN OUT LPINT lpProviderDllPathLen,
339 typedef SOCKET (WSPAPI * LPWPUMODIFYIFSHANDLE)(
340 IN DWORD dwCatalogEntryId,
341 IN SOCKET ProposedHandle,
344 typedef INT (WSPAPI * LPWPUOPENCURRENTTHREAD)(
345 OUT LPWSATHREADID lpThreadId,
348 typedef BOOL (WSPAPI * LPWPUPOSTMESSAGE)(
354 typedef INT (WSPAPI * LPWPUQUERYBLOCKINGCALLBACK)(
355 IN DWORD dwCatalogEntryId,
356 OUT LPBLOCKINGCALLBACK FAR* lplpfnCallback,
357 OUT LPDWORD lpdwContext,
360 typedef INT (WSPAPI * LPWPUQUERYSOCKETHANDLECONTEXT)(
362 OUT LPDWORD lpContext,
365 typedef INT (WSPAPI * LPWPUQUEUEAPC)(
366 IN LPWSATHREADID lpThreadId,
367 IN LPWSAUSERAPC lpfnUserApc,
371 typedef BOOL (WSPAPI * LPWPURESETEVENT)(
375 typedef BOOL (WSPAPI * LPWPUSETEVENT)(
380 /* Available only directly from the DLL */
382 typedef INT (WSPAPI * LPWPUCOMPLETEOVERLAPPEDREQUEST)(
384 LPWSAOVERLAPPED lpOverlapped,
390 /* Service Provider upcall table */
392 typedef struct _WSPUPCALLTABLE {
393 LPWPUCLOSEEVENT lpWPUCloseEvent;
394 LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
395 LPWPUCREATEEVENT lpWPUCreateEvent;
396 LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
397 LPWPUFDISSET lpWPUFDIsSet;
398 LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
399 LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
400 LPWPUPOSTMESSAGE lpWPUPostMessage;
401 LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
402 LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
403 LPWPUQUEUEAPC lpWPUQueueApc;
404 LPWPURESETEVENT lpWPUResetEvent;
405 LPWPUSETEVENT lpWPUSetEvent;
406 LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
407 LPWPUCLOSETHREAD lpWPUCloseThread;
408 } WSPUPCALLTABLE, FAR* LPWSPUPCALLTABLE;
411 typedef INT (WSPAPI * LPWSPSTARTUP)(
412 IN WORD wVersionRequested,
413 OUT LPWSPDATA lpWSPData,
414 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
415 IN WSPUPCALLTABLE UpcallTable,
416 OUT LPWSPPROC_TABLE lpProcTable);
419 /* Prototypes for service provider namespace procedure table */
421 typedef INT (WSPAPI * LPNSPCLEANUP)(
422 IN LPGUID lpProviderId);
424 typedef INT (WSPAPI * LPNSPGETSERVICECLASSINFO)(
425 IN LPGUID lpProviderId,
426 IN OUT LPDWORD lpdwBufSize,
427 IN OUT LPWSASERVICECLASSINFOW lpServiceClassInfo);
429 typedef INT (WSPAPI * LPNSPINSTALLSERVICECLASS)(
430 IN LPGUID lpProviderId,
431 IN LPWSASERVICECLASSINFOW lpServiceClassInfo);
433 typedef INT (WSPAPI * LPNSPLOOKUPSERVICEBEGIN)(
434 IN LPGUID lpProviderId,
435 IN LPWSAQUERYSETW lpqsRestrictions,
436 IN LPWSASERVICECLASSINFOW lpServiceClassInfo,
437 IN DWORD dwControlFlags,
438 OUT LPHANDLE lphLookup);
440 typedef INT (WSPAPI * LPNSPLOOKUPSERVICEEND)(
443 typedef INT (WSPAPI * LPNSPLOOKUPSERVICENEXT)(
445 IN DWORD dwControlFlags,
446 IN OUT LPDWORD lpdwBufferLength,
447 OUT LPWSAQUERYSET lpqsResults);
449 typedef INT (WSPAPI * LPNSPREMOVESERVICECLASS)(
450 IN LPGUID lpProviderId,
451 IN LPGUID lpServiceClassId);
453 typedef INT (WSPAPI * LPNSPSETSERVICE)(
454 IN LPGUID lpProviderId,
455 IN LPWSASERVICECLASSINFOW lpServiceClassInfo,
456 IN LPWSAQUERYSETW lpqsRegInfo,
457 IN WSAESETSERVICEOP essOperation,
458 IN DWORD dwControlFlags);
461 typedef struct _NSP_ROUTINE {
463 DWORD dwMajorVersion;
464 DWORD dwMinorVersion;
465 LPNSPCLEANUP NSPCleanup;
466 LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin;
467 LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext;
468 LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd;
469 LPNSPSETSERVICE NSPSetService;
470 LPNSPINSTALLSERVICECLASS NSPInstallServiceClass;
471 LPNSPREMOVESERVICECLASS NSPRemoveServiceClass;
472 LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo;
473 } NSP_ROUTINE, *PNSP_ROUTINE, *LPNSP_ROUTINE;
479 IN LPGUID lpProviderId,
480 OUT LPNSP_ROUTINE lpNspRoutines);
483 /* WinSock 2 DLL function prototypes */
487 WPUCompleteOverlappedRequest(
489 IN LPWSAOVERLAPPED lpOverlapped,
491 IN DWORD cbTransferred,
497 IN WORD wVersionRequested,
498 OUT LPWSPDATA lpWSPData,
499 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
500 IN WSPUPCALLTABLE UpcallTable,
501 OUT LPWSPPROC_TABLE lpProcTable);
505 WSCDeinstallProvider(
506 IN LPGUID lpProviderId,
512 IN LPINT lpiProtocols,
513 OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer,
514 IN OUT LPDWORD lpdwBufferLength,
520 IN LPGUID lpProviderId,
521 OUT LPWSTR lpszProviderDllPath,
522 IN OUT LPINT lpProviderDllPathLen,
528 IN CONST LPGUID lpProviderId,
529 IN CONST LPWSTR lpszProviderDllPath,
530 IN CONST LPWSAPROTOCOL_INFOW lpProtocolInfoList,
531 IN DWORD dwNumberOfEntries,
537 IN LPGUID lpProviderId,
543 IN LPWSTR lpszIdentifier,
544 IN LPWSTR lpszPathName,
545 IN DWORD dwNameSpace,
547 IN LPGUID lpProviderId);
551 WSCUnInstallNameSpace(
552 IN LPGUID lpProviderId);
556 WSCWriteProviderOrder(
557 IN LPDWORD lpwdCatalogEntryId,
558 IN DWORD dwNumberOfEntries);
562 #endif /* __cplusplus */
564 #endif /* __WS2SPI_H */