60#define TAG_NETIO 'OIEN'
62#ifndef TAG_AFD_TDI_CONNECTION_INFORMATION
63#define TAG_AFD_TDI_CONNECTION_INFORMATION 'cTfA'
67#define AFD_SHARE_UNIQUE 0x0L
68#define AFD_SHARE_REUSE 0x1L
69#define AFD_SHARE_WILDCARD 0x2L
70#define AFD_SHARE_EXCLUSIVE 0x3L
74#define FUNCTION_TRACE do { } while (0)
159 if (Socket->ListenSocket !=
NULL)
162 Socket->ListenSocket =
NULL;
164 if (Socket->ListenThreadHandle !=
NULL)
166 Socket->ListenThreadShouldRun =
FALSE;
171 DPRINT1(
"KeWaitForSingleObject failed with status 0x%08x!\n",
status);
174 Socket->ListenThread =
NULL;
175 Socket->ListenThreadHandle =
NULL;
177 if (Socket->ListenIrp !=
NULL)
179 Socket->ListenCancelled =
TRUE;
181 Socket->ListenIrp =
NULL;
183 if (Socket->ConnectionFile !=
NULL)
185 if (Socket->ConnectionFileAssociated)
191 DPRINT1(
"Warning: TdiDisassociateAddressFile returned status %08x\n",
status);
193 Socket->ConnectionFileAssociated =
FALSE;
196 Socket->ConnectionFile =
NULL;
198 if (Socket->ConnectionHandle !=
NULL)
200 ZwClose(Socket->ConnectionHandle);
201 Socket->ConnectionHandle =
NULL;
218 if (Socket->LocalAddressFile !=
NULL)
221 Socket->LocalAddressFile =
NULL;
223 if (Socket->LocalAddressHandle !=
NULL)
225 ZwClose(Socket->LocalAddressHandle);
226 Socket->LocalAddressHandle =
NULL;
251 ULONG NumSocketDereferences;
260 DPRINT1(
"KeWaitForSingleObject failed with status 0x%08x!\n",
status);
270 while (NumSocketDereferences > 0)
297 DPRINT1(
"Could not start put sockets thread, status is %x\n",
status);
325 if (Socket->NumSocketDereferences == 0)
333 Socket->NumSocketDereferences++;
439 if (NewSocketIrp ==
NULL)
514 DPRINT1(
"ListenDispatch->WskAcceptEvent returned non-successful status 0x%08x\n",
Status);
553 if (ListenSocket->LocalAddressHandle ==
NULL)
555 DPRINT1(
"LocalAddressHandle is not set, need to bind your socket before listening\n");
562 DPRINT1(
"Could not create AcceptSocket, status is 0x%08x\n",
status);
573 goto err_out_free_accept_socket;
583 goto err_out_free_lc;
591 goto err_out_free_lc_and_disassociate;
599 goto err_out_free_lc_and_req_conn_info;
606 ListenSocket->ListenCancelled =
FALSE;
615 goto err_out_free_lc_and_req_conn_info;
617 ListenSocket->ListenIrp = tdiIrp;
621err_out_free_lc_and_req_conn_info:
624err_out_free_lc_and_disassociate:
628 DPRINT1(
"Warning: TdiDisassociateAddressFile returned status %08x\n",
status);
635err_out_free_accept_socket:
653 DPRINT1(
"KeWaitForSingleObject failed with status 0x%08x!\n",
status);
700 DPRINT1(
"WskControlSocket: Need an InputBuffer for this operation\n");
704 if (InputSize <
sizeof(
UINT))
706 DPRINT1(
"WskControlSocket: InputBuffer too small for this operation\n");
717 Socket->
Flags &= ~ControlCode;
726 DPRINT1(
"WskControlSocket: Need an InputBuffer for this operation\n");
732 DPRINT1(
"WskControlSocket: InputBuffer too small for this operation\n");
757 DPRINT1(
"WskControlSocket: Level %d Not implemented\n",
Level);
808 DPRINT1(
"TdiTransportAddressFromSocketAddress: Out of memory\n");
837 if (ConnectionInformation !=
NULL)
844 return ConnectionInformation;
910 if (NetioContext ==
NULL)
914 NetioContext->
socket = Socket;
918 if (TargetConnectionInfo ==
NULL)
920 goto err_out_free_nc;
926 if (BufferData ==
NULL)
928 DPRINT1(
"Error mapping MDL\n");
929 goto err_out_free_nc_and_tci;
946 goto err_out_free_nc_and_tci;
950err_out_free_nc_and_tci:
1113 DPRINT1(
"LocalAddressHandle is not set, need to bind your socket before connecting\n");
1119 if (NetioContext ==
NULL)
1123 NetioContext->
socket = Socket;
1131 goto err_out_free_nc;
1136 if (TargetConnectionInfo ==
NULL)
1138 goto err_out_free_nc_and_disassociate;
1144 if (PeerAddrRet ==
NULL)
1146 goto err_out_free_nc_and_tci;
1164 goto err_out_free_nc_and_tci;
1168err_out_free_nc_and_tci:
1171err_out_free_nc_and_disassociate:
1175 DPRINT1(
"Warning: TdiDisassociateAddressFile returned status %08x\n",
status);
1209 if (NetioContext ==
NULL)
1213 NetioContext->
socket = Socket;
1220 if (BufferData ==
NULL)
1222 DPRINT1(
"Error mapping MDL\n");
1223 goto err_out_free_nc;
1247 goto err_out_free_nc;
1340 DPRINT1(
"SOCK_DGRAM only supports IPPROTO_UDP\n");
1346 DPRINT1(
"SOCK_DGRAM flags must be WSK_FLAG_DATAGRAM_SOCKET\n");
1355 DPRINT1(
"SOCK_STREAM only supports IPPROTO_TCP\n");
1361 DPRINT1(
"SOCK_STREAM flags must be either WSK_FLAG_CONNECTION_SOCKET or WSK_FLAG_LISTEN_SOCKET\n");
1368 DPRINT1(
"SOCK_RAW not supported\n");
1380 DPRINT1(
"WskSocket: Out of memory\n");
1407 DPRINT1(
"Could not open TDI handle, status is %x\n",
status);
1420 DPRINT1(
"Could not start listen thread, status is %x\n",
status);
1427 DPRINT1(
"Could not get a PKTHREAD object, status is %x\n",
status);
1436 DPRINT1(
"Warning: no callbacks given for listen socket\n");
1441 DPRINT1(
"Socket type not yet supported\n");
1469 reg->ReservedRegistrationState = 0;
1470 reg->ReservedRegistrationContext =
NULL;
1500 reg->ReservedRegistrationState = 0;
1501 reg->ReservedRegistrationContext =
NULL;
#define ExAllocatePoolUninitialized
#define InterlockedIncrement
#define InterlockedDecrement
#define STATUS_NOT_SUPPORTED
#define STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
DRIVER_INITIALIZE DriverEntry
static IO_COMPLETION_ROUTINE ListenComplete
#define IO_NETWORK_INCREMENT
#define PsGetCurrentThread()
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeReleaseSpinLock(sl, irql)
#define KeSetEvent(pEvt, foo, foo2)
#define KeAcquireSpinLock(sl, irql)
#define KeGetCurrentIrql()
#define KeInitializeSpinLock(sl)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
#define memcpy(s1, s2, n)
#define ExFreePoolWithTag(_P, _T)
FORCEINLINE PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
IN PCO_ADDRESS_FAMILY AddressFamily
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
static void SocketShutdown(_In_ PWSK_SOCKET_INTERNAL Socket)
static NTSTATUS WSKAPI WskControlClient(_In_ PWSK_CLIENT Client, _In_ ULONG ControlCode, _In_ SIZE_T InputSize, _In_reads_bytes_opt_(InputSize) PVOID InputBuffer, _In_ SIZE_T OutputSize, _Out_writes_bytes_opt_(OutputSize) PVOID OutputBuffer, _Out_opt_ SIZE_T *OutputSizeReturned, _Inout_opt_ PIRP Irp)
static NTSTATUS NTAPI CompletionFireEvent(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _In_ PVOID Context)
VOID WSKAPI WskDeregister(_In_ PWSK_REGISTRATION reg)
static WSK_PROVIDER_DATAGRAM_DISPATCH UdpDispatch
static NTSTATUS WSKAPI WskSend(_In_ PWSK_SOCKET SocketParam, _In_ PWSK_BUF Buffer, _In_ ULONG Flags, _Inout_ PIRP Irp)
static void StopSocketDereferenceThread(void)
static NTSTATUS WSKAPI WskCloseSocket(_In_ PWSK_SOCKET SocketParam, _Inout_ PIRP Irp)
static NTSTATUS WSKAPI WskDisconnect(_In_ PWSK_SOCKET SocketParam, _In_opt_ PWSK_BUF Buffer, _In_ ULONG Flags, _Inout_ PIRP Irp)
static NTSTATUS WSKAPI WskControlSocket(_In_ PWSK_SOCKET SocketParam, _In_ WSK_CONTROL_SOCKET_TYPE RequestType, _In_ ULONG ControlCode, _In_ ULONG Level, _In_ SIZE_T InputSize, _In_reads_bytes_opt_(InputSize) PVOID InputBuffer, _In_ SIZE_T OutputSize, _Out_writes_bytes_opt_(OutputSize) PVOID OutputBuffer, _Out_opt_ SIZE_T *OutputSizeReturned, _Inout_opt_ PIRP Irp)
static PTRANSPORT_ADDRESS TdiTransportAddressFromSocketAddress(_In_ PSOCKADDR SocketAddress)
struct _LISTEN_CONTEXT LISTEN_CONTEXT
static HANDLE DereferenceSocketsThreadHandle
struct _LISTEN_CONTEXT * PLISTEN_CONTEXT
static NTSTATUS StartSocketDereferenceThread(void)
static volatile BOOLEAN DereferenceSocketsThreadShouldRun
#define TAG_AFD_TDI_CONNECTION_INFORMATION
static WSK_PROVIDER_DISPATCH provider_dispatch
static void DereferenceSocketSynchronous(_In_ PWSK_SOCKET_INTERNAL Socket)
struct _NETIO_CONTEXT * PNETIO_CONTEXT
static NTSTATUS WSKAPI WskReleaseUdp(_In_ PWSK_SOCKET SocketParam, _In_ PWSK_DATAGRAM_INDICATION DatagramIndication)
static PWSK_SOCKET_INTERNAL SocketsToDereference
NTSTATUS WSKAPI WskCaptureProviderNPI(_In_ PWSK_REGISTRATION reg, _In_ ULONG wait, _Out_ PWSK_PROVIDER_NPI npi)
static KEVENT DereferenceSocketsEvent
static void DereferenceSocket(_In_ PWSK_SOCKET_INTERNAL Socket)
static void ReferenceSocket(_In_ PWSK_SOCKET_INTERNAL Socket)
static NTSTATUS WSKAPI WskSendTo(_In_ PWSK_SOCKET SocketParam, _In_ PWSK_BUF Buffer, _Reserved_ ULONG Flags, _In_opt_ PSOCKADDR RemoteAddress, _In_ ULONG ControlInfoLength, _In_reads_bytes_opt_(ControlInfoLength) PCMSGHDR ControlInfo, _Inout_ PIRP Irp)
static NTSTATUS WSKAPI WskConnect(_In_ PWSK_SOCKET SocketParam, _In_ PSOCKADDR RemoteAddress, _Reserved_ ULONG Flags, _Inout_ PIRP Irp)
NTSTATUS WSKAPI WskRegister(_In_ PWSK_CLIENT_NPI client_npi, _Out_ PWSK_REGISTRATION reg)
static void QueueListening(_In_ PWSK_SOCKET_INTERNAL ListenSocket)
static NTSTATUS WSKAPI WskStreamIo(_In_ PWSK_SOCKET SocketParam, _In_ PWSK_BUF Buffer, _In_ ULONG Flags, _Inout_ PIRP Irp, _In_ enum direction Direction)
static void SocketDestroy(_In_ PWSK_SOCKET_INTERNAL Socket)
static PTDI_CONNECTION_INFORMATION TdiConnectionInfoFromSocketAddress(_In_ PSOCKADDR SocketAddress)
static NTSTATUS WSKAPI WskReceive(_In_ PWSK_SOCKET SocketParam, _In_ PWSK_BUF Buffer, _In_ ULONG Flags, _Inout_ PIRP Irp)
struct _WSK_SOCKET_INTERNAL * PWSK_SOCKET_INTERNAL
static NTSTATUS WSKAPI WskReceiveFrom(_In_ PWSK_SOCKET SocketParam, _In_ PWSK_BUF Buffer, _Reserved_ ULONG Flags, _Out_opt_ PSOCKADDR RemoteAddress, _Inout_ PULONG ControlLength, _Out_writes_bytes_opt_(*ControlLength) PCMSGHDR ControlInfo, _Out_opt_ PULONG ControlFlags, _Inout_ PIRP Irp)
static NTSTATUS WSKAPI WskReleaseTcp(_In_ PWSK_SOCKET SocketParam, _In_ PWSK_DATA_INDICATION DataIndication)
VOID WSKAPI WskReleaseProviderNPI(_In_ PWSK_REGISTRATION reg)
static KSPIN_LOCK SocketsToDereferenceListLock
struct _NETIO_CONTEXT NETIO_CONTEXT
static NTSTATUS WSKAPI WskBind(_In_ PWSK_SOCKET SocketParam, _In_ PSOCKADDR LocalAddress, _Reserved_ ULONG Flags, _Inout_ PIRP Irp)
struct _WSK_SOCKET_INTERNAL WSK_SOCKET_INTERNAL
static NTSTATUS WSKAPI WskGetLocalAddress(_In_ PWSK_SOCKET SocketParam, _Out_ PSOCKADDR LocalAddress, _Inout_ PIRP Irp)
static NTSTATUS StartListening(_In_ PWSK_SOCKET_INTERNAL ListenSocket)
static NTSTATUS WSKAPI WskSocketConnect(_In_ PWSK_CLIENT Client, _In_ USHORT SocketType, _In_ ULONG Protocol, _In_ PSOCKADDR LocalAddress, _In_ PSOCKADDR RemoteAddress, _In_ ULONG Flags, _In_opt_ PVOID SocketContext, _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH *Dispatch, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor, _Inout_ PIRP Irp)
static NTSTATUS WSKAPI WskSocket(_In_ PWSK_CLIENT Client, _In_ ADDRESS_FAMILY AddressFamily, _In_ USHORT SocketType, _In_ ULONG Protocol, _In_ ULONG Flags, _In_opt_ PVOID SocketContext, _In_opt_ const VOID *Dispatch, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor, _Inout_ PIRP Irp)
static VOID NTAPI DereferenceSocketsThread(_In_opt_ void *p)
static VOID NTAPI RequeueListenThread(_In_ PVOID p)
static NTSTATUS WSKAPI WskGetRemoteAddress(_In_ PWSK_SOCKET SocketParam, _Out_ PSOCKADDR RemoteAddress, _Inout_ PIRP Irp)
static WSK_PROVIDER_CONNECTION_DISPATCH TcpDispatch
static NTSTATUS NTAPI NetioComplete(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _In_ PVOID ContextParam)
#define _Out_writes_bytes_opt_(s)
#define _In_reads_bytes_opt_(s)
#define THREAD_ALL_ACCESS
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define IoCompleteRequest
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
BOOLEAN NTAPI IoCancelIrp(IN PIRP Irp)
VOID NTAPI IoFreeIrp(IN PIRP Irp)
NTSTATUS NTAPI PsTerminateSystemThread(IN NTSTATUS ExitStatus)
NTSTATUS NTAPI PsCreateSystemThread(OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle, IN PCLIENT_ID ClientId, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
#define STATUS_MORE_PROCESSING_REQUIRED
PWSK_SOCKET_INTERNAL ListenSocket
PTDI_CONNECTION_INFORMATION ReturnConnectionInfo
PWSK_SOCKET_INTERNAL AcceptSocket
PTDI_CONNECTION_INFORMATION RequestConnectionInfo
PTDI_CONNECTION_INFORMATION TargetConnectionInfo
PTDI_CONNECTION_INFORMATION PeerAddrRet
PWSK_SOCKET_INTERNAL socket
PFN_WSK_ACCEPT_EVENT WskAcceptEvent
HANDLE LocalAddressHandle
struct _WSK_SOCKET_INTERNAL * NextSocketToDereference
struct sockaddr LocalAddress
volatile BOOLEAN ListenThreadShouldRun
struct _WSK_SOCKET_INTERNAL * ListenSocket
PFILE_OBJECT LocalAddressFile
HANDLE ListenThreadHandle
BOOLEAN ConnectionFileAssociated
ULONG NumSocketDereferences
const WSK_CLIENT_LISTEN_DISPATCH * ListenDispatch
struct sockaddr RemoteAddress
PFILE_OBJECT ConnectionFile
volatile BOOLEAN ListenCancelled
PFILE_OBJECT RemoteAddressFile
HANDLE RemoteAddressHandle
struct _TRANSPORT_ADDRESS * PTRANSPORT_ADDRESS
#define TDI_ADDRESS_TYPE_IP
NTSTATUS TdiOpenConnectionEndpointFile(PUNICODE_STRING DeviceName, PHANDLE ConnectionHandle, PFILE_OBJECT *ConnectionObject)
Opens a connection endpoint file object.
NTSTATUS TdiConnect(PIRP *PendingIrp, PFILE_OBJECT ConnectionObject, PTDI_CONNECTION_INFORMATION ConnectionCallInfo, PTDI_CONNECTION_INFORMATION ConnectionReturnInfo, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext)
Connect a connection endpoint to a remote peer.
NTSTATUS TdiBuildNullConnectionInfo(PTDI_CONNECTION_INFORMATION *ConnectionInfo, ULONG Type)
Builds a NULL TDI connection information structure.
NTSTATUS TdiListen(PIRP *Irp, PFILE_OBJECT ConnectionObject, PTDI_CONNECTION_INFORMATION *RequestConnectionInfo, PTDI_CONNECTION_INFORMATION *ReturnConnectionInfo, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext)
Listen on a connection endpoint for a connection request from a remote peer.
NTSTATUS TdiAssociateAddressFile(HANDLE AddressHandle, PFILE_OBJECT ConnectionObject)
Associates a connection endpoint to an address file object.
NTSTATUS TdiBuildConnectionInfo(PTDI_CONNECTION_INFORMATION *ConnectionInfo, PTRANSPORT_ADDRESS Name)
NTSTATUS TdiDisassociateAddressFile(PFILE_OBJECT ConnectionObject)
Disassociates a connection endpoint from an address file object.
NTSTATUS TdiReceive(PIRP *Irp, PFILE_OBJECT ConnectionObject, USHORT Flags, PCHAR Buffer, UINT BufferLength, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext)
NTSTATUS TdiSendDatagram(PIRP *Irp, PFILE_OBJECT TransportObject, PCHAR Buffer, UINT BufferLength, PTDI_CONNECTION_INFORMATION To, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext)
Sends a datagram.
NTSTATUS TdiOpenAddressFile(PUNICODE_STRING DeviceName, PTRANSPORT_ADDRESS Name, ULONG ShareType, PHANDLE AddressHandle, PFILE_OBJECT *AddressObject)
Opens an IPv4 address file object.
NTSTATUS TdiSend(PIRP *Irp, PFILE_OBJECT ConnectionObject, USHORT Flags, PCHAR Buffer, UINT BufferLength, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext)
static void CreateSocket(void)
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_PARAMETER
#define STATUS_INSUFFICIENT_RESOURCES
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFQUEUE _In_ _Strict_type_match_ WDF_REQUEST_TYPE RequestType
WDF_EXTERN_C_START typedef _In_ WDFDEVICE _In_ WDFCONTEXT _In_ WDF_DMA_DIRECTION Direction
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
_In_ WDF_WMI_PROVIDER_CONTROL Control
struct sockaddr * PSOCKADDR
_IRQL_requires_same_ typedef _In_ ULONG ControlCode
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
#define WSK_FLAG_LISTEN_SOCKET
#define SO_WSK_EVENT_CALLBACK
_Must_inspect_result_ _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _In_opt_ PWSK_SOCKET _Outptr_result_maybenull_ PVOID * AcceptSocketContext
_Must_inspect_result_ _In_ ULONG _In_ PSOCKADDR LocalAddress
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD OwningThread
#define WSK_FLAG_CONNECTION_SOCKET
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH * Dispatch
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID SocketContext
_Must_inspect_result_ _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _In_opt_ PWSK_SOCKET AcceptSocket
#define WSK_FLAG_DATAGRAM_SOCKET
_Must_inspect_result_ _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR RemoteAddress
struct _WSK_CLIENT_LISTEN_DISPATCH * PWSK_CLIENT_LISTEN_DISPATCH
_Must_inspect_result_ _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _In_opt_ PWSK_SOCKET _Outptr_result_maybenull_ PVOID _Outptr_result_maybenull_ const WSK_CLIENT_CONNECTION_DISPATCH ** AcceptSocketDispatch
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS OwningProcess
_Must_inspect_result_ _In_ ULONG Flags
FORCEINLINE VOID IoSetNextIrpStackLocation(_Inout_ PIRP Irp)
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _Inout_ PLARGE_INTEGER _Outptr_ PVOID * TargetAddress
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority)
#define ObDereferenceObject