1use ctypes::{c_char, c_int, c_long, c_uint};
8use shared::basetsd::{DWORD_PTR, PDWORD_PTR, ULONG_PTR};
9use shared::guiddef::{GUID, LPGUID};
10use shared::minwindef::{
11 BOOL, DWORD, INT, LPARAM, LPDWORD, LPHANDLE, LPINT, LPVOID, PBYTE, UINT, WORD, WPARAM,
12};
13use shared::windef::HWND;
14use shared::ws2def::{LPSOCKADDR, LPWSABUF, SOCKADDR};
15use shared::wtypesbase::LPBLOB;
16use um::winnt::{HANDLE, LPCWSTR, LPWSTR, PVOID, WCHAR};
17use 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")]
23use um::winsock2::{LPWSANAMESPACE_INFOEXW, LPWSANAMESPACE_INFOW};
24use vc::vcruntime::size_t;
25pub const WSPDESCRIPTION_LEN: usize = 255;
26pub const WSS_OPERATION_IN_PROGRESS: ULONG_PTR = 0x00000103;
27STRUCT!{struct WSPDATA {
28 wVersion: WORD,
29 wHighVersion: WORD,
30 szDescription: [WCHAR; WSPDESCRIPTION_LEN + 1],
31}}
32pub type LPWSPDATA = *mut WSPDATA;
33STRUCT!{struct WSATHREADID {
34 ThreadHandle: HANDLE,
35 Reserved: DWORD_PTR,
36}}
37pub type LPWSATHREADID = *mut WSATHREADID;
38FN!{stdcall LPBLOCKINGCALLBACK(
39 dwContext: DWORD_PTR,
40) -> BOOL}
41FN!{stdcall LPWSAUSERAPC(
42 dwContext: DWORD_PTR,
43) -> ()}
44FN!{stdcall LPWSPACCEPT(
45 s: SOCKET,
46 addr: *mut SOCKADDR,
47 addrlen: LPINT,
48 lpfnCondition: LPCONDITIONPROC,
49 dwCallbackData: DWORD_PTR,
50 lpErrno: LPINT,
51) -> SOCKET}
52FN!{stdcall LPWSPADDRESSTOSTRING(
53 lpsaAddress: LPSOCKADDR,
54 dwAddressLength: DWORD,
55 lpProtocolInfo: LPWSAPROTOCOL_INFOW,
56 lpszAddressString: LPWSTR,
57 lpdwAddressStringLength: LPDWORD,
58 lpErrno: LPINT,
59) -> INT}
60FN!{stdcall LPWSPASYNCSELECT(
61 s: SOCKET,
62 hWnd: HWND,
63 wMsg: c_uint,
64 lEvent: c_long,
65 lpErrno: LPINT,
66) -> c_int}
67FN!{stdcall LPWSPBIND(
68 s: SOCKET,
69 name: *mut SOCKADDR,
70 namelen: c_int,
71 lpErrno: LPINT,
72) -> c_int}
73FN!{stdcall LPWSPCANCELBLOCKINGCALL(
74 lpErrno: LPINT,
75) -> c_int}
76FN!{stdcall LPWSPCLEANUP(
77 lpErrno: LPINT,
78) -> c_int}
79FN!{stdcall LPWSPCLOSESOCKET(
80 s: SOCKET,
81 lpErrno: LPINT,
82) -> c_int}
83FN!{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}
93FN!{stdcall LPWSPDUPLICATESOCKET(
94 s: SOCKET,
95 dwProcessId: DWORD,
96 lpProtocolInfo: LPWSAPROTOCOL_INFOW,
97 lpErrno: LPINT,
98) -> c_int}
99FN!{stdcall LPWSPENUMNETWORKEVENTS(
100 s: SOCKET,
101 hEventObject: WSAEVENT,
102 lpNetworkEvents: LPWSANETWORKEVENTS,
103 lpErrno: LPINT,
104) -> c_int}
105FN!{stdcall LPWSPEVENTSELECT(
106 s: SOCKET,
107 hEventObject: WSAEVENT,
108 lNetworkEvents: c_long,
109 lpErrno: LPINT,
110) -> c_int}
111FN!{stdcall LPWSPGETOVERLAPPEDRESULT(
112 s: SOCKET,
113 lpOverlapped: LPWSAOVERLAPPED,
114 lpcbTransfer: LPDWORD,
115 fWait: BOOL,
116 lpdwFlags: LPDWORD,
117 lpErrno: LPINT,
118) -> BOOL}
119FN!{stdcall LPWSPGETPEERNAME(
120 s: SOCKET,
121 name: *mut SOCKADDR,
122 namelen: LPINT,
123 lpErrno: LPINT,
124) -> c_int}
125FN!{stdcall LPWSPGETSOCKNAME(
126 s: SOCKET,
127 name: *mut SOCKADDR,
128 namelen: LPINT,
129 lpErrno: LPINT,
130) -> c_int}
131FN!{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}
139FN!{stdcall LPWSPGETQOSBYNAME(
140 s: SOCKET,
141 lpQOSName: LPWSABUF,
142 lpQOS: LPQOS,
143 lpErrno: LPINT,
144) -> BOOL}
145FN!{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}
158FN!{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}
169FN!{stdcall LPWSPLISTEN(
170 s: SOCKET,
171 backlog: c_int,
172 lpErrno: LPINT,
173) -> c_int}
174FN!{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}
185FN!{stdcall LPWSPRECVDISCONNECT(
186 s: SOCKET,
187 lpInboundDisconnectData: LPWSABUF,
188 lpErrno: LPINT,
189) -> c_int}
190FN!{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}
203FN!{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}
211FN!{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}
222FN!{stdcall LPWSPSENDDISCONNECT(
223 s: SOCKET,
224 lpOutboundDisconnectData: LPWSABUF,
225 lpErrno: LPINT,
226) -> c_int}
227FN!{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}
240FN!{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}
248FN!{stdcall LPWSPSHUTDOWN(
249 s: SOCKET,
250 how: c_int,
251 lpErrno: LPINT,
252) -> c_int}
253FN!{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}
262FN!{stdcall LPWSPSTRINGTOADDRESS(
263 AddressString: LPWSTR,
264 AddressFamily: INT,
265 lpProtocolInfo: LPWSAPROTOCOL_INFOW,
266 lpAddress: LPSOCKADDR,
267 lpAddressLength: LPINT,
268 lpErrno: LPINT,
269) -> c_int}
270STRUCT!{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}}
302pub type LPWSPPROC_TABLE = *mut WSPPROC_TABLE;
303FN!{stdcall LPWPUCLOSEEVENT(
304 hEvent: WSAEVENT,
305 lpErrno: LPINT,
306) -> c_int}
307FN!{stdcall LPWPUCLOSESOCKETHANDLE(
308 s: SOCKET,
309 lpErrno: LPINT,
310) -> c_int}
311FN!{stdcall LPWPUCREATEEVENT(
312 lpErrno: LPINT,
313) -> WSAEVENT}
314FN!{stdcall LPWPUCREATESOCKETHANDLE(
315 dwCatalogEntryId: DWORD,
316 dwContext: DWORD_PTR,
317 lpErrno: LPINT,
318) -> SOCKET}
319FN!{stdcall LPWPUFDISSET(
320 s: SOCKET,
321 fdset: *mut fd_set,
322) -> c_int}
323FN!{stdcall LPWPUGETPROVIDERPATH(
324 lpProviderId: LPGUID,
325 lpszProviderDllPath: *mut WCHAR,
326 lpProviderDllPathLen: LPINT,
327 lpErrno: LPINT,
328) -> c_int}
329FN!{stdcall LPWPUMODIFYIFSHANDLE(
330 dwCatalogEntryId: DWORD,
331 ProposedHandle: SOCKET,
332 lpErrno: LPINT,
333) -> SOCKET}
334FN!{stdcall LPWPUPOSTMESSAGE(
335 hWnd: HWND,
336 Msg: UINT,
337 wParam: WPARAM,
338 lParam: LPARAM,
339) -> BOOL}
340FN!{stdcall LPWPUQUERYBLOCKINGCALLBACK(
341 dwCatalogEntryId: DWORD,
342 lplpfnCallback: *mut LPBLOCKINGCALLBACK,
343 lpdwContext: PDWORD_PTR,
344 lpErrno: LPINT,
345) -> c_int}
346FN!{stdcall LPWPUQUERYSOCKETHANDLECONTEXT(
347 s: SOCKET,
348 lpContext: PDWORD_PTR,
349 lpErrno: LPINT,
350) -> c_int}
351FN!{stdcall LPWPUQUEUEAPC(
352 lpThreadId: LPWSATHREADID,
353 lpfnUserApc: LPWSAUSERAPC,
354 dwContext: DWORD_PTR,
355 lpErrno: LPINT,
356) -> c_int}
357FN!{stdcall LPWPURESETEVENT(
358 hEvent: WSAEVENT,
359 lpErrno: LPINT,
360) -> BOOL}
361FN!{stdcall LPWPUSETEVENT(
362 hEvent: WSAEVENT,
363 lpErrno: LPINT,
364) -> BOOL}
365FN!{stdcall LPWPUOPENCURRENTTHREAD(
366 lpThreadId: LPWSATHREADID,
367 lpErrno: LPINT,
368) -> c_int}
369FN!{stdcall LPWPUCLOSETHREAD(
370 lpThreadId: LPWSATHREADID,
371 lpErrno: LPINT,
372) -> c_int}
373FN!{stdcall LPWPUCOMPLETEOVERLAPPEDREQUEST(
374 s: SOCKET,
375 lpOverlapped: LPWSAOVERLAPPED,
376 dwError: DWORD,
377 cbTransferred: DWORD,
378 lpErrno: LPINT,
379) -> c_int}
380STRUCT!{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}}
397pub type LPWSPUPCALLTABLE = *mut WSPUPCALLTABLE;
398extern "system" {
399 pub fn WSPStartup(
400 wVersionRequested: WORD,
401 lpWSPData: LPWSPDATA,
402 lpProtocolInfo: LPWSAPROTOCOL_INFOW,
403 UpcallTable: WSPUPCALLTABLE,
404 lpProcTable: LPWSPPROC_TABLE,
405 ) -> c_int;
406}
407FN!{stdcall LPWSPSTARTUP(
408 wVersionRequested: WORD,
409 lpWSPData: LPWSPDATA,
410 lpProtocolInfo: LPWSAPROTOCOL_INFOW,
411 UpcallTable: WSPUPCALLTABLE,
412 lpProcTable: LPWSPPROC_TABLE,
413) -> c_int}
414extern "system" {
415 pub fn WSCEnumProtocols(
416 lpiProtocols: LPINT,
417 lpProtocolBuffer: LPWSAPROTOCOL_INFOW,
418 lpdwBufferLength: LPDWORD,
419 lpErrno: LPINT,
420 ) -> c_int;
421}
422FN!{stdcall LPWSCENUMPROTOCOLS(
423 lpiProtocols: LPINT,
424 lpProtocolBuffer: LPWSAPROTOCOL_INFOW,
425 lpdwBufferLength: LPDWORD,
426 lpErrno: LPINT,
427) -> c_int}
428extern "system" {
429 #[cfg(target_pointer_width = "64")]
430 pub fn WSCEnumProtocols32(
431 lpiProtocols: LPINT,
432 lpProtocolBuffer: LPWSAPROTOCOL_INFOW,
433 lpdwBufferLength: LPDWORD,
434 lpErrno: LPINT,
435 ) -> c_int;
436 pub fn WSCDeinstallProvider(
437 lpProviderId: LPGUID,
438 lpErrno: LPINT,
439 ) -> c_int;
440}
441FN!{stdcall LPWSCDEINSTALLPROVIDER(
442 lpProviderId: LPGUID,
443 lpErrno: LPINT,
444) -> c_int}
445extern "system" {
446 #[cfg(target_pointer_width = "64")]
447 pub fn WSCDeinstallProvider32(
448 lpProviderId: LPGUID,
449 lpErrno: LPINT,
450 ) -> c_int;
451 pub fn WSCInstallProvider(
452 lpProviderId: LPGUID,
453 lpszProviderDllPath: *const WCHAR,
454 lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
455 dwNumberOfEntries: DWORD,
456 lpErrno: LPINT,
457 ) -> c_int;
458}
459FN!{stdcall LPWSCINSTALLPROVIDER(
460 lpProviderId: LPGUID,
461 lpszProviderDllPath: *const WCHAR,
462 lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
463 dwNumberOfEntries: DWORD,
464 lpErrno: LPINT,
465) -> c_int}
466extern "system" {
467 #[cfg(target_pointer_width = "64")]
468 pub fn WSCInstallProvider64_32(
469 lpProviderId: LPGUID,
470 lpszProviderDllPath: *const WCHAR,
471 lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
472 dwNumberOfEntries: DWORD,
473 lpErrno: LPINT,
474 ) -> c_int;
475 pub fn WSCGetProviderPath(
476 lpProviderId: LPGUID,
477 lpszProviderDllPath: *mut WCHAR,
478 lpProviderDllPathLen: LPINT,
479 lpErrno: LPINT,
480 ) -> c_int;
481}
482FN!{stdcall LPWSCGETPROVIDERPATH(
483 lpProviderId: LPGUID,
484 lpszProviderDllPath: *mut WCHAR,
485 lpProviderDllPathLen: LPINT,
486 lpErrno: LPINT,
487) -> c_int}
488extern "system" {
489 #[cfg(target_pointer_width = "64")]
490 pub fn WSCGetProviderPath32(
491 lpProviderId: LPGUID,
492 lpszProviderDllPath: *mut WCHAR,
493 lpProviderDllPathLen: LPINT,
494 lpErrno: LPINT,
495 ) -> c_int;
496 pub fn WSCUpdateProvider(
497 lpProviderId: LPGUID,
498 lpszProviderDllPath: *const WCHAR,
499 lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
500 dwNumberOfEntries: DWORD,
501 lpErrno: LPINT,
502 ) -> c_int;
503}
504FN!{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")]
512extern "system" {
513 pub fn WSCUpdateProvider32(
514 lpProviderId: LPGUID,
515 lpszProviderDllPath: *const WCHAR,
516 lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
517 dwNumberOfEntries: DWORD,
518 lpErrno: LPINT,
519 ) -> c_int;
520}
521pub const LSP_SYSTEM: DWORD = 0x80000000;
522pub const LSP_INSPECTOR: DWORD = 0x00000001;
523pub const LSP_REDIRECTOR: DWORD = 0x00000002;
524pub const LSP_PROXY: DWORD = 0x00000004;
525pub const LSP_FIREWALL: DWORD = 0x00000008;
526pub const LSP_INBOUND_MODIFY: DWORD = 0x00000010;
527pub const LSP_OUTBOUND_MODIFY: DWORD = 0x00000020;
528pub const LSP_CRYPTO_COMPRESS: DWORD = 0x00000040;
529pub const LSP_LOCAL_CACHE: DWORD = 0x00000080;
530ENUM!{enum WSC_PROVIDER_INFO_TYPE {
531 ProviderInfoLspCategories,
532 ProviderInfoAudit,
533}}
534STRUCT!{struct WSC_PROVIDER_AUDIT_INFO {
535 RecordSize: DWORD,
536 Reserved: PVOID,
537}}
538extern "system" {
539 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;
547 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")]
556 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")]
565 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;
573 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;
582 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;
590 pub fn WPUCloseEvent(
591 hEvent: WSAEVENT,
592 lpErrno: LPINT,
593 ) -> BOOL;
594 pub fn WPUCloseSocketHandle(
595 s: SOCKET,
596 lpErrno: LPINT,
597 ) -> c_int;
598 pub fn WPUCreateEvent(
599 lpErrno: LPINT,
600 ) -> WSAEVENT;
601 pub fn WPUCreateSocketHandle(
602 dwCatalogEntryId: DWORD,
603 dwContext: DWORD_PTR,
604 lpErrno: LPINT,
605 ) -> SOCKET;
606 pub fn WPUFDIsSet(
607 s: SOCKET,
608 fdset: *mut fd_set,
609 ) -> c_int;
610 pub fn WPUGetProviderPath(
611 lpProviderId: LPGUID,
612 lpszProviderDllPath: *mut WCHAR,
613 lpProviderDllPathLen: LPINT,
614 lpErrno: LPINT,
615 ) -> c_int;
616 pub fn WPUModifyIFSHandle(
617 dwCatalogEntryId: DWORD,
618 ProposedHandle: SOCKET,
619 lpErrno: LPINT,
620 ) -> SOCKET;
621 pub fn WPUPostMessage(
622 hWnd: HWND,
623 Msg: UINT,
624 wParam: WPARAM,
625 lParam: LPARAM,
626 ) -> BOOL;
627 pub fn WPUQueryBlockingCallback(
628 dwCatalogEntryId: DWORD,
629 lplpfnCallback: *mut LPBLOCKINGCALLBACK,
630 lpdwContext: PDWORD_PTR,
631 lpErrno: LPINT,
632 ) -> c_int;
633 pub fn WPUQuerySocketHandleContext(
634 s: SOCKET,
635 lpContext: PDWORD_PTR,
636 lpErrno: LPINT,
637 ) -> c_int;
638 pub fn WPUQueueApc(
639 lpThreadId: LPWSATHREADID,
640 lpfnUserApc: LPWSAUSERAPC,
641 dwContext: DWORD_PTR,
642 lpErrno: LPINT,
643 ) -> c_int;
644 pub fn WPUResetEvent(
645 hEvent: WSAEVENT,
646 lpErrno: LPINT,
647 ) -> BOOL;
648 pub fn WPUSetEvent(
649 hEvent: WSAEVENT,
650 lpErrno: LPINT,
651 ) -> BOOL;
652 pub fn WPUCompleteOverlappedRequest(
653 s: SOCKET,
654 lpOverlapped: LPWSAOVERLAPPED,
655 dwError: DWORD,
656 cbTransferred: DWORD,
657 lpErrno: LPINT,
658 ) -> c_int;
659 pub fn WPUOpenCurrentThread(
660 lpThreadId: LPWSATHREADID,
661 lpErrno: LPINT,
662 ) -> c_int;
663 pub fn WPUCloseThread(
664 lpThreadId: LPWSATHREADID,
665 lpErrno: LPINT,
666 ) -> c_int;
667 #[cfg(target_pointer_width = "64")]
668 pub fn WSCEnumNameSpaceProviders32(
669 lpdwBufferLength: LPDWORD,
670 lpnspBuffer: LPWSANAMESPACE_INFOW,
671 ) -> INT;
672 #[cfg(target_pointer_width = "64")]
673 pub fn WSCEnumNameSpaceProvidersEx32(
674 lpdwBufferLength: LPDWORD,
675 lpnspBuffer: LPWSANAMESPACE_INFOEXW,
676 ) -> INT;
677 pub fn WSCInstallNameSpace(
678 lpszIdentifier: LPWSTR,
679 lpszPathName: LPWSTR,
680 dwNameSpace: DWORD,
681 dwVersion: DWORD,
682 lpProviderId: LPGUID,
683 ) -> INT;
684}
685FN!{stdcall LPWSCINSTALLNAMESPACE(
686 lpszIdentifier: LPWSTR,
687 lpszPathName: LPWSTR,
688 dwNameSpace: DWORD,
689 dwVersion: DWORD,
690 lpProviderId: LPGUID,
691) -> INT}
692extern "system" {
693 #[cfg(target_pointer_width = "64")]
694 pub fn WSCInstallNameSpace32(
695 lpszIdentifier: LPWSTR,
696 lpszPathName: LPWSTR,
697 dwNameSpace: DWORD,
698 dwVersion: DWORD,
699 lpProviderId: LPGUID,
700 ) -> INT;
701 pub fn WSCUnInstallNameSpace(
702 lpProviderId: LPGUID,
703 ) -> INT;
704}
705FN!{stdcall LPWSCUNINSTALLNAMESPACE(
706 lpProviderId: LPGUID,
707) -> INT}
708extern "system" {
709 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")]
718 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")]
727 pub fn WSCUnInstallNameSpace32(
728 lpProviderId: LPGUID,
729 ) -> INT;
730 pub fn WSCEnableNSProvider(
731 lpProviderId: LPGUID,
732 fEnable: BOOL,
733 ) -> INT;
734}
735FN!{stdcall LPWSCENABLENSPROVIDER(
736 lpProviderId: LPGUID,
737 fEnable: BOOL,
738) -> INT}
739extern "system" {
740 #[cfg(target_pointer_width = "64")]
741 pub fn WSCEnableNSProvider32(
742 lpProviderId: LPGUID,
743 fEnable: BOOL,
744 ) -> INT;
745 #[cfg(target_pointer_width = "64")]
746 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")]
758 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}
769FN!{stdcall LPNSPCLEANUP(
770 lpProviderId: LPGUID,
771) -> INT}
772FN!{stdcall LPNSPLOOKUPSERVICEBEGIN(
773 lpProviderId: LPGUID,
774 lpqsRestrictions: LPWSAQUERYSETW,
775 lpServiceClassInfo: LPWSASERVICECLASSINFOW,
776 dwControlFlags: DWORD,
777 lphLookup: LPHANDLE,
778) -> INT}
779FN!{stdcall LPNSPLOOKUPSERVICENEXT(
780 hLookup: HANDLE,
781 dwControlFlags: DWORD,
782 lpdwBufferLength: LPDWORD,
783 lpqsResults: LPWSAQUERYSETW,
784) -> INT}
785FN!{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}
796FN!{stdcall LPNSPLOOKUPSERVICEEND(
797 hLookup: HANDLE,
798) -> INT}
799FN!{stdcall LPNSPSETSERVICE(
800 lpProviderId: LPGUID,
801 lpServiceClassInfo: LPWSASERVICECLASSINFOW,
802 lpqsRegInfo: LPWSAQUERYSETW,
803 essOperation: WSAESETSERVICEOP,
804 dwControlFlags: DWORD,
805) -> INT}
806FN!{stdcall LPNSPINSTALLSERVICECLASS(
807 lpProviderId: LPGUID,
808 lpServiceClassInfo: LPWSASERVICECLASSINFOW,
809) -> INT}
810FN!{stdcall LPNSPREMOVESERVICECLASS(
811 lpProviderId: LPGUID,
812 lpServiceClassId: LPGUID,
813) -> INT}
814FN!{stdcall LPNSPGETSERVICECLASSINFO(
815 lpProviderId: LPGUID,
816 lpdwBufSize: LPDWORD,
817 lpServiceClassInfo: LPWSASERVICECLASSINFOW,
818) -> INT}
819STRUCT!{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}}
833pub type LPNSP_ROUTINE = *mut NSP_ROUTINE;
834extern "system" {
835 pub fn NSPStartup(
836 lpProviderId: LPGUID,
837 lpnspRoutines: LPNSP_ROUTINE,
838 ) -> INT;
839}
840FN!{stdcall LPNSPSTARTUP(
841 lpProviderId: LPGUID,
842 lpnspRoutines: LPNSP_ROUTINE,
843) -> INT}
844FN!{stdcall LPNSPV2STARTUP(
845 lpProviderId: LPGUID,
846 ppvClientSessionArg: *mut LPVOID,
847) -> INT}
848FN!{stdcall LPNSPV2CLEANUP(
849 lpProviderId: LPGUID,
850 pvClientSessionArg: LPVOID,
851) -> INT}
852FN!{stdcall LPNSPV2LOOKUPSERVICEBEGIN(
853 lpProviderId: LPGUID,
854 lpqsRestrictions: LPWSAQUERYSET2W,
855 dwControlFlags: DWORD,
856 lpvClientSessionArg: LPVOID,
857 lphLookup: LPHANDLE,
858) -> INT}
859FN!{stdcall LPNSPV2LOOKUPSERVICENEXTEX(
860 hAsyncCall: HANDLE,
861 hLookup: HANDLE,
862 dwControlFlags: DWORD,
863 lpdwBufferLength: LPDWORD,
864 lpqsResults: LPWSAQUERYSET2W,
865) -> ()}
866FN!{stdcall LPNSPV2LOOKUPSERVICEEND(
867 hLookup: HANDLE,
868) -> INT}
869FN!{stdcall LPNSPV2SETSERVICEEX(
870 hAsyncCall: HANDLE,
871 lpProviderId: LPGUID,
872 lpqsRegInfo: LPWSAQUERYSET2W,
873 essOperation: WSAESETSERVICEOP,
874 dwControlFlags: DWORD,
875 lpvClientSessionArg: LPVOID,
876) -> ()}
877FN!{stdcall LPNSPV2CLIENTSESSIONRUNDOWN(
878 lpProviderId: LPGUID,
879 pvClientSessionArg: LPVOID,
880) -> ()}
881STRUCT!{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}}
893pub type PNSPV2_ROUTINE = *mut NSPV2_ROUTINE;
894pub type LPNSPV2_ROUTINE = *mut NSPV2_ROUTINE;
895pub type PCNSPV2_ROUTINE = *const NSPV2_ROUTINE;
896pub type LPCNSPV2_ROUTINE = *const NSPV2_ROUTINE;
897extern "system" {
898 pub fn WSAAdvertiseProvider(
899 puuidProviderId: *const GUID,
900 pNSPv2Routine: *const LPCNSPV2_ROUTINE,
901 ) -> INT;
902 pub fn WSAUnadvertiseProvider(
903 puuidProviderId: *const GUID,
904 ) -> INT;
905 pub fn WSAProviderCompleteAsyncCall(
906 hAsyncCall: HANDLE,
907 iRetCode: INT,
908 ) -> INT;
909}