update for HEAD-2003091401
[reactos.git] / include / ws2spi.h
1 /*
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
7  */
8 #ifndef __WS2SPI_H
9 #define __WS2SPI_H
10
11 #include <winsock2.h>
12
13 #ifdef __cplusplus
14 extern "C"
15 {
16 #endif /* __cplusplus */
17
18 #define WSPAPI WSAAPI
19
20
21 #define WSPDESCRIPTION_LEN 255
22
23 typedef struct WSPData {
24     WORD wVersion;
25     WORD wHighVersion;
26     WCHAR szDescription[WSPDESCRIPTION_LEN + 1];
27 } WSPDATA, FAR * LPWSPDATA;
28
29
30 typedef struct _WSATHREADID {
31     HANDLE ThreadHandle;
32     DWORD Reserved;
33 } WSATHREADID, FAR* LPWSATHREADID;
34
35
36 typedef BOOL (CALLBACK FAR* LPBLOCKINGCALLBACK)(
37     DWORD dwContext);
38
39 typedef VOID (CALLBACK FAR* LPWSAUSERAPC)(
40     DWORD dwContext);
41
42
43 /* Prototypes for service provider procedure table */
44
45 typedef SOCKET (WSPAPI * LPWSPACCEPT)(
46     IN      SOCKET s,
47     OUT     LPSOCKADDR addr,
48     IN OUT  LPINT addrlen,
49     IN      LPCONDITIONPROC lpfnCondition,
50     IN      DWORD dwCallbackData,
51     OUT     LPINT lpErrno);
52
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,
59     OUT     LPINT lpErrno);
60
61 typedef INT (WSPAPI * LPWSPASYNCSELECT)(
62     IN  SOCKET s, 
63     IN  HWND hWnd, 
64     IN  UINT wMsg, 
65     IN  LONG lEvent, 
66     OUT LPINT lpErrno);
67
68 typedef INT (WSPAPI * LPWSPBIND)(
69     IN  SOCKET s,
70     IN  CONST LPSOCKADDR name, 
71     IN  INT namelen, 
72     OUT LPINT lpErrno);
73
74 typedef INT (WSPAPI * LPWSPCANCELBLOCKINGCALL)(
75     OUT LPINT lpErrno);
76
77 typedef INT (WSPAPI * LPWSPCLEANUP)(
78     OUT LPINT lpErrno);
79
80 typedef INT (WSPAPI * LPWSPCLOSESOCKET)(
81     IN  SOCKET s,
82     OUT LPINT lpErrno);
83
84 typedef INT (WSPAPI * LPWSPCONNECT)(
85     IN  SOCKET s,
86     IN  CONST LPSOCKADDR name,
87     IN  INT namelen,
88     IN  LPWSABUF lpCallerData,
89     OUT LPWSABUF lpCalleeData,
90     IN  LPQOS lpSQOS,
91     IN  LPQOS lpGQOS,
92     OUT LPINT lpErrno);
93
94 typedef INT (WSPAPI * LPWSPDUPLICATESOCKET)(
95     IN  SOCKET s,
96     IN  DWORD dwProcessId,
97     OUT LPWSAPROTOCOL_INFOW lpProtocolInfo,
98     OUT LPINT lpErrno);
99
100 typedef INT (WSPAPI * LPWSPENUMNETWORKEVENTS)(
101     IN  SOCKET s,
102     IN  WSAEVENT hEventObject,
103     OUT LPWSANETWORKEVENTS lpNetworkEvents,
104     OUT LPINT lpErrno);
105
106 typedef INT (WSPAPI * LPWSPEVENTSELECT)(
107     IN  SOCKET s,
108     IN  WSAEVENT hEventObject,
109     IN  LONG lNetworkEvents,
110     OUT LPINT lpErrno);
111
112 typedef BOOL (WSPAPI * LPWSPGETOVERLAPPEDRESULT)(
113     IN  SOCKET s,
114     IN  LPWSAOVERLAPPED lpOverlapped,
115     OUT LPDWORD lpcbTransfer,
116     IN  BOOL fWait,
117     OUT LPDWORD lpdwFlags,
118     OUT LPINT lpErrno);
119
120 typedef INT (WSPAPI * LPWSPGETPEERNAME)(
121     IN      SOCKET s, 
122     OUT     LPSOCKADDR name, 
123     IN OUT  LPINT namelen, 
124     OUT     LPINT lpErrno);
125
126 typedef BOOL (WSPAPI * LPWSPGETQOSBYNAME)(
127     IN      SOCKET s,
128     IN OUT  LPWSABUF lpQOSName,
129     OUT     LPQOS lpQOS,
130     OUT     LPINT lpErrno);
131
132 typedef INT (WSPAPI * LPWSPGETSOCKNAME)(
133     IN      SOCKET s,
134     OUT     LPSOCKADDR name,
135     IN OUT  LPINT namelen,
136     OUT     LPINT lpErrno);
137
138 typedef INT (WSPAPI * LPWSPGETSOCKOPT)(
139     IN      SOCKET s,
140     IN      INT level,
141     IN      INT optname,
142     OUT     CHAR FAR* optval,
143     IN OUT  LPINT optlen,
144     OUT     LPINT lpErrno);
145
146 typedef INT (WSPAPI * LPWSPIOCTL)(
147     IN  SOCKET s,
148     IN  DWORD dwIoControlCode,
149     IN  LPVOID lpvInBuffer,
150     IN  DWORD cbInBuffer,
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,
157     OUT LPINT lpErrno);
158
159 typedef SOCKET (WSPAPI * LPWSPJOINLEAF)(
160     IN  SOCKET s,
161     IN  CONST LPSOCKADDR name,
162     IN  INT namelen,
163     IN  LPWSABUF lpCallerData,
164     OUT LPWSABUF lpCalleeData,
165     IN  LPQOS lpSQOS,
166     IN  LPQOS lpGQOS,
167     IN  DWORD dwFlags,
168     OUT LPINT lpErrno);
169
170 typedef INT (WSPAPI * LPWSPLISTEN)(
171     IN  SOCKET s,
172     IN  INT backlog,
173     OUT LPINT lpErrno);
174
175 typedef INT (WSPAPI * LPWSPRECV)(
176     IN      SOCKET s,
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,
184     OUT     LPINT lpErrno);
185
186 typedef INT (WSPAPI * LPWSPRECVDISCONNECT)(
187     IN  SOCKET s,
188     OUT LPWSABUF lpInboundDisconnectData,
189     OUT LPINT lpErrno);
190
191 typedef INT (WSPAPI * LPWSPRECVFROM)(
192     IN      SOCKET s,
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,
202     OUT     LPINT lpErrno);
203
204 typedef INT (WSPAPI * LPWSPSELECT)(
205     IN      INT nfds,
206     IN OUT  LPFD_SET readfds,
207     IN OUT  LPFD_SET writefds,
208     IN OUT  LPFD_SET exceptfds,
209     IN      CONST LPTIMEVAL timeout,
210     OUT     LPINT lpErrno);
211
212 typedef INT (WSPAPI * LPWSPSEND)(
213     IN  SOCKET s,
214     IN  LPWSABUF lpBuffers,
215     IN  DWORD dwBufferCount,
216     OUT LPDWORD lpNumberOfBytesSent,
217     IN  DWORD dwFlags,
218     IN  LPWSAOVERLAPPED lpOverlapped,
219     IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
220     IN  LPWSATHREADID lpThreadId,
221     OUT LPINT lpErrno);
222
223 typedef INT (WSPAPI * LPWSPSENDDISCONNECT)(
224     IN  SOCKET s,
225     IN  LPWSABUF lpOutboundDisconnectData,
226     OUT LPINT lpErrno);
227
228 typedef INT (WSPAPI * LPWSPSENDTO)(
229     IN  SOCKET s,
230     IN  LPWSABUF lpBuffers,
231     IN  DWORD dwBufferCount,
232     OUT LPDWORD lpNumberOfBytesSent,
233     IN  DWORD dwFlags,
234     IN  CONST LPSOCKADDR lpTo,
235     IN  INT iTolen,
236     IN  LPWSAOVERLAPPED lpOverlapped,
237     IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
238     IN  LPWSATHREADID lpThreadId,
239     OUT LPINT lpErrno);
240
241 typedef INT (WSPAPI * LPWSPSETSOCKOPT)(
242     IN  SOCKET s,
243     IN  INT level,
244     IN  INT optname,
245     IN  CONST CHAR FAR* optval,
246     IN  INT optlen,
247     OUT LPINT lpErrno);
248
249 typedef INT (WSPAPI * LPWSPSHUTDOWN)(
250     IN  SOCKET s,
251     IN  INT how,
252     OUT LPINT lpErrno);
253
254 typedef SOCKET (WSPAPI * LPWSPSOCKET)(
255     IN  INT af,
256     IN  INT type,
257     IN  INT protocol,
258     IN  LPWSAPROTOCOL_INFOW lpProtocolInfo,
259     IN  GROUP g,
260     IN  DWORD dwFlags,
261     OUT LPINT lpErrno);
262
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,
269     OUT     LPINT lpErrno);
270
271
272 /* Service provider procedure table */
273 typedef struct _WSPPROC_TABLE {
274     LPWSPACCEPT                 lpWSPAccept;
275     LPWSPADDRESSTOSTRING        lpWSPAddressToString;
276     LPWSPASYNCSELECT            lpWSPAsyncSelect;
277     LPWSPBIND                   lpWSPBind;
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;
293     LPWSPRECV                   lpWSPRecv;
294     LPWSPRECVDISCONNECT         lpWSPRecvDisconnect;
295     LPWSPRECVFROM               lpWSPRecvFrom;
296     LPWSPSELECT                 lpWSPSelect;
297     LPWSPSEND                   lpWSPSend;
298     LPWSPSENDDISCONNECT         lpWSPSendDisconnect;
299     LPWSPSENDTO                 lpWSPSendTo;
300     LPWSPSETSOCKOPT             lpWSPSetSockOpt;
301     LPWSPSHUTDOWN               lpWSPShutdown;
302     LPWSPSOCKET                 lpWSPSocket;
303     LPWSPSTRINGTOADDRESS        lpWSPStringToAddress;
304 } WSPPROC_TABLE, FAR* LPWSPPROC_TABLE;
305
306
307 /* Prototypes for service provider upcall procedure table */
308
309 typedef BOOL (WSPAPI * LPWPUCLOSEEVENT)(
310     IN  WSAEVENT hEvent,
311     OUT LPINT lpErrno);
312
313 typedef INT (WSPAPI * LPWPUCLOSESOCKETHANDLE)(
314     IN  SOCKET s,
315     OUT LPINT lpErrno);
316
317 typedef INT (WSPAPI * LPWPUCLOSETHREAD)(
318     IN  LPWSATHREADID lpThreadId,
319     OUT LPINT lpErrno);
320
321 typedef WSAEVENT (WSPAPI * LPWPUCREATEEVENT)(
322     OUT LPINT lpErrno);
323
324 typedef SOCKET (WSPAPI * LPWPUCREATESOCKETHANDLE)(
325     IN  DWORD dwCatalogEntryId,
326     IN  DWORD dwContext,
327     OUT LPINT lpErrno);
328
329 typedef SOCKET (WSPAPI * LPWPUFDISSET)(
330     IN  SOCKET s,
331     IN  LPFD_SET set);
332
333 typedef INT (WSPAPI * LPWPUGETPROVIDERPATH)(
334     IN      LPGUID lpProviderId,
335     OUT     LPWSTR lpszProviderDllPath,
336     IN OUT  LPINT lpProviderDllPathLen,
337     OUT     LPINT lpErrno);
338
339 typedef SOCKET (WSPAPI * LPWPUMODIFYIFSHANDLE)(
340     IN  DWORD dwCatalogEntryId,
341     IN  SOCKET ProposedHandle,
342     OUT LPINT lpErrno);
343
344 typedef INT (WSPAPI * LPWPUOPENCURRENTTHREAD)(
345     OUT LPWSATHREADID lpThreadId,
346     OUT LPINT lpErrno);
347
348 typedef BOOL (WSPAPI * LPWPUPOSTMESSAGE)(
349     IN  HWND hWnd,
350     IN  UINT Msg,
351     IN  WPARAM wParam,
352     IN  LPARAM lParam);
353
354 typedef INT (WSPAPI * LPWPUQUERYBLOCKINGCALLBACK)(
355     IN  DWORD dwCatalogEntryId,
356     OUT LPBLOCKINGCALLBACK FAR* lplpfnCallback,
357     OUT LPDWORD lpdwContext,
358     OUT LPINT lpErrno);
359
360 typedef INT (WSPAPI * LPWPUQUERYSOCKETHANDLECONTEXT)(
361     IN  SOCKET s,
362     OUT LPDWORD lpContext,
363     OUT LPINT lpErrno);
364
365 typedef INT (WSPAPI * LPWPUQUEUEAPC)(
366     IN  LPWSATHREADID lpThreadId,
367     IN  LPWSAUSERAPC lpfnUserApc,
368     IN  DWORD dwContext,
369     OUT LPINT lpErrno);
370
371 typedef BOOL (WSPAPI * LPWPURESETEVENT)(
372     IN  WSAEVENT hEvent,
373     OUT LPINT lpErrno);
374
375 typedef BOOL (WSPAPI * LPWPUSETEVENT)(
376     IN  WSAEVENT hEvent,
377     OUT LPINT lpErrno);
378
379
380 /* Available only directly from the DLL */
381
382 typedef INT (WSPAPI * LPWPUCOMPLETEOVERLAPPEDREQUEST)(
383     SOCKET s,
384     LPWSAOVERLAPPED lpOverlapped,
385     DWORD dwError,
386     DWORD cbTransferred,
387     LPINT lpErrno);
388
389
390 /* Service Provider upcall table */
391
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;
409
410
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);
417
418
419 /* Prototypes for service provider namespace procedure table */
420
421 typedef INT (WSPAPI * LPNSPCLEANUP)(
422     IN  LPGUID lpProviderId);
423
424 typedef INT (WSPAPI * LPNSPGETSERVICECLASSINFO)(
425     IN      LPGUID lpProviderId,
426     IN OUT  LPDWORD lpdwBufSize,
427     IN OUT  LPWSASERVICECLASSINFOW lpServiceClassInfo);
428
429 typedef INT (WSPAPI * LPNSPINSTALLSERVICECLASS)(
430     IN  LPGUID lpProviderId,
431     IN  LPWSASERVICECLASSINFOW lpServiceClassInfo);
432
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);
439
440 typedef INT (WSPAPI * LPNSPLOOKUPSERVICEEND)(
441     IN  HANDLE hLookup);
442
443 typedef INT (WSPAPI * LPNSPLOOKUPSERVICENEXT)(
444     IN      HANDLE hLookup,
445     IN      DWORD dwControlFlags,
446     IN OUT  LPDWORD lpdwBufferLength,
447     OUT     LPWSAQUERYSETW lpqsResults);
448
449 typedef INT (WSPAPI * LPNSPREMOVESERVICECLASS)(
450     IN  LPGUID lpProviderId,
451     IN  LPGUID lpServiceClassId);
452
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);
459
460
461 typedef struct _NSP_ROUTINE {
462     DWORD                       cbSize;
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; 
474
475
476 INT
477 WSPAPI
478 NSPStartup(
479     IN  LPGUID lpProviderId,
480     OUT LPNSP_ROUTINE lpNspRoutines);
481
482
483 /* WinSock 2 DLL function prototypes */
484
485 INT
486 WSPAPI
487 WPUCompleteOverlappedRequest(
488     IN  SOCKET s,
489     IN  LPWSAOVERLAPPED lpOverlapped,
490     IN  DWORD dwError,
491     IN  DWORD cbTransferred,
492     OUT LPINT lpErrno);
493
494 INT
495 WSPAPI
496 WSPStartup(
497     IN  WORD wVersionRequested,
498     OUT LPWSPDATA lpWSPData,
499     IN  LPWSAPROTOCOL_INFOW lpProtocolInfo,
500     IN  WSPUPCALLTABLE UpcallTable,
501     OUT LPWSPPROC_TABLE lpProcTable);
502
503 INT
504 WSPAPI
505 WSCDeinstallProvider(
506     IN  LPGUID lpProviderId,
507     OUT LPINT lpErrno);
508
509 INT
510 WSPAPI
511 WSCEnumProtocols(
512     IN      LPINT lpiProtocols,
513     OUT     LPWSAPROTOCOL_INFOW lpProtocolBuffer,
514     IN OUT  LPDWORD lpdwBufferLength,
515     OUT     LPINT lpErrno);
516
517 INT
518 WSPAPI
519 WSCGetProviderPath(
520     IN      LPGUID lpProviderId,
521     OUT     LPWSTR lpszProviderDllPath,
522     IN OUT  LPINT lpProviderDllPathLen,
523     OUT     LPINT lpErrno);
524
525 INT
526 WSPAPI
527 WSCInstallProvider(
528     IN  CONST LPGUID lpProviderId,
529     IN  CONST LPWSTR lpszProviderDllPath,
530     IN  CONST LPWSAPROTOCOL_INFOW lpProtocolInfoList,
531     IN  DWORD dwNumberOfEntries,
532     OUT LPINT lpErrno);
533
534 INT
535 WSPAPI
536 WSCEnableNSProvider(
537     IN  LPGUID lpProviderId,
538     IN  BOOL fEnable);
539
540 INT
541 WSPAPI
542 WSCInstallNameSpace(
543     IN  LPWSTR lpszIdentifier,
544     IN  LPWSTR lpszPathName,
545     IN  DWORD dwNameSpace,
546     IN  DWORD dwVersion,
547     IN  LPGUID lpProviderId);
548
549 INT
550 WSPAPI
551 WSCUnInstallNameSpace(
552     IN  LPGUID lpProviderId);
553
554 INT
555 WSPAPI
556 WSCWriteProviderOrder(
557     IN  LPDWORD lpwdCatalogEntryId,
558     IN  DWORD dwNumberOfEntries);
559
560 #ifdef __cplusplus
561 };
562 #endif /* __cplusplus */
563
564 #endif /* __WS2SPI_H */
565
566 /* EOF */