OSDN Git Service

Make <winsock.h> and <winsock2.h> duplicate code congruent.
[mingw/mingw-org-wsl.git] / w32api / include / ws2spi.h
1 /*
2  * ws2spi.h
3  *
4  * WinSock v2 Service Provider Interface.
5  *
6  * $Id$
7  *
8  * Written by Casper S. Hornstrup <chorns@users.sourceforge.net>
9  * Copyright (C) 2002-2004, 2006, 2017, MinGW.org Project
10  *
11  *
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:
18  *
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
21  * Software.
22  *
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.
30  *
31  */
32 #ifndef _WS2SPI_H
33 #pragma GCC system_header
34 #define _WS2SPI_H
35
36 #include <winsock2.h>
37
38 _BEGIN_C_DECLS
39
40 #define WSPAPI                  WSAAPI
41 #define WSPDESCRIPTION_LEN        255
42
43 #ifndef RC_INVOKED
44
45 typedef
46 struct WSPData
47 { WORD          wVersion;
48   WORD          wHighVersion;
49   WCHAR         szDescription[WSPDESCRIPTION_LEN+1];
50 } WSPDATA, FAR *LPWSPDATA;
51
52 typedef
53 struct _WSATHREADID
54 { HANDLE        ThreadHandle;
55   DWORD         Reserved;
56 } WSATHREADID, FAR *LPWSATHREADID;
57
58 typedef BOOL (CALLBACK FAR *LPBLOCKINGCALLBACK) (DWORD);
59 typedef VOID (CALLBACK FAR *LPWSAUSERAPC) (DWORD);
60
61 /* Prototypes for functions which may be invoked
62  * via the Service Provider Procedure Table.
63  */
64 typedef SOCKET (WSPAPI *LPWSPACCEPT)
65   ( SOCKET, LPSOCKADDR, LPINT, LPCONDITIONPROC, DWORD, LPINT
66   );
67 typedef INT (WSPAPI *LPWSPADDRESSTOSTRING)
68   ( LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD, LPINT
69   );
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);
75
76 typedef INT (WSPAPI *LPWSPCONNECT)
77   ( SOCKET, const struct sockaddr *, INT, LPWSABUF, LPWSABUF,
78     LPQOS, LPQOS, LPINT
79   );
80 typedef INT (WSPAPI *LPWSPDUPLICATESOCKET)
81   ( SOCKET, DWORD, LPWSAPROTOCOL_INFOW, LPINT
82   );
83 typedef INT (WSPAPI *LPWSPENUMNETWORKEVENTS)
84   ( SOCKET, WSAEVENT, LPWSANETWORKEVENTS, LPINT
85   );
86 typedef INT (WSPAPI *LPWSPEVENTSELECT) (SOCKET, WSAEVENT, LONG, LPINT);
87
88 typedef BOOL (WSPAPI *LPWSPGETOVERLAPPEDRESULT)
89   ( SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD, LPINT
90   );
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);
94
95 typedef INT (WSPAPI *LPWSPGETSOCKOPT)
96   ( SOCKET, INT, INT, CHAR FAR *, LPINT, LPINT
97   );
98 typedef INT (WSPAPI *LPWSPIOCTL)
99   ( SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED,
100     LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID, LPINT
101   );
102 typedef SOCKET (WSPAPI *LPWSPJOINLEAF)
103   ( SOCKET, const struct sockaddr*, INT, LPWSABUF, LPWSABUF,
104     LPQOS, LPQOS, DWORD, LPINT
105   );
106 typedef INT (WSPAPI *LPWSPLISTEN) (SOCKET, INT, LPINT);
107
108 typedef INT (WSPAPI *LPWSPRECV)
109   ( SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED,
110     LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID, LPINT
111   );
112 typedef INT (WSPAPI *LPWSPRECVDISCONNECT) (SOCKET, LPWSABUF, LPINT);
113
114 typedef INT (WSPAPI *LPWSPRECVFROM)
115   ( SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPSOCKADDR, LPINT,
116     LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID,
117     LPINT
118   );
119 typedef INT (WSPAPI *LPWSPSELECT)
120   ( INT, fd_set *, fd_set *, fd_set *, CONST TIMEVAL *, LPINT
121   );
122 typedef INT (WSPAPI *LPWSPSEND)
123   ( SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED,
124     LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSATHREADID, LPINT
125   );
126 typedef INT (WSPAPI *LPWSPSENDDISCONNECT) (SOCKET, LPWSABUF, LPINT);
127
128 typedef INT (WSPAPI *LPWSPSENDTO)
129   ( SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *,
130     INT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE,
131     LPWSATHREADID, LPINT
132   );
133 typedef INT (WSPAPI *LPWSPSETSOCKOPT)
134   ( SOCKET, INT, INT, CONST CHAR FAR *, INT, LPINT
135   );
136 typedef INT (WSPAPI *LPWSPSHUTDOWN) (SOCKET, INT, LPINT);
137
138 typedef SOCKET (WSPAPI *LPWSPSOCKET)
139   ( INT, INT, INT, LPWSAPROTOCOL_INFOW, GROUP, DWORD, LPINT
140   );
141 typedef INT (WSPAPI *LPWSPSTRINGTOADDRESS)
142   ( LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT, LPINT
143   );
144
145 typedef
146 struct _WSPPROC_TABLE
147 { /* Service Provider Procedure Table
148    */
149   LPWSPACCEPT                   lpWSPAccept;
150   LPWSPADDRESSTOSTRING          lpWSPAddressToString;
151   LPWSPASYNCSELECT              lpWSPAsyncSelect;
152   LPWSPBIND                     lpWSPBind;
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;
168   LPWSPRECV                     lpWSPRecv;
169   LPWSPRECVDISCONNECT           lpWSPRecvDisconnect;
170   LPWSPRECVFROM                 lpWSPRecvFrom;
171   LPWSPSELECT                   lpWSPSelect;
172   LPWSPSEND                     lpWSPSend;
173   LPWSPSENDDISCONNECT           lpWSPSendDisconnect;
174   LPWSPSENDTO                   lpWSPSendTo;
175   LPWSPSETSOCKOPT               lpWSPSetSockOpt;
176   LPWSPSHUTDOWN                 lpWSPShutdown;
177   LPWSPSOCKET                   lpWSPSocket;
178   LPWSPSTRINGTOADDRESS          lpWSPStringToAddress;
179 } WSPPROC_TABLE, FAR *LPWSPPROC_TABLE;
180
181 /* Prototypes for functions which may be invoked via
182  * the Service Provider Upcall Procedure Table.
183  */
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);
194
195 typedef INT (WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)
196   ( DWORD, LPBLOCKINGCALLBACK FAR *, LPDWORD, LPINT
197   );
198 typedef INT (WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT) (SOCKET, LPDWORD, LPINT);
199
200 typedef INT (WSPAPI *LPWPUQUEUEAPC)
201   ( LPWSATHREADID, LPWSAUSERAPC, DWORD, LPINT
202   );
203 typedef BOOL (WSPAPI *LPWPURESETEVENT) (WSAEVENT, LPINT);
204 typedef BOOL (WSPAPI *LPWPUSETEVENT) (WSAEVENT, LPINT);
205
206 /* Functions matching the following prototype are available
207  * only directly from the DLL
208  */
209 typedef INT (WSPAPI *LPWPUCOMPLETEOVERLAPPEDREQUEST)
210   ( SOCKET, LPWSAOVERLAPPED, DWORD, DWORD, LPINT
211   );
212
213 typedef
214 struct _WSPUPCALLTABLE
215 { /* Service Provider Upcall Table
216    */
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;
233
234 typedef INT (WSPAPI *LPWSPSTARTUP)
235   ( WORD, LPWSPDATA, LPWSAPROTOCOL_INFOW, WSPUPCALLTABLE, LPWSPPROC_TABLE
236   );
237
238 /* Prototypes for functions which may be invoked via
239  * the Service Provider Namespace Procedure Table.
240  */
241 typedef INT (WSPAPI *LPNSPCLEANUP) (LPGUID);
242
243 typedef INT (WSPAPI *LPNSPGETSERVICECLASSINFO)
244   ( LPGUID, LPDWORD, LPWSASERVICECLASSINFOW
245   );
246 typedef INT (WSPAPI *LPNSPINSTALLSERVICECLASS)
247   ( LPGUID, LPWSASERVICECLASSINFOW
248   );
249 typedef INT (WSPAPI *LPNSPLOOKUPSERVICEBEGIN)
250   ( LPGUID, LPWSAQUERYSETW, LPWSASERVICECLASSINFOW, DWORD, LPHANDLE
251   );
252 typedef INT (WSPAPI *LPNSPLOOKUPSERVICEEND) (HANDLE);
253 typedef INT (WSPAPI *LPNSPLOOKUPSERVICENEXT)
254   ( HANDLE, DWORD, LPDWORD, LPWSAQUERYSET
255   );
256 typedef INT (WSPAPI *LPNSPREMOVESERVICECLASS) (LPGUID, LPGUID);
257
258 typedef INT (WSPAPI *LPNSPSETSERVICE)
259   ( LPGUID, LPWSASERVICECLASSINFOW, LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD
260   );
261
262 typedef
263 struct _NSP_ROUTINE
264 { /* Service Provider Namespace Procedure Table
265    */
266   DWORD                         cbSize;
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;
278
279 INT WSPAPI NSPStartup (LPGUID, LPNSP_ROUTINE);
280
281 /* WinSock v2 DLL function prototypes
282  */
283 INT WSPAPI WPUCompleteOverlappedRequest
284   ( SOCKET, LPWSAOVERLAPPED, DWORD, DWORD, LPINT
285   );
286 INT WSPAPI WSPStartup
287   ( WORD, LPWSPDATA, LPWSAPROTOCOL_INFOW, WSPUPCALLTABLE, LPWSPPROC_TABLE
288   );
289 INT WSPAPI WSCDeinstallProvider (LPGUID, LPINT);
290 INT WSPAPI WSCEnumProtocols (LPINT, LPWSAPROTOCOL_INFOW, LPDWORD, LPINT);
291 INT WSPAPI WSCGetProviderPath (LPGUID, LPWSTR, LPINT, LPINT);
292
293 INT WSPAPI WSCInstallProvider
294   ( CONST LPGUID, CONST LPWSTR, CONST LPWSAPROTOCOL_INFOW, DWORD, LPINT
295   );
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);
300
301 #endif /* ! RC_INVOKED */
302
303 _END_C_DECLS
304
305 #endif  /* !_WS2SPI_H: $RCSfile$: end of file */