1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Definitions to be used with the WinSock service provider.
7 use ctypes::{c_char, c_int, c_long, c_uint};
8 use shared::basetsd::{DWORD_PTR, PDWORD_PTR, ULONG_PTR};
9 use shared::guiddef::{GUID, LPGUID};
10 use shared::minwindef::{
11     BOOL, DWORD, INT, LPARAM, LPDWORD, LPHANDLE, LPINT, LPVOID, PBYTE, UINT, WORD, WPARAM,
12 };
13 use shared::windef::HWND;
14 use shared::ws2def::{LPSOCKADDR, LPWSABUF, SOCKADDR};
15 use shared::wtypesbase::LPBLOB;
16 use um::winnt::{HANDLE, LPCWSTR, LPWSTR, PVOID, WCHAR};
17 use um::winsock2::{
18     GROUP, LPCONDITIONPROC, LPQOS, LPWSACOMPLETION, LPWSANETWORKEVENTS, LPWSAOVERLAPPED,
19     LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSAPROTOCOL_INFOW, LPWSAQUERYSET2W, LPWSAQUERYSETW,
20     LPWSASERVICECLASSINFOW, SOCKET, WSAESETSERVICEOP, WSAEVENT, fd_set, timeval,
21 };
22 #[cfg(target_pointer_width = "64")]
23 use um::winsock2::{LPWSANAMESPACE_INFOEXW, LPWSANAMESPACE_INFOW};
24 use vc::vcruntime::size_t;
25 pub const WSPDESCRIPTION_LEN: usize = 255;
26 pub const WSS_OPERATION_IN_PROGRESS: ULONG_PTR = 0x00000103;
27 STRUCT!{struct WSPDATA {
28     wVersion: WORD,
29     wHighVersion: WORD,
30     szDescription: [WCHAR; WSPDESCRIPTION_LEN + 1],
31 }}
32 pub type LPWSPDATA = *mut WSPDATA;
33 STRUCT!{struct WSATHREADID {
34     ThreadHandle: HANDLE,
35     Reserved: DWORD_PTR,
36 }}
37 pub type LPWSATHREADID = *mut WSATHREADID;
38 FN!{stdcall LPBLOCKINGCALLBACK(
39     dwContext: DWORD_PTR,
40 ) -> BOOL}
41 FN!{stdcall LPWSAUSERAPC(
42     dwContext: DWORD_PTR,
43 ) -> ()}
44 FN!{stdcall LPWSPACCEPT(
45     s: SOCKET,
46     addr: *mut SOCKADDR,
47     addrlen: LPINT,
48     lpfnCondition: LPCONDITIONPROC,
49     dwCallbackData: DWORD_PTR,
50     lpErrno: LPINT,
51 ) -> SOCKET}
52 FN!{stdcall LPWSPADDRESSTOSTRING(
53     lpsaAddress: LPSOCKADDR,
54     dwAddressLength: DWORD,
55     lpProtocolInfo: LPWSAPROTOCOL_INFOW,
56     lpszAddressString: LPWSTR,
57     lpdwAddressStringLength: LPDWORD,
58     lpErrno: LPINT,
59 ) -> INT}
60 FN!{stdcall LPWSPASYNCSELECT(
61     s: SOCKET,
62     hWnd: HWND,
63     wMsg: c_uint,
64     lEvent: c_long,
65     lpErrno: LPINT,
66 ) -> c_int}
67 FN!{stdcall LPWSPBIND(
68     s: SOCKET,
69     name: *mut SOCKADDR,
70     namelen: c_int,
71     lpErrno: LPINT,
72 ) -> c_int}
73 FN!{stdcall LPWSPCANCELBLOCKINGCALL(
74     lpErrno: LPINT,
75 ) -> c_int}
76 FN!{stdcall LPWSPCLEANUP(
77     lpErrno: LPINT,
78 ) -> c_int}
79 FN!{stdcall LPWSPCLOSESOCKET(
80     s: SOCKET,
81     lpErrno: LPINT,
82 ) -> c_int}
83 FN!{stdcall LPWSPCONNECT(
84     s: SOCKET,
85     name: *mut SOCKADDR,
86     namelen: c_int,
87     lpCallerData: LPWSABUF,
88     lpCalleeData: LPWSABUF,
89     lpSQOS: LPQOS,
90     lpGQOS: LPQOS,
91     lpErrno: LPINT,
92 ) -> c_int}
93 FN!{stdcall LPWSPDUPLICATESOCKET(
94     s: SOCKET,
95     dwProcessId: DWORD,
96     lpProtocolInfo: LPWSAPROTOCOL_INFOW,
97     lpErrno: LPINT,
98 ) -> c_int}
99 FN!{stdcall LPWSPENUMNETWORKEVENTS(
100     s: SOCKET,
101     hEventObject: WSAEVENT,
102     lpNetworkEvents: LPWSANETWORKEVENTS,
103     lpErrno: LPINT,
104 ) -> c_int}
105 FN!{stdcall LPWSPEVENTSELECT(
106     s: SOCKET,
107     hEventObject: WSAEVENT,
108     lNetworkEvents: c_long,
109     lpErrno: LPINT,
110 ) -> c_int}
111 FN!{stdcall LPWSPGETOVERLAPPEDRESULT(
112     s: SOCKET,
113     lpOverlapped: LPWSAOVERLAPPED,
114     lpcbTransfer: LPDWORD,
115     fWait: BOOL,
116     lpdwFlags: LPDWORD,
117     lpErrno: LPINT,
118 ) -> BOOL}
119 FN!{stdcall LPWSPGETPEERNAME(
120     s: SOCKET,
121     name: *mut SOCKADDR,
122     namelen: LPINT,
123     lpErrno: LPINT,
124 ) -> c_int}
125 FN!{stdcall LPWSPGETSOCKNAME(
126     s: SOCKET,
127     name: *mut SOCKADDR,
128     namelen: LPINT,
129     lpErrno: LPINT,
130 ) -> c_int}
131 FN!{stdcall LPWSPGETSOCKOPT(
132     s: SOCKET,
133     level: c_int,
134     optname: c_int,
135     optval: *mut c_char,
136     optlen: LPINT,
137     lpErrno: LPINT,
138 ) -> c_int}
139 FN!{stdcall LPWSPGETQOSBYNAME(
140     s: SOCKET,
141     lpQOSName: LPWSABUF,
142     lpQOS: LPQOS,
143     lpErrno: LPINT,
144 ) -> BOOL}
145 FN!{stdcall LPWSPIOCTL(
146     s: SOCKET,
147     dwIoControlCode: DWORD,
148     lpvInBuffer: LPVOID,
149     cbInBuffer: DWORD,
150     lpvOutBuffer: LPVOID,
151     cbOutBuffer: DWORD,
152     lpcbBytesReturned: LPDWORD,
153     lpOverlapped: LPWSAOVERLAPPED,
154     lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
155     lpThreadId: LPWSATHREADID,
156     lpErrno: LPINT,
157 ) -> c_int}
158 FN!{stdcall LPWSPJOINLEAF(
159     s: SOCKET,
160     name: *mut SOCKADDR,
161     namelen: c_int,
162     lpCallerData: LPWSABUF,
163     lpCalleeData: LPWSABUF,
164     lpSQOS: LPQOS,
165     lpGQOS: LPQOS,
166     dwFlags: DWORD,
167     lpErrno: LPINT,
168 ) -> SOCKET}
169 FN!{stdcall LPWSPLISTEN(
170     s: SOCKET,
171     backlog: c_int,
172     lpErrno: LPINT,
173 ) -> c_int}
174 FN!{stdcall LPWSPRECV(
175     s: SOCKET,
176     lpBuffers: LPWSABUF,
177     dwBufferCount: DWORD,
178     lpNumberOfBytesRecvd: LPDWORD,
179     lpFlags: LPDWORD,
180     lpOverlapped: LPWSAOVERLAPPED,
181     lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
182     lpThreadId: LPWSATHREADID,
183     lpErrno: LPINT,
184 ) -> c_int}
185 FN!{stdcall LPWSPRECVDISCONNECT(
186     s: SOCKET,
187     lpInboundDisconnectData: LPWSABUF,
188     lpErrno: LPINT,
189 ) -> c_int}
190 FN!{stdcall LPWSPRECVFROM(
191     s: SOCKET,
192     lpBuffers: LPWSABUF,
193     dwBufferCount: DWORD,
194     lpNumberOfBytesRecvd: LPDWORD,
195     lpFlags: LPDWORD,
196     lpFrom: *mut SOCKADDR,
197     lpFromlen: LPINT,
198     lpOverlapped: LPWSAOVERLAPPED,
199     lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
200     lpThreadId: LPWSATHREADID,
201     lpErrno: LPINT,
202 ) -> c_int}
203 FN!{stdcall LPWSPSELECT(
204     nfds: c_int,
205     readfds: *mut fd_set,
206     writefds: *mut fd_set,
207     exceptfds: *mut fd_set,
208     timeout: *const timeval,
209     lpErrno: LPINT,
210 ) -> c_int}
211 FN!{stdcall LPWSPSEND(
212     s: SOCKET,
213     lpBuffers: LPWSABUF,
214     dwBufferCount: DWORD,
215     lpNumberOfBytesSent: LPDWORD,
216     dwFlags: DWORD,
217     lpOverlapped: LPWSAOVERLAPPED,
218     lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
219     lpThreadId: LPWSATHREADID,
220     lpErrno: LPINT,
221 ) -> c_int}
222 FN!{stdcall LPWSPSENDDISCONNECT(
223     s: SOCKET,
224     lpOutboundDisconnectData: LPWSABUF,
225     lpErrno: LPINT,
226 ) -> c_int}
227 FN!{stdcall LPWSPSENDTO(
228     s: SOCKET,
229     lpBuffers: LPWSABUF,
230     dwBufferCount: DWORD,
231     lpNumberOfBytesSent: LPDWORD,
232     dwFlags: DWORD,
233     lpTo: *const SOCKADDR,
234     iTolen: c_int,
235     lpOverlapped: LPWSAOVERLAPPED,
236     lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
237     lpThreadId: LPWSATHREADID,
238     lpErrno: LPINT,
239 ) -> c_int}
240 FN!{stdcall LPWSPSETSOCKOPT(
241     s: SOCKET,
242     level: c_int,
243     optname: c_int,
244     optval: *const c_char,
245     optlen: c_int,
246     lpErrno: LPINT,
247 ) -> c_int}
248 FN!{stdcall LPWSPSHUTDOWN(
249     s: SOCKET,
250     how: c_int,
251     lpErrno: LPINT,
252 ) -> c_int}
253 FN!{stdcall LPWSPSOCKET(
254     af: c_int,
255     _type: c_int,
256     protocol: c_int,
257     lpProtocolInfo: LPWSAPROTOCOL_INFOW,
258     g: GROUP,
259     dwFlags: DWORD,
260     lpErrno: LPINT,
261 ) -> SOCKET}
262 FN!{stdcall LPWSPSTRINGTOADDRESS(
263     AddressString: LPWSTR,
264     AddressFamily: INT,
265     lpProtocolInfo: LPWSAPROTOCOL_INFOW,
266     lpAddress: LPSOCKADDR,
267     lpAddressLength: LPINT,
268     lpErrno: LPINT,
269 ) -> c_int}
270 STRUCT!{struct WSPPROC_TABLE {
271     lpWSPAccept: LPWSPACCEPT,
272     lpWSPAddressToString: LPWSPADDRESSTOSTRING,
273     lpWSPAsyncSelect: LPWSPASYNCSELECT,
274     lpWSPBind: LPWSPBIND,
275     lpWSPCancelBlockingCall: LPWSPCANCELBLOCKINGCALL,
276     lpWSPCleanup: LPWSPCLEANUP,
277     lpWSPCloseSocket: LPWSPCLOSESOCKET,
278     lpWSPConnect: LPWSPCONNECT,
279     lpWSPDuplicateSocket: LPWSPDUPLICATESOCKET,
280     lpWSPEnumNetworkEvents: LPWSPENUMNETWORKEVENTS,
281     lpWSPEventSelect: LPWSPEVENTSELECT,
282     lpWSPGetOverlappedResult: LPWSPGETOVERLAPPEDRESULT,
283     lpWSPGetPeerName: LPWSPGETPEERNAME,
284     lpWSPGetSockName: LPWSPGETSOCKNAME,
285     lpWSPGetSockOpt: LPWSPGETSOCKOPT,
286     lpWSPGetQOSByName: LPWSPGETQOSBYNAME,
287     lpWSPIoctl: LPWSPIOCTL,
288     lpWSPJoinLeaf: LPWSPJOINLEAF,
289     lpWSPListen: LPWSPLISTEN,
290     lpWSPRecv: LPWSPRECV,
291     lpWSPRecvDisconnect: LPWSPRECVDISCONNECT,
292     lpWSPRecvFrom: LPWSPRECVFROM,
293     lpWSPSelect: LPWSPSELECT,
294     lpWSPSend: LPWSPSEND,
295     lpWSPSendDisconnect: LPWSPSENDDISCONNECT,
296     lpWSPSendTo: LPWSPSENDTO,
297     lpWSPSetSockOpt: LPWSPSETSOCKOPT,
298     lpWSPShutdown: LPWSPSHUTDOWN,
299     lpWSPSocket: LPWSPSOCKET,
300     lpWSPStringToAddress: LPWSPSTRINGTOADDRESS,
301 }}
302 pub type LPWSPPROC_TABLE = *mut WSPPROC_TABLE;
303 FN!{stdcall LPWPUCLOSEEVENT(
304     hEvent: WSAEVENT,
305     lpErrno: LPINT,
306 ) -> c_int}
307 FN!{stdcall LPWPUCLOSESOCKETHANDLE(
308     s: SOCKET,
309     lpErrno: LPINT,
310 ) -> c_int}
311 FN!{stdcall LPWPUCREATEEVENT(
312     lpErrno: LPINT,
313 ) -> WSAEVENT}
314 FN!{stdcall LPWPUCREATESOCKETHANDLE(
315     dwCatalogEntryId: DWORD,
316     dwContext: DWORD_PTR,
317     lpErrno: LPINT,
318 ) -> SOCKET}
319 FN!{stdcall LPWPUFDISSET(
320     s: SOCKET,
321     fdset: *mut fd_set,
322 ) -> c_int}
323 FN!{stdcall LPWPUGETPROVIDERPATH(
324     lpProviderId: LPGUID,
325     lpszProviderDllPath: *mut WCHAR,
326     lpProviderDllPathLen: LPINT,
327     lpErrno: LPINT,
328 ) -> c_int}
329 FN!{stdcall LPWPUMODIFYIFSHANDLE(
330     dwCatalogEntryId: DWORD,
331     ProposedHandle: SOCKET,
332     lpErrno: LPINT,
333 ) -> SOCKET}
334 FN!{stdcall LPWPUPOSTMESSAGE(
335     hWnd: HWND,
336     Msg: UINT,
337     wParam: WPARAM,
338     lParam: LPARAM,
339 ) -> BOOL}
340 FN!{stdcall LPWPUQUERYBLOCKINGCALLBACK(
341     dwCatalogEntryId: DWORD,
342     lplpfnCallback: *mut LPBLOCKINGCALLBACK,
343     lpdwContext: PDWORD_PTR,
344     lpErrno: LPINT,
345 ) -> c_int}
346 FN!{stdcall LPWPUQUERYSOCKETHANDLECONTEXT(
347     s: SOCKET,
348     lpContext: PDWORD_PTR,
349     lpErrno: LPINT,
350 ) -> c_int}
351 FN!{stdcall LPWPUQUEUEAPC(
352     lpThreadId: LPWSATHREADID,
353     lpfnUserApc: LPWSAUSERAPC,
354     dwContext: DWORD_PTR,
355     lpErrno: LPINT,
356 ) -> c_int}
357 FN!{stdcall LPWPURESETEVENT(
358     hEvent: WSAEVENT,
359     lpErrno: LPINT,
360 ) -> BOOL}
361 FN!{stdcall LPWPUSETEVENT(
362     hEvent: WSAEVENT,
363     lpErrno: LPINT,
364 ) -> BOOL}
365 FN!{stdcall LPWPUOPENCURRENTTHREAD(
366     lpThreadId: LPWSATHREADID,
367     lpErrno: LPINT,
368 ) -> c_int}
369 FN!{stdcall LPWPUCLOSETHREAD(
370     lpThreadId: LPWSATHREADID,
371     lpErrno: LPINT,
372 ) -> c_int}
373 FN!{stdcall LPWPUCOMPLETEOVERLAPPEDREQUEST(
374     s: SOCKET,
375     lpOverlapped: LPWSAOVERLAPPED,
376     dwError: DWORD,
377     cbTransferred: DWORD,
378     lpErrno: LPINT,
379 ) -> c_int}
380 STRUCT!{struct WSPUPCALLTABLE {
381     lpWPUCloseEvent: LPWPUCLOSEEVENT,
382     lpWPUCloseSocketHandle: LPWPUCLOSESOCKETHANDLE,
383     lpWPUCreateEvent: LPWPUCREATEEVENT,
384     lpWPUCreateSocketHandle: LPWPUCREATESOCKETHANDLE,
385     lpWPUFDIsSet: LPWPUFDISSET,
386     lpWPUGetProviderPath: LPWPUGETPROVIDERPATH,
387     lpWPUModifyIFSHandle: LPWPUMODIFYIFSHANDLE,
388     lpWPUPostMessage: LPWPUPOSTMESSAGE,
389     lpWPUQueryBlockingCallback: LPWPUQUERYBLOCKINGCALLBACK,
390     lpWPUQuerySocketHandleContext: LPWPUQUERYSOCKETHANDLECONTEXT,
391     lpWPUQueueApc: LPWPUQUEUEAPC,
392     lpWPUResetEvent: LPWPURESETEVENT,
393     lpWPUSetEvent: LPWPUSETEVENT,
394     lpWPUOpenCurrentThread: LPWPUOPENCURRENTTHREAD,
395     lpWPUCloseThread: LPWPUCLOSETHREAD,
396 }}
397 pub type LPWSPUPCALLTABLE = *mut WSPUPCALLTABLE;
398 extern "system" {
WSPStartup( wVersionRequested: WORD, lpWSPData: LPWSPDATA, lpProtocolInfo: LPWSAPROTOCOL_INFOW, UpcallTable: WSPUPCALLTABLE, lpProcTable: LPWSPPROC_TABLE, ) -> c_int399     pub fn WSPStartup(
400         wVersionRequested: WORD,
401         lpWSPData: LPWSPDATA,
402         lpProtocolInfo: LPWSAPROTOCOL_INFOW,
403         UpcallTable: WSPUPCALLTABLE,
404         lpProcTable: LPWSPPROC_TABLE,
405     ) -> c_int;
406 }
407 FN!{stdcall LPWSPSTARTUP(
408     wVersionRequested: WORD,
409     lpWSPData: LPWSPDATA,
410     lpProtocolInfo: LPWSAPROTOCOL_INFOW,
411     UpcallTable: WSPUPCALLTABLE,
412     lpProcTable: LPWSPPROC_TABLE,
413 ) -> c_int}
414 extern "system" {
WSCEnumProtocols( lpiProtocols: LPINT, lpProtocolBuffer: LPWSAPROTOCOL_INFOW, lpdwBufferLength: LPDWORD, lpErrno: LPINT, ) -> c_int415     pub fn WSCEnumProtocols(
416         lpiProtocols: LPINT,
417         lpProtocolBuffer: LPWSAPROTOCOL_INFOW,
418         lpdwBufferLength: LPDWORD,
419         lpErrno: LPINT,
420     ) -> c_int;
421 }
422 FN!{stdcall LPWSCENUMPROTOCOLS(
423     lpiProtocols: LPINT,
424     lpProtocolBuffer: LPWSAPROTOCOL_INFOW,
425     lpdwBufferLength: LPDWORD,
426     lpErrno: LPINT,
427 ) -> c_int}
428 extern "system" {
429     #[cfg(target_pointer_width = "64")]
WSCEnumProtocols32( lpiProtocols: LPINT, lpProtocolBuffer: LPWSAPROTOCOL_INFOW, lpdwBufferLength: LPDWORD, lpErrno: LPINT, ) -> c_int430     pub fn WSCEnumProtocols32(
431         lpiProtocols: LPINT,
432         lpProtocolBuffer: LPWSAPROTOCOL_INFOW,
433         lpdwBufferLength: LPDWORD,
434         lpErrno: LPINT,
435     ) -> c_int;
WSCDeinstallProvider( lpProviderId: LPGUID, lpErrno: LPINT, ) -> c_int436     pub fn WSCDeinstallProvider(
437         lpProviderId: LPGUID,
438         lpErrno: LPINT,
439     ) -> c_int;
440 }
441 FN!{stdcall LPWSCDEINSTALLPROVIDER(
442     lpProviderId: LPGUID,
443     lpErrno: LPINT,
444 ) -> c_int}
445 extern "system" {
446     #[cfg(target_pointer_width = "64")]
WSCDeinstallProvider32( lpProviderId: LPGUID, lpErrno: LPINT, ) -> c_int447     pub fn WSCDeinstallProvider32(
448         lpProviderId: LPGUID,
449         lpErrno: LPINT,
450     ) -> c_int;
WSCInstallProvider( lpProviderId: LPGUID, lpszProviderDllPath: *const WCHAR, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpErrno: LPINT, ) -> c_int451     pub fn WSCInstallProvider(
452         lpProviderId: LPGUID,
453         lpszProviderDllPath: *const WCHAR,
454         lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
455         dwNumberOfEntries: DWORD,
456         lpErrno: LPINT,
457     ) -> c_int;
458 }
459 FN!{stdcall LPWSCINSTALLPROVIDER(
460     lpProviderId: LPGUID,
461     lpszProviderDllPath: *const WCHAR,
462     lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
463     dwNumberOfEntries: DWORD,
464     lpErrno: LPINT,
465 ) -> c_int}
466 extern "system" {
467     #[cfg(target_pointer_width = "64")]
WSCInstallProvider64_32( lpProviderId: LPGUID, lpszProviderDllPath: *const WCHAR, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpErrno: LPINT, ) -> c_int468     pub fn WSCInstallProvider64_32(
469         lpProviderId: LPGUID,
470         lpszProviderDllPath: *const WCHAR,
471         lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
472         dwNumberOfEntries: DWORD,
473         lpErrno: LPINT,
474     ) -> c_int;
WSCGetProviderPath( lpProviderId: LPGUID, lpszProviderDllPath: *mut WCHAR, lpProviderDllPathLen: LPINT, lpErrno: LPINT, ) -> c_int475     pub fn WSCGetProviderPath(
476         lpProviderId: LPGUID,
477         lpszProviderDllPath: *mut WCHAR,
478         lpProviderDllPathLen: LPINT,
479         lpErrno: LPINT,
480     ) -> c_int;
481 }
482 FN!{stdcall LPWSCGETPROVIDERPATH(
483     lpProviderId: LPGUID,
484     lpszProviderDllPath: *mut WCHAR,
485     lpProviderDllPathLen: LPINT,
486     lpErrno: LPINT,
487 ) -> c_int}
488 extern "system" {
489     #[cfg(target_pointer_width = "64")]
WSCGetProviderPath32( lpProviderId: LPGUID, lpszProviderDllPath: *mut WCHAR, lpProviderDllPathLen: LPINT, lpErrno: LPINT, ) -> c_int490     pub fn WSCGetProviderPath32(
491         lpProviderId: LPGUID,
492         lpszProviderDllPath: *mut WCHAR,
493         lpProviderDllPathLen: LPINT,
494         lpErrno: LPINT,
495     ) -> c_int;
WSCUpdateProvider( lpProviderId: LPGUID, lpszProviderDllPath: *const WCHAR, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpErrno: LPINT, ) -> c_int496     pub fn WSCUpdateProvider(
497         lpProviderId: LPGUID,
498         lpszProviderDllPath: *const WCHAR,
499         lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
500         dwNumberOfEntries: DWORD,
501         lpErrno: LPINT,
502     ) -> c_int;
503 }
504 FN!{stdcall LPWSCUPDATEPROVIDER(
505     lpProviderId: LPGUID,
506     lpszProviderDllPath: *const WCHAR,
507     lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
508     dwNumberOfEntries: DWORD,
509     lpErrno: LPINT,
510 ) -> c_int}
511 #[cfg(target_pointer_width = "64")]
512 extern "system" {
WSCUpdateProvider32( lpProviderId: LPGUID, lpszProviderDllPath: *const WCHAR, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpErrno: LPINT, ) -> c_int513     pub fn WSCUpdateProvider32(
514         lpProviderId: LPGUID,
515         lpszProviderDllPath: *const WCHAR,
516         lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
517         dwNumberOfEntries: DWORD,
518         lpErrno: LPINT,
519     ) -> c_int;
520 }
521 pub const LSP_SYSTEM: DWORD = 0x80000000;
522 pub const LSP_INSPECTOR: DWORD = 0x00000001;
523 pub const LSP_REDIRECTOR: DWORD = 0x00000002;
524 pub const LSP_PROXY: DWORD = 0x00000004;
525 pub const LSP_FIREWALL: DWORD = 0x00000008;
526 pub const LSP_INBOUND_MODIFY: DWORD = 0x00000010;
527 pub const LSP_OUTBOUND_MODIFY: DWORD = 0x00000020;
528 pub const LSP_CRYPTO_COMPRESS: DWORD = 0x00000040;
529 pub const LSP_LOCAL_CACHE: DWORD = 0x00000080;
530 ENUM!{enum WSC_PROVIDER_INFO_TYPE {
531     ProviderInfoLspCategories,
532     ProviderInfoAudit,
533 }}
534 STRUCT!{struct WSC_PROVIDER_AUDIT_INFO {
535     RecordSize: DWORD,
536     Reserved: PVOID,
537 }}
538 extern "system" {
WSCSetProviderInfo( lpProviderId: LPGUID, InfoType: WSC_PROVIDER_INFO_TYPE, Info: PBYTE, InfoSize: size_t, Flags: DWORD, lpErrno: LPINT, ) -> c_int539     pub fn WSCSetProviderInfo(
540         lpProviderId: LPGUID,
541         InfoType: WSC_PROVIDER_INFO_TYPE,
542         Info: PBYTE,
543         InfoSize: size_t,
544         Flags: DWORD,
545         lpErrno: LPINT,
546     ) -> c_int;
WSCGetProviderInfo( lpProviderId: LPGUID, InfoType: WSC_PROVIDER_INFO_TYPE, Info: PBYTE, InfoSize: *mut size_t, Flags: DWORD, lpErrno: LPINT, ) -> c_int547     pub fn WSCGetProviderInfo(
548         lpProviderId: LPGUID,
549         InfoType: WSC_PROVIDER_INFO_TYPE,
550         Info: PBYTE,
551         InfoSize: *mut size_t,
552         Flags: DWORD,
553         lpErrno: LPINT,
554     ) -> c_int;
555     #[cfg(target_pointer_width = "64")]
WSCSetProviderInfo32( lpProviderId: LPGUID, InfoType: WSC_PROVIDER_INFO_TYPE, Info: PBYTE, InfoSize: size_t, Flags: DWORD, lpErrno: LPINT, ) -> c_int556     pub fn WSCSetProviderInfo32(
557         lpProviderId: LPGUID,
558         InfoType: WSC_PROVIDER_INFO_TYPE,
559         Info: PBYTE,
560         InfoSize: size_t,
561         Flags: DWORD,
562         lpErrno: LPINT,
563     ) -> c_int;
564     #[cfg(target_pointer_width = "64")]
WSCGetProviderInfo32( lpProviderId: LPGUID, InfoType: WSC_PROVIDER_INFO_TYPE, Info: PBYTE, InfoSize: *mut size_t, Flags: DWORD, lpErrno: LPINT, ) -> c_int565     pub fn WSCGetProviderInfo32(
566         lpProviderId: LPGUID,
567         InfoType: WSC_PROVIDER_INFO_TYPE,
568         Info: PBYTE,
569         InfoSize: *mut size_t,
570         Flags: DWORD,
571         lpErrno: LPINT,
572     ) -> c_int;
WSCSetApplicationCategory( Path: LPCWSTR, PathLength: DWORD, Extra: LPCWSTR, ExtraLength: DWORD, PermittedLspCategories: DWORD, pPrevPermLspCat: *mut DWORD, lpErrno: LPINT, ) -> c_int573     pub fn WSCSetApplicationCategory(
574         Path: LPCWSTR,
575         PathLength: DWORD,
576         Extra: LPCWSTR,
577         ExtraLength: DWORD,
578         PermittedLspCategories: DWORD,
579         pPrevPermLspCat: *mut DWORD,
580         lpErrno: LPINT,
581     ) -> c_int;
WSCGetApplicationCategory( Path: LPCWSTR, PathLength: DWORD, Extra: LPCWSTR, ExtraLength: DWORD, pPermittedLspCategories: *mut DWORD, lpErrno: LPINT, ) -> c_int582     pub fn WSCGetApplicationCategory(
583         Path: LPCWSTR,
584         PathLength: DWORD,
585         Extra: LPCWSTR,
586         ExtraLength: DWORD,
587         pPermittedLspCategories: *mut DWORD,
588         lpErrno: LPINT,
589     ) -> c_int;
WPUCloseEvent( hEvent: WSAEVENT, lpErrno: LPINT, ) -> BOOL590     pub fn WPUCloseEvent(
591         hEvent: WSAEVENT,
592         lpErrno: LPINT,
593     ) -> BOOL;
WPUCloseSocketHandle( s: SOCKET, lpErrno: LPINT, ) -> c_int594     pub fn WPUCloseSocketHandle(
595         s: SOCKET,
596         lpErrno: LPINT,
597     ) -> c_int;
WPUCreateEvent( lpErrno: LPINT, ) -> WSAEVENT598     pub fn WPUCreateEvent(
599         lpErrno: LPINT,
600     ) -> WSAEVENT;
WPUCreateSocketHandle( dwCatalogEntryId: DWORD, dwContext: DWORD_PTR, lpErrno: LPINT, ) -> SOCKET601     pub fn WPUCreateSocketHandle(
602         dwCatalogEntryId: DWORD,
603         dwContext: DWORD_PTR,
604         lpErrno: LPINT,
605     ) -> SOCKET;
WPUFDIsSet( s: SOCKET, fdset: *mut fd_set, ) -> c_int606     pub fn WPUFDIsSet(
607         s: SOCKET,
608         fdset: *mut fd_set,
609     ) -> c_int;
WPUGetProviderPath( lpProviderId: LPGUID, lpszProviderDllPath: *mut WCHAR, lpProviderDllPathLen: LPINT, lpErrno: LPINT, ) -> c_int610     pub fn WPUGetProviderPath(
611         lpProviderId: LPGUID,
612         lpszProviderDllPath: *mut WCHAR,
613         lpProviderDllPathLen: LPINT,
614         lpErrno: LPINT,
615     ) -> c_int;
WPUModifyIFSHandle( dwCatalogEntryId: DWORD, ProposedHandle: SOCKET, lpErrno: LPINT, ) -> SOCKET616     pub fn WPUModifyIFSHandle(
617         dwCatalogEntryId: DWORD,
618         ProposedHandle: SOCKET,
619         lpErrno: LPINT,
620     ) -> SOCKET;
WPUPostMessage( hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM, ) -> BOOL621     pub fn WPUPostMessage(
622         hWnd: HWND,
623         Msg: UINT,
624         wParam: WPARAM,
625         lParam: LPARAM,
626     ) -> BOOL;
WPUQueryBlockingCallback( dwCatalogEntryId: DWORD, lplpfnCallback: *mut LPBLOCKINGCALLBACK, lpdwContext: PDWORD_PTR, lpErrno: LPINT, ) -> c_int627     pub fn WPUQueryBlockingCallback(
628         dwCatalogEntryId: DWORD,
629         lplpfnCallback: *mut LPBLOCKINGCALLBACK,
630         lpdwContext: PDWORD_PTR,
631         lpErrno: LPINT,
632     ) -> c_int;
WPUQuerySocketHandleContext( s: SOCKET, lpContext: PDWORD_PTR, lpErrno: LPINT, ) -> c_int633     pub fn WPUQuerySocketHandleContext(
634         s: SOCKET,
635         lpContext: PDWORD_PTR,
636         lpErrno: LPINT,
637     ) -> c_int;
WPUQueueApc( lpThreadId: LPWSATHREADID, lpfnUserApc: LPWSAUSERAPC, dwContext: DWORD_PTR, lpErrno: LPINT, ) -> c_int638     pub fn WPUQueueApc(
639         lpThreadId: LPWSATHREADID,
640         lpfnUserApc: LPWSAUSERAPC,
641         dwContext: DWORD_PTR,
642         lpErrno: LPINT,
643     ) -> c_int;
WPUResetEvent( hEvent: WSAEVENT, lpErrno: LPINT, ) -> BOOL644     pub fn WPUResetEvent(
645         hEvent: WSAEVENT,
646         lpErrno: LPINT,
647     ) -> BOOL;
WPUSetEvent( hEvent: WSAEVENT, lpErrno: LPINT, ) -> BOOL648     pub fn WPUSetEvent(
649         hEvent: WSAEVENT,
650         lpErrno: LPINT,
651     ) -> BOOL;
WPUCompleteOverlappedRequest( s: SOCKET, lpOverlapped: LPWSAOVERLAPPED, dwError: DWORD, cbTransferred: DWORD, lpErrno: LPINT, ) -> c_int652     pub fn WPUCompleteOverlappedRequest(
653         s: SOCKET,
654         lpOverlapped: LPWSAOVERLAPPED,
655         dwError: DWORD,
656         cbTransferred: DWORD,
657         lpErrno: LPINT,
658     ) -> c_int;
WPUOpenCurrentThread( lpThreadId: LPWSATHREADID, lpErrno: LPINT, ) -> c_int659     pub fn WPUOpenCurrentThread(
660         lpThreadId: LPWSATHREADID,
661         lpErrno: LPINT,
662     ) -> c_int;
WPUCloseThread( lpThreadId: LPWSATHREADID, lpErrno: LPINT, ) -> c_int663     pub fn WPUCloseThread(
664         lpThreadId: LPWSATHREADID,
665         lpErrno: LPINT,
666     ) -> c_int;
667     #[cfg(target_pointer_width = "64")]
WSCEnumNameSpaceProviders32( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOW, ) -> INT668     pub fn WSCEnumNameSpaceProviders32(
669         lpdwBufferLength: LPDWORD,
670         lpnspBuffer: LPWSANAMESPACE_INFOW,
671     ) -> INT;
672     #[cfg(target_pointer_width = "64")]
WSCEnumNameSpaceProvidersEx32( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOEXW, ) -> INT673     pub fn WSCEnumNameSpaceProvidersEx32(
674         lpdwBufferLength: LPDWORD,
675         lpnspBuffer: LPWSANAMESPACE_INFOEXW,
676     ) -> INT;
WSCInstallNameSpace( lpszIdentifier: LPWSTR, lpszPathName: LPWSTR, dwNameSpace: DWORD, dwVersion: DWORD, lpProviderId: LPGUID, ) -> INT677     pub fn WSCInstallNameSpace(
678         lpszIdentifier: LPWSTR,
679         lpszPathName: LPWSTR,
680         dwNameSpace: DWORD,
681         dwVersion: DWORD,
682         lpProviderId: LPGUID,
683     ) -> INT;
684 }
685 FN!{stdcall LPWSCINSTALLNAMESPACE(
686     lpszIdentifier: LPWSTR,
687     lpszPathName: LPWSTR,
688     dwNameSpace: DWORD,
689     dwVersion: DWORD,
690     lpProviderId: LPGUID,
691 ) -> INT}
692 extern "system" {
693     #[cfg(target_pointer_width = "64")]
WSCInstallNameSpace32( lpszIdentifier: LPWSTR, lpszPathName: LPWSTR, dwNameSpace: DWORD, dwVersion: DWORD, lpProviderId: LPGUID, ) -> INT694     pub fn WSCInstallNameSpace32(
695         lpszIdentifier: LPWSTR,
696         lpszPathName: LPWSTR,
697         dwNameSpace: DWORD,
698         dwVersion: DWORD,
699         lpProviderId: LPGUID,
700     ) -> INT;
WSCUnInstallNameSpace( lpProviderId: LPGUID, ) -> INT701     pub fn WSCUnInstallNameSpace(
702         lpProviderId: LPGUID,
703     ) -> INT;
704 }
705 FN!{stdcall LPWSCUNINSTALLNAMESPACE(
706     lpProviderId: LPGUID,
707 ) -> INT}
708 extern "system" {
WSCInstallNameSpaceEx( lpszIdentifier: LPWSTR, lpszPathName: LPWSTR, dwNameSpace: DWORD, dwVersion: DWORD, lpProviderId: LPGUID, lpProviderSpecific: LPBLOB, ) -> INT709     pub fn WSCInstallNameSpaceEx(
710         lpszIdentifier: LPWSTR,
711         lpszPathName: LPWSTR,
712         dwNameSpace: DWORD,
713         dwVersion: DWORD,
714         lpProviderId: LPGUID,
715         lpProviderSpecific: LPBLOB,
716     ) -> INT;
717     #[cfg(target_pointer_width = "64")]
WSCInstallNameSpaceEx32( lpszIdentifier: LPWSTR, lpszPathName: LPWSTR, dwNameSpace: DWORD, dwVersion: DWORD, lpProviderId: LPGUID, lpProviderSpecific: LPBLOB, ) -> INT718     pub fn WSCInstallNameSpaceEx32(
719         lpszIdentifier: LPWSTR,
720         lpszPathName: LPWSTR,
721         dwNameSpace: DWORD,
722         dwVersion: DWORD,
723         lpProviderId: LPGUID,
724         lpProviderSpecific: LPBLOB,
725     ) -> INT;
726     #[cfg(target_pointer_width = "64")]
WSCUnInstallNameSpace32( lpProviderId: LPGUID, ) -> INT727     pub fn WSCUnInstallNameSpace32(
728         lpProviderId: LPGUID,
729     ) -> INT;
WSCEnableNSProvider( lpProviderId: LPGUID, fEnable: BOOL, ) -> INT730     pub fn WSCEnableNSProvider(
731         lpProviderId: LPGUID,
732         fEnable: BOOL,
733     ) -> INT;
734 }
735 FN!{stdcall LPWSCENABLENSPROVIDER(
736     lpProviderId: LPGUID,
737     fEnable: BOOL,
738 ) -> INT}
739 extern "system" {
740     #[cfg(target_pointer_width = "64")]
WSCEnableNSProvider32( lpProviderId: LPGUID, fEnable: BOOL, ) -> INT741     pub fn WSCEnableNSProvider32(
742         lpProviderId: LPGUID,
743         fEnable: BOOL,
744     ) -> INT;
745     #[cfg(target_pointer_width = "64")]
WSCInstallProviderAndChains64_32( lpProviderId: LPGUID, lpszProviderDllPath: LPWSTR, lpszProviderDllPath32: LPWSTR, lpszLspName: LPWSTR, dwServiceFlags: DWORD, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpdwCatalogEntryId: LPDWORD, lpErrno: LPINT, ) -> c_int746     pub fn WSCInstallProviderAndChains64_32(
747         lpProviderId: LPGUID,
748         lpszProviderDllPath: LPWSTR,
749         lpszProviderDllPath32: LPWSTR,
750         lpszLspName: LPWSTR,
751         dwServiceFlags: DWORD,
752         lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
753         dwNumberOfEntries: DWORD,
754         lpdwCatalogEntryId: LPDWORD,
755         lpErrno: LPINT,
756     ) -> c_int;
757     #[cfg(target_pointer_width = "32")]
WSCInstallProviderAndChains( lpProviderId: LPGUID, lpszProviderDllPath: LPWSTR, lpszLspName: LPWSTR, dwServiceFlags: DWORD, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpdwCatalogEntryId: LPDWORD, lpErrno: LPINT, ) -> c_int758     pub fn WSCInstallProviderAndChains(
759         lpProviderId: LPGUID,
760         lpszProviderDllPath: LPWSTR,
761         lpszLspName: LPWSTR,
762         dwServiceFlags: DWORD,
763         lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
764         dwNumberOfEntries: DWORD,
765         lpdwCatalogEntryId: LPDWORD,
766         lpErrno: LPINT,
767     ) -> c_int;
768 }
769 FN!{stdcall LPNSPCLEANUP(
770     lpProviderId: LPGUID,
771 ) -> INT}
772 FN!{stdcall LPNSPLOOKUPSERVICEBEGIN(
773     lpProviderId: LPGUID,
774     lpqsRestrictions: LPWSAQUERYSETW,
775     lpServiceClassInfo: LPWSASERVICECLASSINFOW,
776     dwControlFlags: DWORD,
777     lphLookup: LPHANDLE,
778 ) -> INT}
779 FN!{stdcall LPNSPLOOKUPSERVICENEXT(
780     hLookup: HANDLE,
781     dwControlFlags: DWORD,
782     lpdwBufferLength: LPDWORD,
783     lpqsResults: LPWSAQUERYSETW,
784 ) -> INT}
785 FN!{stdcall LPNSPIOCTL(
786     hLookup: HANDLE,
787     dwControlCode: DWORD,
788     lpvInBuffer: LPVOID,
789     cbInBuffer: DWORD,
790     lpvOutBuffer: LPVOID,
791     cbOutBuffer: DWORD,
792     lpcbBytesReturned: LPDWORD,
793     lpCompletion: LPWSACOMPLETION,
794     lpThreadId: LPWSATHREADID,
795 ) -> INT}
796 FN!{stdcall LPNSPLOOKUPSERVICEEND(
797     hLookup: HANDLE,
798 ) -> INT}
799 FN!{stdcall LPNSPSETSERVICE(
800     lpProviderId: LPGUID,
801     lpServiceClassInfo: LPWSASERVICECLASSINFOW,
802     lpqsRegInfo: LPWSAQUERYSETW,
803     essOperation: WSAESETSERVICEOP,
804     dwControlFlags: DWORD,
805 ) -> INT}
806 FN!{stdcall LPNSPINSTALLSERVICECLASS(
807     lpProviderId: LPGUID,
808     lpServiceClassInfo: LPWSASERVICECLASSINFOW,
809 ) -> INT}
810 FN!{stdcall LPNSPREMOVESERVICECLASS(
811     lpProviderId: LPGUID,
812     lpServiceClassId: LPGUID,
813 ) -> INT}
814 FN!{stdcall LPNSPGETSERVICECLASSINFO(
815     lpProviderId: LPGUID,
816     lpdwBufSize: LPDWORD,
817     lpServiceClassInfo: LPWSASERVICECLASSINFOW,
818 ) -> INT}
819 STRUCT!{struct NSP_ROUTINE {
820     cbSize: DWORD,
821     dwMajorVersion: DWORD,
822     dwMinorVersion: DWORD,
823     NSPCleanup: LPNSPCLEANUP,
824     NSPLookupServiceBegin: LPNSPLOOKUPSERVICEBEGIN,
825     NSPLookupServiceNext: LPNSPLOOKUPSERVICENEXT,
826     NSPLookupServiceEnd: LPNSPLOOKUPSERVICEEND,
827     NSPSetService: LPNSPSETSERVICE,
828     NSPInstallServiceClass: LPNSPINSTALLSERVICECLASS,
829     NSPRemoveServiceClass: LPNSPREMOVESERVICECLASS,
830     NSPGetServiceClassInfo: LPNSPGETSERVICECLASSINFO,
831     NSPIoctl: LPNSPIOCTL,
832 }}
833 pub type LPNSP_ROUTINE = *mut NSP_ROUTINE;
834 extern "system" {
NSPStartup( lpProviderId: LPGUID, lpnspRoutines: LPNSP_ROUTINE, ) -> INT835     pub fn NSPStartup(
836         lpProviderId: LPGUID,
837         lpnspRoutines: LPNSP_ROUTINE,
838     ) -> INT;
839 }
840 FN!{stdcall LPNSPSTARTUP(
841     lpProviderId: LPGUID,
842     lpnspRoutines: LPNSP_ROUTINE,
843 ) -> INT}
844 FN!{stdcall LPNSPV2STARTUP(
845     lpProviderId: LPGUID,
846     ppvClientSessionArg: *mut LPVOID,
847 ) -> INT}
848 FN!{stdcall LPNSPV2CLEANUP(
849     lpProviderId: LPGUID,
850     pvClientSessionArg: LPVOID,
851 ) -> INT}
852 FN!{stdcall LPNSPV2LOOKUPSERVICEBEGIN(
853     lpProviderId: LPGUID,
854     lpqsRestrictions: LPWSAQUERYSET2W,
855     dwControlFlags: DWORD,
856     lpvClientSessionArg: LPVOID,
857     lphLookup: LPHANDLE,
858 ) -> INT}
859 FN!{stdcall LPNSPV2LOOKUPSERVICENEXTEX(
860     hAsyncCall: HANDLE,
861     hLookup: HANDLE,
862     dwControlFlags: DWORD,
863     lpdwBufferLength: LPDWORD,
864     lpqsResults: LPWSAQUERYSET2W,
865 ) -> ()}
866 FN!{stdcall LPNSPV2LOOKUPSERVICEEND(
867     hLookup: HANDLE,
868 ) -> INT}
869 FN!{stdcall LPNSPV2SETSERVICEEX(
870     hAsyncCall: HANDLE,
871     lpProviderId: LPGUID,
872     lpqsRegInfo: LPWSAQUERYSET2W,
873     essOperation: WSAESETSERVICEOP,
874     dwControlFlags: DWORD,
875     lpvClientSessionArg: LPVOID,
876 ) -> ()}
877 FN!{stdcall LPNSPV2CLIENTSESSIONRUNDOWN(
878     lpProviderId: LPGUID,
879     pvClientSessionArg: LPVOID,
880 ) -> ()}
881 STRUCT!{struct NSPV2_ROUTINE {
882     cbSize: DWORD,
883     dwMajorVersion: DWORD,
884     dwMinorVersion: DWORD,
885     NSPv2Startup: LPNSPV2STARTUP,
886     NSPv2Cleanup: LPNSPV2CLEANUP,
887     NSPv2LookupServiceBegin: LPNSPV2LOOKUPSERVICEBEGIN,
888     NSPv2LookupServiceNextEx: LPNSPV2LOOKUPSERVICENEXTEX,
889     NSPv2LookupServiceEnd: LPNSPV2LOOKUPSERVICEEND,
890     NSPv2SetServiceEx: LPNSPV2SETSERVICEEX,
891     NSPv2ClientSessionRundown: LPNSPV2CLIENTSESSIONRUNDOWN,
892 }}
893 pub type PNSPV2_ROUTINE = *mut NSPV2_ROUTINE;
894 pub type LPNSPV2_ROUTINE = *mut NSPV2_ROUTINE;
895 pub type PCNSPV2_ROUTINE = *const NSPV2_ROUTINE;
896 pub type LPCNSPV2_ROUTINE = *const NSPV2_ROUTINE;
897 extern "system" {
WSAAdvertiseProvider( puuidProviderId: *const GUID, pNSPv2Routine: *const LPCNSPV2_ROUTINE, ) -> INT898     pub fn WSAAdvertiseProvider(
899         puuidProviderId: *const GUID,
900         pNSPv2Routine: *const LPCNSPV2_ROUTINE,
901     ) -> INT;
WSAUnadvertiseProvider( puuidProviderId: *const GUID, ) -> INT902     pub fn WSAUnadvertiseProvider(
903         puuidProviderId: *const GUID,
904     ) -> INT;
WSAProviderCompleteAsyncCall( hAsyncCall: HANDLE, iRetCode: INT, ) -> INT905     pub fn WSAProviderCompleteAsyncCall(
906         hAsyncCall: HANDLE,
907         iRetCode: INT,
908     ) -> INT;
909 }
910