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