32 for(
i = 0;
i <
Len;
i++ ) {
57 if (
FCB->DisconnectOptionsSize == 0)
68 FCB->DisconnectOptions,
88 if (!DisconnectOptions)
91 if (
FCB->DisconnectOptions)
95 FCB->DisconnectOptionsSize = 0;
96 FCB->FilledDisconnectOptions = 0;
100 DisconnectOptionsSize,
103 if (!
FCB->DisconnectOptions)
108 DisconnectOptionsSize);
110 FCB->DisconnectOptionsSize = DisconnectOptionsSize;
129 if (!DisconnectOptionsSize)
138 if (
FCB->DisconnectOptions)
141 FCB->DisconnectOptionsSize = 0;
142 FCB->FilledDisconnectOptions = 0;
146 *DisconnectOptionsSize,
151 FCB->DisconnectOptionsSize = *DisconnectOptionsSize;
168 if (
FCB->DisconnectDataSize == 0)
203 if (
FCB->DisconnectData)
207 FCB->DisconnectDataSize = 0;
208 FCB->FilledDisconnectData = 0;
215 if (!
FCB->DisconnectData)
222 FCB->DisconnectDataSize = DisconnectDataSize;
241 if (!DisconnectDataSize)
250 if (
FCB->DisconnectData)
253 FCB->DisconnectDataSize = 0;
254 FCB->FilledDisconnectData = 0;
261 if (!
FCB->DisconnectData)
264 FCB->DisconnectDataSize = *DisconnectDataSize;
323 Irp->IoStatus.Information = 0;
325 EaInfo =
Irp->AssociatedIrp.SystemBuffer;
334 EaInfo, EaInfoValue));
352 FCB->GroupID = ConnectInfo ? ConnectInfo->
GroupID : 0;
356 FCB->DeviceExt = DeviceExt;
375 FCB->TdiDeviceName.MaximumLength =
FCB->TdiDeviceName.Length;
377 FCB->TdiDeviceName.Length,
380 if( !
FCB->TdiDeviceName.Buffer ) {
390 FCB->TdiDeviceName.Length );
411 if (
FCB->TdiDeviceName.Buffer)
441 CurrentEntry =
FCB->PendingIrpList[
Function].Flink;
442 while (CurrentEntry != &
FCB->PendingIrpList[
Function])
444 NextEntry = CurrentEntry->
Flink;
450 CurrentEntry = NextEntry;
478 InFlightRequest[0] = &
FCB->ListenIrp;
479 InFlightRequest[1] = &
FCB->ReceiveIrp;
480 InFlightRequest[2] = &
FCB->SendIrp;
481 InFlightRequest[3] = &
FCB->ConnectIrp;
482 InFlightRequest[4] = &
FCB->DisconnectIrp;
486 if( InFlightRequest[
i]->InFlightRequest ) {
488 i, InFlightRequest[
i]->InFlightRequest));
516 if(
FCB->EventSelect )
522 if (
FCB->Recv.Window)
525 if (
FCB->Send.Window)
528 if (
FCB->AddressFrom)
531 if (
FCB->ConnectCallInfo)
534 if (
FCB->ConnectReturnInfo)
537 if (
FCB->ConnectData)
540 if (
FCB->DisconnectData)
543 if (
FCB->ConnectOptions)
546 if (
FCB->DisconnectOptions)
549 if (
FCB->LocalAddress)
552 if (
FCB->RemoteAddress)
555 if(
FCB->Connection.Object )
561 if(
FCB->AddressFile.Object )
568 DbgPrint(
"INVALID ADDRESS FILE HANDLE VALUE: %p %p\n",
FCB->AddressFile.Handle,
FCB->AddressFile.Object);
576 DbgPrint(
"INVALID CONNECTION HANDLE VALUE: %p %p\n",
FCB->Connection.Handle,
FCB->Connection.Object);
580 if (
FCB->TdiDeviceName.Buffer)
588 Irp->IoStatus.Information = 0;
614 FCB->DisconnectIrp.InFlightRequest =
NULL;
622 FCB->FilledDisconnectData =
MIN(
FCB->DisconnectDataSize,
FCB->ConnectReturnInfo->UserDataLength);
623 if (
FCB->FilledDisconnectData)
626 FCB->ConnectReturnInfo->UserData,
627 FCB->FilledDisconnectData);
630 FCB->FilledDisconnectOptions =
MIN(
FCB->DisconnectOptionsSize,
FCB->ConnectReturnInfo->OptionsLength);
631 if (
FCB->FilledDisconnectOptions)
634 FCB->ConnectReturnInfo->Options,
635 FCB->FilledDisconnectOptions);
663 return Irp->IoStatus.Status;
676 if (
FCB->DisconnectIrp.InFlightRequest)
681 FCB->ConnectCallInfo->UserData =
FCB->DisconnectData;
682 FCB->ConnectCallInfo->UserDataLength =
FCB->DisconnectDataSize;
683 FCB->ConnectCallInfo->Options =
FCB->DisconnectOptions;
684 FCB->ConnectCallInfo->OptionsLength =
FCB->DisconnectOptionsSize;
687 FCB->Connection.Object,
688 &
FCB->DisconnectTimeout,
689 FCB->DisconnectFlags,
692 FCB->ConnectCallInfo,
693 FCB->ConnectReturnInfo);
747 if (
FCB->ReceiveIrp.InFlightRequest)
751 FCB->Recv.Content = 0;
752 FCB->Recv.BytesUsed = 0;
758 FCB->PollState &= ~AFD_EVENT_RECEIVE;
776 if (!
FCB->ConnectCallInfo)
783 if (
FCB->DisconnectPending)
785 if (
FCB->DisconnectIrp.InFlightRequest)
788 ASSERT(!
FCB->DisconnectIrp.InFlightRequest);
809 FCB->PollState &= ~AFD_EVENT_SEND;
836 if (!
FCB->RemoteAddress)
847 FCB->PollState &= ~AFD_EVENT_SEND;
859 Buffer->Characteristics = 0;
881 Buffer =
Irp->AssociatedIrp.SystemBuffer;
918 Irp->IoStatus.Information = 0;
1051 DbgPrint(
"IOCTL_AFD_DEFER_ACCEPT is UNIMPLEMENTED!\n");
1055 DbgPrint(
"IOCTL_AFD_GET_PENDING_CONNECT_DATA is UNIMPLEMENTED!\n");
1059 DbgPrint(
"IOCTL_AFD_VALIDATE_GROUP is UNIMPLEMENTED!\n");
1076 (
"Irp: Unknown Major code was %x\n",
1172 PollReq =
Irp->AssociatedIrp.SystemBuffer;
1243 while (CurrentEntry != &DeviceExt->
Polls)
1256 CurrentEntry = CurrentEntry->
Flink;
1264 DbgPrint(
"WARNING!!! IRP cancellation race could lead to a process hang! (IOCTL_AFD_SELECT)\n");
1277 CurrentEntry =
FCB->PendingIrpList[
Function].Flink;
1278 while (CurrentEntry != &
FCB->PendingIrpList[
Function])
1282 if (CurrentIrp ==
Irp)
1291 CurrentEntry = CurrentEntry->
Flink;
1297 DbgPrint(
"WARNING!!! IRP cancellation race could lead to a process hang! (Function: %u)\n",
Function);
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define SOCKET_STATE_CLOSED
#define IN_FLIGHT_REQUESTS
#define SOCKET_STATE_CREATED
#define TAG_AFD_DISCONNECT_DATA
#define TAG_AFD_TDI_CONNECTION_INFORMATION
#define TAG_AFD_DISCONNECT_OPTIONS
#define FUNCTION_PREACCEPT
#define TAG_AFD_ACCEPT_QUEUE
#define TAG_AFD_CONNECT_OPTIONS
#define TAG_AFD_SOCKET_CONTEXT
DRIVER_CANCEL AfdCancelHandler
#define TAG_AFD_CONNECT_DATA
#define TAG_AFD_DATA_BUFFER
#define TAG_AFD_TRANSPORT_ADDRESS
#define FUNCTION_DISCONNECT
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
#define NT_SUCCESS(StatCode)
#define INVALID_HANDLE_VALUE
DRIVER_INITIALIZE DriverEntry
_In_ PIO_STACK_LOCATION IrpSp
NTSTATUS NTAPI AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdSetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdSetConnectDataSize(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdGetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdGetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdSetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdSetConnectOptionsSize(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdSetContext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdGetContextSize(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdGetContext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdSetInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdGetSockName(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdGetInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdGetPeerName(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS AfdAccept(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS AfdListenSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS AfdWaitForListen(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
PVOID LockRequest(PIRP Irp, PIO_STACK_LOCATION IrpSp, BOOLEAN Output, KPROCESSOR_MODE *LockMode)
VOID UnlockBuffers(PAFD_WSABUF Buf, UINT Count, BOOL Address)
VOID UnlockRequest(PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS QueueUserModeIrp(PAFD_FCB FCB, PIRP Irp, UINT Function)
NTSTATUS LostSocket(PIRP Irp)
NTSTATUS NTAPI UnlockAndMaybeComplete(PAFD_FCB FCB, NTSTATUS Status, PIRP Irp, UINT Information)
VOID SocketStateUnlock(PAFD_FCB FCB)
BOOLEAN SocketAcquireStateLock(PAFD_FCB FCB)
PVOID GetLockedData(PIRP Irp, PIO_STACK_LOCATION IrpSp)
VOID RetryDisconnectCompletion(PAFD_FCB FCB)
NTSTATUS NTAPI AfdSetDisconnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
static DRIVER_UNLOAD AfdUnload
static NTSTATUS NTAPI AfdQueryVolumeInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
BOOLEAN CheckUnlockExtraBuffers(PAFD_FCB FCB, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdSetDisconnectDataSize(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
static NTSTATUS NTAPI AfdGetTdiHandles(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
static NTSTATUS NTAPI AfdCreateSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
static NTSTATUS NTAPI AfdCleanupSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS AfdQueryFsDeviceInfo(PDEVICE_OBJECT DeviceObject, PFILE_FS_DEVICE_INFORMATION Buffer, PULONG Length)
void OskitDumpBuffer(PCHAR Data, UINT Len)
NTSTATUS NTAPI AfdSetDisconnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
static NTSTATUS NTAPI AfdDisconnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
VOID CleanupPendingIrp(PAFD_FCB FCB, PIRP Irp, PIO_STACK_LOCATION IrpSp, PAFD_ACTIVE_POLL Poll)
static DRIVER_DISPATCH AfdDispatch
static IO_COMPLETION_ROUTINE DisconnectComplete
NTSTATUS NTAPI AfdSetDisconnectOptionsSize(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
static NTSTATUS NTAPI AfdCloseSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
ULONG AfdReceiveWindowSize
NTSTATUS NTAPI AfdGetDisconnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdGetDisconnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
static NTSTATUS DoDisconnect(PAFD_FCB FCB)
NTSTATUS NTAPI AfdEnumEvents(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
VOID KillSelectsForFCB(PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject, BOOLEAN OnlyExclusive)
NTSTATUS NTAPI AfdSelect(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdEventSelect(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
VOID ZeroEvents(PAFD_HANDLE HandleArray, UINT HandleCount)
VOID PollReeval(PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject)
VOID SignalSocket(PAFD_ACTIVE_POLL Poll OPTIONAL, PIRP _Irp OPTIONAL, PAFD_POLL_INFO PollReq, NTSTATUS Status)
NTSTATUS TdiDisassociateAddressFile(PFILE_OBJECT ConnectionObject)
NTSTATUS TdiDisconnect(PIRP *Irp, PFILE_OBJECT TransportObject, PLARGE_INTEGER Time, USHORT Flags, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext, PTDI_CONNECTION_INFORMATION RequestConnectionInfo, PTDI_CONNECTION_INFORMATION ReturnConnectionInfo)
NTSTATUS NTAPI AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp, BOOLEAN Short)
NTSTATUS NTAPI AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
#define AFD_DbgPrint(_t_, _x_)
#define IO_NETWORK_INCREMENT
#define RemoveEntryList(Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
#define KeReleaseSpinLock(sl, irql)
#define KeAcquireSpinLock(sl, irql)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
@ FileFsDeviceInformation
enum _FSINFOCLASS FS_INFORMATION_CLASS
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
IoSetCancelRoutine(Irp, CancelRoutine)
#define ExFreePoolWithTag(_P, _T)
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
NTSTATUS NTAPI AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp, BOOLEAN Short)
NTSTATUS NTAPI AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
DRIVER_DISPATCH(nfs41_FsdDispatch)
struct _FILE_FS_DEVICE_INFORMATION FILE_FS_DEVICE_INFORMATION
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
#define IoCompleteRequest
BOOLEAN NTAPI IoCancelIrp(IN PIRP Irp)
VOID NTAPI IoReleaseCancelSpinLock(IN KIRQL Irql)
VOID NTAPI KeInitializeMutex(IN PKMUTEX Mutex, IN ULONG Level)
#define STATUS_INVALID_HANDLE
#define STATUS_FILE_CLOSED
#define STATUS_NOT_SUPPORTED
#define STATUS_NOT_IMPLEMENTED
#define STATUS_INVALID_INFO_CLASS
#define FILE_DEVICE_NAMED_PIPE
#define IRP_MJ_DEVICE_CONTROL
#define IRP_MJ_QUERY_VOLUME_INFORMATION
#define IOCTL_AFD_EVENT_SELECT
#define IOCTL_AFD_GET_TDI_HANDLES
#define AFD_DISCONNECT_RECV
struct _AFD_CREATE_PACKET * PAFD_CREATE_PACKET
#define IOCTL_AFD_SET_INFO
#define IOCTL_AFD_SET_DISCONNECT_OPTIONS
#define IOCTL_AFD_WAIT_FOR_LISTEN
#define IOCTL_AFD_SET_CONNECT_OPTIONS_SIZE
#define IOCTL_AFD_GET_SOCK_NAME
#define IOCTL_AFD_DEFER_ACCEPT
#define IOCTL_AFD_START_LISTEN
#define IOCTL_AFD_SET_CONNECT_OPTIONS
#define IOCTL_AFD_GET_DISCONNECT_DATA
#define IOCTL_AFD_GET_CONTEXT
#define IOCTL_AFD_SET_DISCONNECT_DATA_SIZE
#define IOCTL_AFD_GET_DISCONNECT_OPTIONS
#define IOCTL_AFD_GET_INFO
#define IOCTL_AFD_GET_CONTEXT_SIZE
#define IOCTL_AFD_GET_CONNECT_OPTIONS
#define IOCTL_AFD_SET_CONNECT_DATA
#define AFD_CONNECTION_HANDLE
#define IOCTL_AFD_CONNECT
#define IOCTL_AFD_DISCONNECT
#define IOCTL_AFD_SEND_DATAGRAM
#define AFD_ADDRESS_HANDLE
#define IOCTL_AFD_VALIDATE_GROUP
#define IOCTL_AFD_SET_DISCONNECT_OPTIONS_SIZE
#define IOCTL_AFD_RECV_DATAGRAM
#define IOCTL_AFD_ENUM_NETWORK_EVENTS
#define IOCTL_AFD_SET_DISCONNECT_DATA
#define AFD_ENDPOINT_CONNECTIONLESS
#define IOCTL_AFD_GET_PENDING_CONNECT_DATA
#define IOCTL_AFD_SET_CONNECT_DATA_SIZE
#define IOCTL_AFD_GET_PEER_NAME
#define IOCTL_AFD_SET_CONTEXT
#define IOCTL_AFD_GET_CONNECT_DATA
#define AFD_DISCONNECT_SEND
#define STATUS_BUFFER_TOO_SMALL
DWORD SizeOfTransportName
HANDLE TdiConnectionHandle
struct _IO_STACK_LOCATION::@1575::@1576 DeviceIoControl
struct _IO_STACK_LOCATION::@3974::@3987 QueryVolume
union _IO_STACK_LOCATION::@1575 Parameters
struct _LIST_ENTRY * Flink
#define TDI_DISCONNECT_RELEASE
#define TDI_DISCONNECT_ABORT
#define RTL_CONSTANT_STRING(s)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_PARAMETER
#define STATUS_INFO_LENGTH_MISMATCH
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_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_ ULONG IoctlCode
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
_Must_inspect_result_ _In_ ULONG Flags
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define ObDereferenceObject