Merge from amd64-branch:
[reactos.git] / reactos / include / psdk / ws2spi.h
1 /*
2 * ws2spi.h
3 *
4 * Winsock 2 Service Provider interface.
5 *
6 *
7 * THIS SOFTWARE IS NOT COPYRIGHTED
8 *
9 * This source code is offered for use in the public domain. You may
10 * use, modify or distribute it freely.
11 *
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.
16 *
17 */
18 #ifndef _WS2SPI_H
19 #define _WS2SPI_H
20
21 #include <winsock2.h>
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif /* __cplusplus */
26
27 #define WSPAPI WSAAPI
28 #define WSPDESCRIPTION_LEN 255
29
30 #ifndef RC_INVOKED
31
32 typedef struct WSPData {
33 WORD wVersion;
34 WORD wHighVersion;
35 WCHAR szDescription[WSPDESCRIPTION_LEN+1];
36 } WSPDATA, FAR *LPWSPDATA;
37 typedef struct _WSATHREADID {
38 HANDLE ThreadHandle;
39 DWORD Reserved;
40 } WSATHREADID, FAR *LPWSATHREADID;
41
42 typedef BOOL (CALLBACK FAR *LPBLOCKINGCALLBACK)(DWORD);
43 typedef VOID (CALLBACK FAR *LPWSAUSERAPC)(DWORD);
44
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);
81
82 /* Service provider procedure table */
83 typedef struct _WSPPROC_TABLE {
84 LPWSPACCEPT lpWSPAccept;
85 LPWSPADDRESSTOSTRING lpWSPAddressToString;
86 LPWSPASYNCSELECT lpWSPAsyncSelect;
87 LPWSPBIND lpWSPBind;
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;
103 LPWSPRECV lpWSPRecv;
104 LPWSPRECVDISCONNECT lpWSPRecvDisconnect;
105 LPWSPRECVFROM lpWSPRecvFrom;
106 LPWSPSELECT lpWSPSelect;
107 LPWSPSEND lpWSPSend;
108 LPWSPSENDDISCONNECT lpWSPSendDisconnect;
109 LPWSPSENDTO lpWSPSendTo;
110 LPWSPSETSOCKOPT lpWSPSetSockOpt;
111 LPWSPSHUTDOWN lpWSPShutdown;
112 LPWSPSOCKET lpWSPSocket;
113 LPWSPSTRINGTOADDRESS lpWSPStringToAddress;
114 } WSPPROC_TABLE, FAR* LPWSPPROC_TABLE;
115
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);
126
127 typedef struct _NSP_ROUTINE {
128 DWORD cbSize;
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;
139 LPNSPIOCTL NSPIoctl;
140 } NSP_ROUTINE, *PNSP_ROUTINE, FAR* LPNSP_ROUTINE;
141
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);
161
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;
180
181 typedef INT (WSPAPI *LPWSPSTARTUP)(WORD,LPWSPDATA,LPWSAPROTOCOL_INFOW,WSPUPCALLTABLE,LPWSPPROC_TABLE);
182
183 INT WSPAPI NSPStartup(LPGUID,LPNSP_ROUTINE);
184
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);
211
212 #endif /* RC_INVOKED */
213
214 #ifdef __cplusplus
215 }
216 #endif /* __cplusplus */
217
218 #endif /* _WS2SPI_H */