Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenwsk.h
Go to the documentation of this file.
00001 /* 00002 * wsk.h 00003 * 00004 * Windows Sockets Kernel-Mode Interface 00005 * 00006 * This file is part of the ReactOS DDK package. 00007 * 00008 * Contributors: 00009 * Timo Kreuzer (timo.kreuzer@reactos.org) 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 #pragma once 00023 #define _WSK_ 00024 00025 #ifdef __cplusplus 00026 extern "C" { 00027 #endif 00028 00029 #include <netioddk.h> 00030 #include <ws2def.h> 00031 #include <mswsockdef.h> 00032 00033 extern CONST NPIID NPI_WSK_INTERFACE_ID; 00034 00035 #define WSKAPI NTAPI 00036 00037 #define MAKE_WSK_VERSION(Mj, Mn) ((USHORT)((Mj) << 8) | (USHORT)((Mn) & 0xff)) 00038 #define WSK_MAJOR_VERSION(V) ((UCHAR)((V) >> 8)) 00039 #define WSK_MINOR_VERSION(V) ((UCHAR)(V)) 00040 #define WSK_FLAG_AT_DISPATCH_LEVEL 0x00000008 00041 #define WSK_FLAG_RELEASE_ASAP 0x00000002 00042 #define WSK_FLAG_ENTIRE_MESSAGE 0x00000004 00043 #define WSK_FLAG_ABORTIVE 0x00000001 00044 #define WSK_FLAG_BASIC_SOCKET 0x00000000 00045 #define WSK_FLAG_LISTEN_SOCKET 0x00000001 00046 #define WSK_FLAG_CONNECTION_SOCKET 0x00000002 00047 #define WSK_FLAG_DATAGRAM_SOCKET 0x00000004 00048 #define WSK_TRANSPORT_LIST_QUERY 2 00049 #define WSK_TRANSPORT_LIST_CHANGE 3 00050 #define WSK_CACHE_SD 4 00051 #define WSK_RELEASE_SD 5 00052 #define WSK_TDI_DEVICENAME_MAPPING 6 00053 #define WSK_SET_STATIC_EVENT_CALLBACKS 7 00054 #define WSK_TDI_BEHAVIOR 8 00055 #define WSK_TDI_BEHAVIOR_BYPASS_TDI 0x00000001 00056 #define SO_WSK_SECURITY (WSK_SO_BASE+1) 00057 #define SO_WSK_EVENT_CALLBACK (WSK_SO_BASE+2) 00058 #define WSK_EVENT_RECEIVE_FROM 0x00000100 00059 #define WSK_EVENT_ACCEPT 0x00000200 00060 #define WSK_EVENT_SEND_BACKLOG 0x00000010 00061 #define WSK_EVENT_RECEIVE 0x00000040 00062 #define WSK_EVENT_DISCONNECT 0x00000080 00063 #define WSK_EVENT_DISABLE 0x80000000 00064 #define SIO_WSK_SET_REMOTE_ADDRESS _WSAIOW(IOC_WSK,0x1) 00065 #define SIO_WSK_REGISTER_EXTENSION _WSAIORW(IOC_WSK,0x2) 00066 #define SIO_WSK_QUERY_IDEAL_SEND_BACKLOG _WSAIOR(IOC_WSK,0x3) 00067 #define SIO_WSK_QUERY_RECEIVE_BACKLOG _WSAIOR(IOC_WSK,0x4) 00068 #define SIO_WSK_QUERY_INSPECT_ID _WSAIOR(IOC_WSK,0x5) 00069 #define SIO_WSK_SET_SENDTO_ADDRESS _WSAIOW(IOC_WSK,0x6) 00070 #define WSK_FLAG_NODELAY 0x00000002 00071 #define WSK_FLAG_WAITALL 0x00000002 00072 #define WSK_FLAG_DRAIN 0x00000004 00073 #define WSK_NO_WAIT 0 00074 #define WSK_INFINITE_WAIT 0xffffffff 00075 00076 typedef enum 00077 { 00078 WskInspectReject, 00079 WskInspectAccept, 00080 WskInspectPend, 00081 WskInspectMax 00082 } WSK_INSPECT_ACTION, *PWSK_INSPECT_ACTION; 00083 00084 typedef enum 00085 { 00086 WskSetOption, 00087 WskGetOption, 00088 WskIoctl, 00089 WskControlMax 00090 } WSK_CONTROL_SOCKET_TYPE, *PWSK_CONTROL_SOCKET_TYPE; 00091 00092 typedef PVOID PWSK_CLIENT; 00093 00094 typedef struct _WSK_SOCKET 00095 { 00096 const VOID *Dispatch; 00097 } WSK_SOCKET, *PWSK_SOCKET; 00098 00099 typedef struct _WSK_BUF 00100 { 00101 PMDL Mdl; 00102 ULONG Offset; 00103 SIZE_T Length; 00104 } WSK_BUF, *PWSK_BUF; 00105 00106 typedef struct _WSK_INSPECT_ID 00107 { 00108 ULONG_PTR Key; 00109 ULONG SerialNumber; 00110 } WSK_INSPECT_ID, *PWSK_INSPECT_ID; 00111 00112 typedef struct _WSK_DATAGRAM_INDICATION 00113 { 00114 struct _WSK_DATAGRAM_INDICATION *Next; 00115 WSK_BUF Buffer; 00116 _Field_size_bytes_(ControlInfoLength) PCMSGHDR ControlInfo; 00117 ULONG ControlInfoLength; 00118 PSOCKADDR RemoteAddress; 00119 } WSK_DATAGRAM_INDICATION, *PWSK_DATAGRAM_INDICATION; 00120 00121 typedef 00122 _Must_inspect_result_ 00123 NTSTATUS 00124 (WSKAPI * PFN_WSK_RECEIVE_FROM_EVENT)( 00125 _In_opt_ PVOID SocketContext, 00126 _In_ ULONG Flags, 00127 _In_opt_ PWSK_DATAGRAM_INDICATION DataIndication); 00128 00129 typedef struct _WSK_DATA_INDICATION 00130 { 00131 struct _WSK_DATA_INDICATION *Next; 00132 WSK_BUF Buffer; 00133 } WSK_DATA_INDICATION, *PWSK_DATA_INDICATION; 00134 00135 typedef 00136 _Must_inspect_result_ 00137 NTSTATUS 00138 (WSKAPI * PFN_WSK_RECEIVE_EVENT)( 00139 _In_opt_ PVOID SocketContext, 00140 _In_ ULONG Flags, 00141 _In_opt_ PWSK_DATA_INDICATION DataIndication, 00142 _In_ SIZE_T BytesIndicated, 00143 _Inout_ SIZE_T *BytesAccepted); 00144 00145 typedef 00146 NTSTATUS 00147 (WSKAPI * PFN_WSK_DISCONNECT_EVENT)( 00148 _In_opt_ PVOID SocketContext, 00149 _In_ ULONG Flags); 00150 00151 typedef 00152 NTSTATUS 00153 (WSKAPI * PFN_WSK_SEND_BACKLOG_EVENT)( 00154 _In_opt_ PVOID SocketContext, 00155 _In_ SIZE_T IdealBacklogSize); 00156 00157 typedef struct _WSK_CLIENT_CONNECTION_DISPATCH 00158 { 00159 PFN_WSK_RECEIVE_EVENT WskReceiveEvent; 00160 PFN_WSK_DISCONNECT_EVENT WskDisconnectEvent; 00161 PFN_WSK_SEND_BACKLOG_EVENT WskSendBacklogEvent; 00162 } WSK_CLIENT_CONNECTION_DISPATCH, *PWSK_CLIENT_CONNECTION_DISPATCH; 00163 00164 typedef 00165 _Must_inspect_result_ 00166 _At_(AcceptSocket, __drv_aliasesMem) 00167 NTSTATUS 00168 (WSKAPI * PFN_WSK_ACCEPT_EVENT)( 00169 _In_opt_ PVOID SocketContext, 00170 _In_ ULONG Flags, 00171 _In_ PSOCKADDR LocalAddress, 00172 _In_ PSOCKADDR RemoteAddress, 00173 _In_opt_ PWSK_SOCKET AcceptSocket, 00174 _Outptr_result_maybenull_ PVOID *AcceptSocketContext, 00175 _Outptr_result_maybenull_ const WSK_CLIENT_CONNECTION_DISPATCH **AcceptSocketDispatch); 00176 00177 typedef 00178 _At_(Irp->IoStatus.Information, __drv_allocatesMem(Mem)) 00179 NTSTATUS 00180 (WSKAPI * PFN_WSK_SOCKET_CONNECT)( 00181 _In_ PWSK_CLIENT Client, 00182 _In_ USHORT SocketType, 00183 _In_ ULONG Protocol, 00184 _In_ PSOCKADDR LocalAddress, 00185 _In_ PSOCKADDR RemoteAddress, 00186 _Reserved_ ULONG Flags, 00187 _In_opt_ PVOID SocketContext, 00188 _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH *Dispatch, 00189 _In_opt_ PEPROCESS OwningProcess, 00190 _In_opt_ PETHREAD OwningThread, 00191 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor, 00192 _Inout_ PIRP Irp); 00193 00194 typedef 00195 NTSTATUS 00196 (WSKAPI * PFN_WSK_CONTROL_SOCKET)( 00197 _In_ PWSK_SOCKET Socket, 00198 _In_ WSK_CONTROL_SOCKET_TYPE RequestType, 00199 _In_ ULONG ControlCode, 00200 _In_ ULONG Level, 00201 _In_ SIZE_T InputSize, 00202 _In_reads_bytes_opt_(InputSize) PVOID InputBuffer, 00203 _In_ SIZE_T OutputSize, 00204 _Out_writes_bytes_opt_(OutputSize) PVOID OutputBuffer, 00205 _Out_opt_ SIZE_T *OutputSizeReturned, 00206 _Inout_opt_ PIRP Irp); 00207 00208 typedef 00209 _At_(Socket, __drv_freesMem(Mem)) 00210 NTSTATUS 00211 (WSKAPI * PFN_WSK_CLOSE_SOCKET)( 00212 _In_ PWSK_SOCKET Socket, 00213 _Inout_ PIRP Irp); 00214 00215 typedef struct _WSK_PROVIDER_BASIC_DISPATCH 00216 { 00217 PFN_WSK_CONTROL_SOCKET WskControlSocket; 00218 PFN_WSK_CLOSE_SOCKET WskCloseSocket; 00219 } WSK_PROVIDER_BASIC_DISPATCH, *PWSK_PROVIDER_BASIC_DISPATCH; 00220 00221 typedef 00222 NTSTATUS 00223 (WSKAPI * PFN_WSK_BIND) ( 00224 _In_ PWSK_SOCKET Socket, 00225 _In_ PSOCKADDR LocalAddress, 00226 _Reserved_ ULONG Flags, 00227 _Inout_ PIRP Irp); 00228 00229 typedef 00230 _At_(Irp->IoStatus.Information, __drv_allocatesMem(Mem)) 00231 NTSTATUS 00232 (WSKAPI * PFN_WSK_ACCEPT)( 00233 _In_ PWSK_SOCKET ListenSocket, 00234 _Reserved_ ULONG Flags, 00235 _In_opt_ PVOID AcceptSocketContext, 00236 _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH *AcceptSocketDispatch, 00237 _Out_opt_ PSOCKADDR LocalAddress, 00238 _Out_opt_ PSOCKADDR RemoteAddress, 00239 _Inout_ PIRP Irp); 00240 00241 typedef 00242 NTSTATUS 00243 (WSKAPI * PFN_WSK_INSPECT_COMPLETE)( 00244 _In_ PWSK_SOCKET ListenSocket, 00245 _In_ PWSK_INSPECT_ID InspectID, 00246 _In_ WSK_INSPECT_ACTION Action, 00247 _Inout_ PIRP Irp); 00248 00249 typedef 00250 NTSTATUS 00251 (WSKAPI * PFN_WSK_GET_LOCAL_ADDRESS)( 00252 _In_ PWSK_SOCKET Socket, 00253 _Out_ PSOCKADDR LocalAddress, 00254 _Inout_ PIRP Irp); 00255 00256 typedef struct _WSK_PROVIDER_LISTEN_DISPATCH 00257 { 00258 #ifdef __cplusplus 00259 WSK_PROVIDER_BASIC_DISPATCH Basic; 00260 #else 00261 WSK_PROVIDER_BASIC_DISPATCH; 00262 #endif 00263 PFN_WSK_BIND WskBind; 00264 PFN_WSK_ACCEPT WskAccept; 00265 PFN_WSK_INSPECT_COMPLETE WskInspectComplete; 00266 PFN_WSK_GET_LOCAL_ADDRESS WskGetLocalAddress; 00267 } WSK_PROVIDER_LISTEN_DISPATCH, *PWSK_PROVIDER_LISTEN_DISPATCH; 00268 00269 #if (NTDDI_VERSION >= NTDDI_WIN8) 00270 typedef struct _WSK_BUF_LIST { 00271 struct _WSK_BUF_LIST *Next; 00272 WSK_BUF Buffer; 00273 } WSK_BUF_LIST, *PWSK_BUF_LIST; 00274 00275 typedef 00276 NTSTATUS 00277 (WSKAPI * PFN_WSK_SEND_MESSAGES)( 00278 _In_ PWSK_SOCKET Socket, 00279 _In_ PWSK_BUF_LIST BufferList, 00280 _Reserved_ ULONG Flags, 00281 _In_opt_ PSOCKADDR RemoteAddress, 00282 _In_ ULONG ControlInfoLength, 00283 _In_reads_bytes_opt_(ControlInfoLength) PCMSGHDR ControlInfo, 00284 _Inout_ PIRP Irp); 00285 #endif /* (NTDDI_VERSION >= NTDDI_WIN8) */ 00286 00287 typedef struct _WSK_PROVIDER_DATAGRAM_DISPATCH 00288 { 00289 #ifdef __cplusplus 00290 WSK_PROVIDER_BASIC_DISPATCH Basic; 00291 #else 00292 WSK_PROVIDER_BASIC_DISPATCH; 00293 #endif 00294 PFN_WSK_BIND WskBind; 00295 PFN_WSK_SEND_TO WskSendTo; 00296 PFN_WSK_RECEIVE_FROM WskReceiveFrom; 00297 PFN_WSK_RELEASE_DATAGRAM_INDICATION_LIST WskRelease; 00298 PFN_WSK_GET_LOCAL_ADDRESS WskGetLocalAddress; 00299 #if (NTDDI_VERSION >= NTDDI_WIN8) 00300 PFN_WSK_SEND_MESSAGES WskSendMessages; 00301 #endif 00302 } WSK_PROVIDER_DATAGRAM_DISPATCH, *PWSK_PROVIDER_DATAGRAM_DISPATCH; 00303 00304 typedef 00305 NTSTATUS 00306 (WSKAPI * PFN_WSK_CONNECT) ( 00307 _In_ PWSK_SOCKET Socket, 00308 _In_ PSOCKADDR RemoteAddress, 00309 _Reserved_ ULONG Flags, 00310 _Inout_ PIRP Irp); 00311 00312 typedef 00313 NTSTATUS 00314 (WSKAPI * PFN_WSK_GET_REMOTE_ADDRESS)( 00315 _In_ PWSK_SOCKET Socket, 00316 _Out_ PSOCKADDR RemoteAddress, 00317 _Inout_ PIRP Irp); 00318 00319 typedef 00320 NTSTATUS 00321 (WSKAPI * PFN_WSK_SEND)( 00322 _In_ PWSK_SOCKET Socket, 00323 _In_ PWSK_BUF Buffer, 00324 _In_ ULONG Flags, 00325 _Inout_ PIRP Irp); 00326 00327 typedef 00328 NTSTATUS 00329 (WSKAPI * PFN_WSK_RECEIVE)( 00330 _In_ PWSK_SOCKET Socket, 00331 _In_ PWSK_BUF Buffer, 00332 _In_ ULONG Flags, 00333 _Inout_ PIRP Irp); 00334 00335 typedef 00336 NTSTATUS 00337 (WSKAPI * PFN_WSK_DISCONNECT)( 00338 _In_ PWSK_SOCKET Socket, 00339 _In_opt_ PWSK_BUF Buffer, 00340 _In_ ULONG Flags, 00341 _Inout_ PIRP Irp); 00342 00343 typedef 00344 NTSTATUS 00345 (WSKAPI * PFN_WSK_RELEASE_DATA_INDICATION_LIST)( 00346 _In_ PWSK_SOCKET Socket, 00347 _In_ PWSK_DATA_INDICATION DataIndication); 00348 00349 typedef struct _WSK_PROVIDER_CONNECTION_DISPATCH 00350 { 00351 #ifdef __cplusplus 00352 WSK_PROVIDER_BASIC_DISPATCH Basic; 00353 #else 00354 WSK_PROVIDER_BASIC_DISPATCH; 00355 #endif 00356 PFN_WSK_BIND WskBind; 00357 PFN_WSK_CONNECT WskConnect; 00358 PFN_WSK_GET_LOCAL_ADDRESS WskGetLocalAddress; 00359 PFN_WSK_GET_REMOTE_ADDRESS WskGetRemoteAddress; 00360 PFN_WSK_SEND WskSend; 00361 PFN_WSK_RECEIVE WskReceive; 00362 PFN_WSK_DISCONNECT WskDisconnect; 00363 PFN_WSK_RELEASE_DATA_INDICATION_LIST WskRelease; 00364 } WSK_PROVIDER_CONNECTION_DISPATCH, *PWSK_PROVIDER_CONNECTION_DISPATCH; 00365 00366 typedef 00367 _Must_inspect_result_ 00368 WSK_INSPECT_ACTION 00369 (WSKAPI * PFN_WSK_INSPECT_EVENT)( 00370 _In_opt_ PVOID SocketContext, 00371 _In_ PSOCKADDR LocalAddress, 00372 _In_ PSOCKADDR RemoteAddress, 00373 _In_opt_ PWSK_INSPECT_ID InspectID); 00374 00375 typedef 00376 NTSTATUS 00377 (WSKAPI * PFN_WSK_ABORT_EVENT) ( 00378 _In_opt_ PVOID SocketContext, 00379 _In_ PWSK_INSPECT_ID InspectID); 00380 00381 typedef 00382 _At_(Irp->IoStatus.Information, __drv_allocatesMem(Mem)) 00383 NTSTATUS 00384 (WSKAPI * PFN_WSK_SOCKET)( 00385 _In_ PWSK_CLIENT Client, 00386 _In_ ADDRESS_FAMILY AddressFamily, 00387 _In_ USHORT SocketType, 00388 _In_ ULONG Protocol, 00389 _In_ ULONG Flags, 00390 _In_opt_ PVOID SocketContext, 00391 _In_opt_ const VOID *Dispatch, 00392 _In_opt_ PEPROCESS OwningProcess, 00393 _In_opt_ PETHREAD OwningThread, 00394 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor, 00395 _Inout_ PIRP Irp); 00396 00397 typedef struct _WSK_TDI_MAP 00398 { 00399 USHORT SocketType; 00400 ADDRESS_FAMILY AddressFamily; 00401 ULONG Protocol; 00402 PCWSTR TdiDeviceName; 00403 } WSK_TDI_MAP, *PWSK_TDI_MAP; 00404 00405 typedef struct _WSK_TDI_MAP_INFO 00406 { 00407 const ULONG ElementCount; 00408 _Field_size_(ElementCount) const WSK_TDI_MAP *Map; 00409 } WSK_TDI_MAP_INFO, *PWSK_TDI_MAP_INFO; 00410 00411 typedef 00412 NTSTATUS 00413 (WSKAPI * PFN_WSK_CONTROL_CLIENT)( 00414 _In_ PWSK_CLIENT Client, 00415 _In_ ULONG ControlCode, 00416 _In_ SIZE_T InputSize, 00417 _In_reads_bytes_opt_(InputSize) PVOID InputBuffer, 00418 _In_ SIZE_T OutputSize, 00419 _Out_writes_bytes_opt_(OutputSize) PVOID OutputBuffer, 00420 _Out_opt_ SIZE_T *OutputSizeReturned, 00421 _Inout_opt_ PIRP Irp); 00422 00423 #if (NTDDI_VERSION >= NTDDI_WIN7) 00424 00425 typedef 00426 _At_(*Result, __drv_allocatesMem(Mem)) 00427 NTSTATUS 00428 (WSKAPI * PFN_WSK_GET_ADDRESS_INFO)( 00429 _In_ PWSK_CLIENT Client, 00430 _In_opt_ PUNICODE_STRING NodeName, 00431 _In_opt_ PUNICODE_STRING ServiceName, 00432 _In_opt_ ULONG NameSpace, 00433 _In_opt_ GUID *Provider, 00434 _In_opt_ PADDRINFOEXW Hints, 00435 _Outptr_ PADDRINFOEXW *Result, 00436 _In_opt_ PEPROCESS OwningProcess, 00437 _In_opt_ PETHREAD OwningThread, 00438 _Inout_ PIRP Irp); 00439 00440 typedef 00441 NTSTATUS 00442 (WSKAPI * PFN_WSK_GET_NAME_INFO)( 00443 _In_ PWSK_CLIENT Client, 00444 _In_ PSOCKADDR SockAddr, 00445 _In_ ULONG SockAddrLength, 00446 _Out_opt_ PUNICODE_STRING NodeName, 00447 _Out_opt_ PUNICODE_STRING ServiceName, 00448 _In_ ULONG Flags, 00449 _In_opt_ PEPROCESS OwningProcess, 00450 _In_opt_ PETHREAD OwningThread, 00451 _Inout_ PIRP Irp); 00452 00453 typedef 00454 _At_(AddrInfo, __drv_freesMem(Mem)) 00455 VOID 00456 (WSKAPI * PFN_WSK_FREE_ADDRESS_INFO)( 00457 _In_ PWSK_CLIENT Client, 00458 _In_ PADDRINFOEXW AddrInfo); 00459 00460 #endif /* if (NTDDI_VERSION >= NTDDI_WIN7) */ 00461 00462 typedef struct _WSK_EVENT_CALLBACK_CONTROL 00463 { 00464 PNPIID NpiId; 00465 ULONG EventMask; 00466 } WSK_EVENT_CALLBACK_CONTROL, *PWSK_EVENT_CALLBACK_CONTROL; 00467 00468 typedef struct _WSK_EXTENSION_CONTROL_IN 00469 { 00470 PNPIID NpiId; 00471 PVOID ClientContext; 00472 const VOID* ClientDispatch; 00473 } WSK_EXTENSION_CONTROL_IN, *PWSK_EXTENSION_CONTROL_IN; 00474 00475 typedef struct _WSK_EXTENSION_CONTROL_OUT 00476 { 00477 PVOID ProviderContext; 00478 const VOID* ProviderDispatch; 00479 } WSK_EXTENSION_CONTROL_OUT, *PWSK_EXTENSION_CONTROL_OUT; 00480 00481 typedef 00482 NTSTATUS 00483 (WSKAPI * PFN_WSK_SEND_TO)( 00484 _In_ PWSK_SOCKET Socket, 00485 _In_ PWSK_BUF Buffer, 00486 _Reserved_ ULONG Flags, 00487 _In_opt_ PSOCKADDR RemoteAddress, 00488 _In_ ULONG ControlInfoLength, 00489 _In_reads_bytes_opt_(ControlInfoLength) PCMSGHDR ControlInfo, 00490 _Inout_ PIRP Irp); 00491 00492 typedef 00493 NTSTATUS 00494 (WSKAPI * PFN_WSK_RECEIVE_FROM)( 00495 _In_ PWSK_SOCKET Socket, 00496 _In_ PWSK_BUF Buffer, 00497 _Reserved_ ULONG Flags, 00498 _Out_opt_ PSOCKADDR RemoteAddress, 00499 _Inout_ PULONG ControlLength, 00500 _Out_writes_bytes_opt_(*ControlLength) PCMSGHDR ControlInfo, 00501 _Out_opt_ PULONG ControlFlags, 00502 _Inout_ PIRP Irp); 00503 00504 typedef 00505 NTSTATUS 00506 (WSKAPI * PFN_WSK_RELEASE_DATAGRAM_INDICATION_LIST)( 00507 _In_ PWSK_SOCKET Socket, 00508 _In_ PWSK_DATAGRAM_INDICATION DatagramIndication); 00509 00510 typedef 00511 NTSTATUS 00512 (WSKAPI * PFN_WSK_CLIENT_EVENT)( 00513 _In_opt_ PVOID ClientContext, 00514 _In_ ULONG EventType, 00515 _In_reads_bytes_opt_(InformationLength) PVOID Information, 00516 _In_ SIZE_T InformationLength); 00517 00518 typedef struct _WSK_CLIENT_DISPATCH 00519 { 00520 USHORT Version; 00521 USHORT Reserved; 00522 PFN_WSK_CLIENT_EVENT WskClientEvent; 00523 } WSK_CLIENT_DISPATCH, *PWSK_CLIENT_DISPATCH; 00524 00525 typedef struct _WSK_CLIENT_LISTEN_DISPATCH 00526 { 00527 PFN_WSK_ACCEPT_EVENT WskAcceptEvent; 00528 PFN_WSK_INSPECT_EVENT WskInspectEvent; 00529 PFN_WSK_ABORT_EVENT WskAbortEvent; 00530 } WSK_CLIENT_LISTEN_DISPATCH, *PWSK_CLIENT_LISTEN_DISPATCH; 00531 00532 typedef struct _WSK_CLIENT_DATAGRAM_DISPATCH 00533 { 00534 PFN_WSK_RECEIVE_FROM_EVENT WskReceiveFromEvent; 00535 } WSK_CLIENT_DATAGRAM_DISPATCH, *PWSK_CLIENT_DATAGRAM_DISPATCH; 00536 00537 typedef struct _WSK_PROVIDER_DISPATCH 00538 { 00539 USHORT Version; 00540 USHORT Reserved; 00541 PFN_WSK_SOCKET WskSocket; 00542 PFN_WSK_SOCKET_CONNECT WskSocketConnect; 00543 PFN_WSK_CONTROL_CLIENT WskControlClient; 00544 #if (NTDDI_VERSION >= NTDDI_WIN7) 00545 PFN_WSK_GET_ADDRESS_INFO WskGetAddressInfo; 00546 PFN_WSK_FREE_ADDRESS_INFO WskFreeAddressInfo; 00547 PFN_WSK_GET_NAME_INFO WskGetNameInfo; 00548 #endif 00549 } WSK_PROVIDER_DISPATCH, *PWSK_PROVIDER_DISPATCH; 00550 00551 00552 typedef struct _WSK_CLIENT_NPI 00553 { 00554 PVOID ClientContext; 00555 const WSK_CLIENT_DISPATCH *Dispatch; 00556 } WSK_CLIENT_NPI, *PWSK_CLIENT_NPI; 00557 00558 typedef struct _WSK_PROVIDER_NPI 00559 { 00560 PWSK_CLIENT Client; 00561 const WSK_PROVIDER_DISPATCH *Dispatch; 00562 } WSK_PROVIDER_NPI, *PWSK_PROVIDER_NPI; 00563 00564 typedef struct _WSK_REGISTRATION 00565 { 00566 ULONGLONG ReservedRegistrationState; 00567 PVOID ReservedRegistrationContext; 00568 KSPIN_LOCK ReservedRegistrationLock; 00569 } WSK_REGISTRATION, *PWSK_REGISTRATION; 00570 00571 typedef struct _WSK_PROVIDER_CHARACTERISTICS 00572 { 00573 USHORT HighestVersion; 00574 USHORT LowestVersion; 00575 } WSK_PROVIDER_CHARACTERISTICS, *PWSK_PROVIDER_CHARACTERISTICS; 00576 00577 typedef struct _WSK_TRANSPORT 00578 { 00579 USHORT Version; 00580 USHORT SocketType; 00581 ULONG Protocol; 00582 ADDRESS_FAMILY AddressFamily; 00583 GUID ProviderId; 00584 } WSK_TRANSPORT, *PWSK_TRANSPORT; 00585 00586 _Must_inspect_result_ 00587 NTSTATUS 00588 WskRegister( 00589 _In_ PWSK_CLIENT_NPI WskClientNpi, 00590 _Out_ PWSK_REGISTRATION WskRegistration); 00591 00592 _Must_inspect_result_ 00593 NTSTATUS 00594 WskCaptureProviderNPI( 00595 _In_ PWSK_REGISTRATION WskRegistration, 00596 _In_ ULONG WaitTimeout, 00597 _Out_ PWSK_PROVIDER_NPI WskProviderNpi); 00598 00599 VOID 00600 WskReleaseProviderNPI( 00601 _In_ PWSK_REGISTRATION WskRegistration); 00602 00603 _Must_inspect_result_ 00604 NTSTATUS 00605 WskQueryProviderCharacteristics( 00606 _In_ PWSK_REGISTRATION WskRegistration, 00607 _Out_ PWSK_PROVIDER_CHARACTERISTICS WskProviderCharacteristics); 00608 00609 VOID 00610 WskDeregister( 00611 _In_ PWSK_REGISTRATION WskRegistration); 00612 00613 #ifdef __cplusplus 00614 } 00615 #endif 00616 00617 Generated on Mon May 28 2012 04:30:23 for ReactOS by
1.7.6.1
|