ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

wsk.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.