89 Wait.QuadPart = -100000;
143 "%s - Deassociating IRP %p for %p\n",
196 "%s - Cleaning IRP %p for %p\n",
202 while ((
Mdl =
Irp->MdlAddress))
205 Irp->MdlAddress =
Mdl->Next;
217 if ((
Irp->UserEvent) &&
246#if defined(_WIN64) && defined(BUILD_WOW64_ENABLED)
247 PIO_STATUS_BLOCK32 Iosb32 = (PIO_STATUS_BLOCK32)
Irp->UserIosb->Pointer;
260 IoIs32bitProcess(
NULL) &&
265 Iosb32->Information =
Irp->IoStatus.Information;
266 Iosb32->Status =
Irp->IoStatus.Status;
271 *
Irp->UserIosb =
Irp->IoStatus;
300 "%s - Completing IRP %p for %p\n",
339 Irp->AssociatedIrp.SystemBuffer,
340 Irp->IoStatus.Information);
378 (
Irp->PendingReturned &&
427 Irp->Overlay.AsynchronousParameters.UserApcRoutine =
NULL;
428 SignaledCreateRequest =
TRUE;
445 Irp->Overlay.AsynchronousParameters.UserApcRoutine =
NULL;
446 SignaledCreateRequest =
TRUE;
477 if (
Irp->Overlay.AsynchronousParameters.UserApcRoutine)
486 Overlay.AsynchronousParameters.UserApcRoutine,
489 Overlay.AsynchronousParameters.UserApcContext);
495 (
Irp->Overlay.AsynchronousParameters.UserApcContext))
498 Irp->Tail.CompletionKey =
Key;
527 *
Irp->UserIosb =
Irp->IoStatus;
563 if ((
Irp->UserEvent) &&
584 ReserveIrpAllocator->StackSize = 20;
587 ReserveIrpAllocator->ReserveIrp =
IoAllocateIrp(ReserveIrpAllocator->StackSize,
FALSE);
589 if (ReserveIrpAllocator->ReserveIrp ==
NULL)
595 ReserveIrpAllocator->ReserveIrpInUse = 0;
680 List->L.TotalAllocates++;
687 List->L.AllocateMisses++;
691 List->L.TotalAllocates++;
725 Flags &= ~IRP_QUOTA_CHARGED;
736 "%s - Allocated IRP %p with allocation flags %lx\n",
765 Sleep.QuadPart = -10 * 1000 * 10;
812 Irp->AssociatedIrp.SystemBuffer =
814 if (!
Irp->AssociatedIrp.SystemBuffer)
845 if (!
Irp->MdlAddress)
899 "%s - Built IRP %p with Major, Buffer, DO %lx %p %p\n",
959 Irp->AssociatedIrp.SystemBuffer =
963 if (!
Irp->AssociatedIrp.SystemBuffer)
1002 Irp->AssociatedIrp.SystemBuffer =
1006 if (!
Irp->AssociatedIrp.SystemBuffer)
1036 if (!
Irp->MdlAddress)
1086 "%s - Built IRP %p with IOCTL, Buffers, DO %lx %p %p %p\n",
1138 "%s - Canceling IRP %p\n",
1152 if (
Irp->CurrentLocation > (
Irp->StackCount + 1))
1181 ULONG Retries = 3000;
1191 "%s - Canceling IRPs for Thread %p\n",
1200 NextEntry = ListHead->
Flink;
1201 while (ListHead != NextEntry)
1210 NextEntry = NextEntry->
Flink;
1232 DPRINT1(
"Broken driver did not complete!\n");
1257#define IoCallDriver IofCallDriver
1262#undef IoCompleteRequest
1272#define IoCompleteRequest IofCompleteRequest
1303 Irp->CurrentLocation--;
1304 if (
Irp->CurrentLocation <= 0)
1312 Irp->Tail.Overlay.CurrentStackLocation = StackPtr;
1355 "%s - Completing IRP %p\n",
1360 if ((
Irp->CurrentLocation) > (
Irp->StackCount + 1))
1389 Irp->CurrentLocation++,
1390 Irp->Tail.Overlay.CurrentStackLocation++;
1391 Irp->CurrentLocation <= (
Irp->StackCount + 1);
1393 Irp->CurrentLocation++,
1394 Irp->Tail.Overlay.CurrentStackLocation++)
1425 if (
Irp->CurrentLocation == (
Irp->StackCount + 1))
1447 if ((
Irp->CurrentLocation <=
Irp->StackCount) &&
1448 (
Irp->PendingReturned))
1470 NextMdl =
Mdl->Next;
1492 Irp->Tail.Overlay.AuxiliaryBuffer =
NULL;
1502 if (
Irp->Tail.Overlay.AuxiliaryBuffer)
1506 Irp->Tail.Overlay.AuxiliaryBuffer =
NULL;
1517 *
Irp->UserIosb =
Irp->IoStatus;
1542 &
Irp->Tail.Overlay.Thread->Tcb,
1543 Irp->ApcEnvironment,
1544 IopCompletePageWrite,
1578 Irp->Tail.Overlay.AuxiliaryBuffer = (
PCHAR)DataBuffer;
1598 Irp->ApcEnvironment,
1619 Irp->ApcEnvironment,
1647 if (
Irp->PendingReturned)
1664 if (
Irp->CurrentLocation >
Irp->StackCount ||
Irp->CurrentLocation <= 1)
1704 "%s - Freeing IRPs %p\n",
1719 Irp->AllocationFlags &= ~IRP_LOOKASIDE_ALLOCATION;
1736 List->L.TotalFrees++;
1742 List->L.FreeMisses++;
1746 List->L.TotalFrees++;
1752 List->L.FreeMisses++;
1765 Irp->AllocationFlags &= ~IRP_QUOTA_CHARGED;
1817 if (
Irp->Tail.Overlay.Thread)
1821 return Irp->Tail.Overlay.Thread->ThreadsProcess;
1825 return (
PEPROCESS)
Irp->Tail.Overlay.Thread->Tcb.ApcState.Process;
1859 if (
Irp->Tail.Overlay.Thread)
1861 Process =
Irp->Tail.Overlay.Thread->ThreadsProcess;
1866 *pSessionId = (
ULONG)-1;
1892 "%s - Initializing IRP %p\n",
1930 if (SynchIO && !ForceAsync)
1962 "%s - Associating IRP %p\n",
1968 if (!AssocIrp)
return NULL;
1974 AssocIrp->Tail.Overlay.Thread =
Irp->Tail.Overlay.Thread;
1989 "%s - Queueing IRP %p\n",
2006 UCHAR AllocationFlags;
2008 "%s - Reusing IRP %p\n",
2017 AllocationFlags =
Irp->AllocationFlags;
2024 Irp->AllocationFlags = AllocationFlags;
2063 pThread =
Irp->Tail.Overlay.Thread;
2075 return pProcess->Wow64Process !=
NULL;
struct _IO_STACK_LOCATION * PIO_STACK_LOCATION
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define InterlockedIncrement
#define InterlockedExchange
#define InterlockedDecrement
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
PVOID MmHighestUserAddress
_In_ PFCB _In_ LONGLONG StartingOffset
#define NT_SUCCESS(StatCode)
#define UNIMPLEMENTED_DBGBREAK(...)
#define InterlockedExchangePointer(Target, Value)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
#define PsGetCurrentThread()
#define KeRaiseIrql(irql, oldIrql)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeLowerIrql(oldIrql)
#define KeSetEvent(pEvt, foo, foo2)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
#define KeDelayExecutionThread(mode, foo, t)
LONG NTAPI KeReadStateEvent(IN PKEVENT Event)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
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
VOID FASTCALL KeReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, IN KIRQL OldIrql)
KIRQL FASTCALL KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber)
#define KeGetCurrentThread
#define EXCEPTION_EXECUTE_HANDLER
FORCEINLINE VOID IopQueueIrpToThread(IN PIRP Irp)
static __inline VOID IopUpdateTransferCount(IN IOP_TRANSFER_TYPE Type, IN ULONG TransferCount)
static __inline VOID IopUnlockFileObject(IN PFILE_OBJECT FileObject)
FORCEINLINE VOID IopUnQueueIrpFromThread(IN PIRP Irp)
IoSetCancelRoutine(Irp, CancelRoutine)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
VOID NTAPI MmProbeAndLockPages(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode, IN LOCK_OPERATION Operation)
VOID NTAPI MmUnlockPages(IN PMDL Mdl)
#define ExFreePoolWithTag(_P, _T)
#define IO_METHOD_FROM_CTL_CODE(C)
_In_ NDIS_ERROR_CODE ErrorCode
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
VOID(NTAPI * PKNORMAL_ROUTINE)(IN PVOID NormalContext OPTIONAL, IN PVOID SystemArgument1 OPTIONAL, IN PVOID SystemArgument2 OPTIONAL)
enum _PP_NPAGED_LOOKASIDE_NUMBER PP_NPAGED_LOOKASIDE_NUMBER
#define METHOD_OUT_DIRECT
_In_ ULONG _In_ ULONG _In_ ULONG Length
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define IoCopyCurrentIrpStackLocationToNext(Irp)
#define IO_DRIVER_CANCEL_TIMEOUT
VOID NTAPI IopDoNameTransmogrify(IN PIRP Irp, IN PFILE_OBJECT FileObject, IN PREPARSE_DATA_BUFFER DataBuffer)
#define IOTRACE(x, fmt,...)
#define IsIrpSynchronous(Irp, FileObject)
VOID NTAPI ExReturnPoolQuota(IN PVOID P)
ULONG NTAPI MmGetSessionId(IN PEPROCESS Process)
VOID NTAPI IoWriteErrorLogEntry(IN PVOID ElEntry)
PVOID NTAPI IoAllocateErrorLogEntry(IN PVOID IoObject, IN UCHAR EntrySize)
NTSTATUS FASTCALL IofCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID NTAPI IoCancelThreadIo(IN PETHREAD Thread)
VOID NTAPI IoInitializeIrp(IN PIRP Irp, IN USHORT PacketSize, IN CCHAR StackSize)
VOID NTAPI IoQueueThreadIrp(IN PIRP Irp)
VOID FASTCALL IofCompleteRequest(IN PIRP Irp, IN CCHAR PriorityBoost)
ULONG NTAPI IoGetRequestorProcessId(IN PIRP Irp)
PIRP NTAPI IoBuildSynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
VOID NTAPI IopAbortIrpKernelApc(IN PKAPC Apc)
VOID NTAPI IoEnqueueIrp(IN PIRP Irp)
#define IoCompleteRequest
VOID NTAPI IopCompleteRequest(IN PKAPC Apc, IN PKNORMAL_ROUTINE *NormalRoutine, IN PVOID *NormalContext, IN PVOID *SystemArgument1, IN PVOID *SystemArgument2)
BOOLEAN NTAPI IopInitializeReserveIrp(IN PRESERVE_IRP_ALLOCATOR ReserveIrpAllocator)
FORCEINLINE VOID IopClearStackLocation(IN PIO_STACK_LOCATION IoStackLocation)
VOID NTAPI IopFreeIrpKernelApc(IN PKAPC Apc, IN PKNORMAL_ROUTINE *NormalRoutine, IN PVOID *NormalContext, IN PVOID *SystemArgument1, IN PVOID *SystemArgument2)
NTSTATUS NTAPI IopCleanupFailedIrp(IN PFILE_OBJECT FileObject, IN PKEVENT EventObject OPTIONAL, IN PVOID Buffer OPTIONAL)
BOOLEAN NTAPI IoIsOperationSynchronous(IN PIRP Irp)
BOOLEAN NTAPI IoIsValidNameGraftingBuffer(IN PIRP Irp, IN PREPARSE_DATA_BUFFER ReparseBuffer)
PIRP NTAPI IopAllocateReserveIrp(IN CCHAR StackSize)
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
VOID NTAPI IopDisassociateThreadIrp(VOID)
PIRP NTAPI IoBuildAsynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PIO_STATUS_BLOCK IoStatusBlock)
PEPROCESS NTAPI IoGetRequestorProcess(IN PIRP Irp)
VOID NTAPI IopAbortInterruptedIrp(IN PKEVENT EventObject, IN PIRP Irp)
PIRP NTAPI IopAllocateIrpMustSucceed(IN CCHAR StackSize)
static VOID IopWriteAsyncUserIosb(PIRP Irp)
VOID NTAPI IoReuseIrp(IN OUT PIRP Irp, IN NTSTATUS Status)
NTSTATUS NTAPI IopSynchronousCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
BOOLEAN NTAPI IoCancelIrp(IN PIRP Irp)
PIRP NTAPI IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN InternalDeviceIoControl, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
PIRP NTAPI IoGetTopLevelIrp(VOID)
VOID IopFreeReserveIrp(IN CCHAR PriorityBoost)
IO_PAGING_PRIORITY FASTCALL IoGetPagingIoPriority(IN PIRP Irp)
BOOLEAN NTAPI IoForwardIrpSynchronously(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID NTAPI IoSetTopLevelIrp(IN PIRP Irp)
VOID NTAPI IoFreeIrp(IN PIRP Irp)
VOID NTAPI IopCleanupIrp(IN PIRP Irp, IN PFILE_OBJECT FileObject)
PIRP NTAPI IoMakeAssociatedIrp(IN PIRP Irp, IN CCHAR StackSize)
NTSTATUS NTAPI IoGetRequestorSessionId(IN PIRP Irp, OUT PULONG pSessionId)
RESERVE_IRP_ALLOCATOR IopReserveIrpAllocator
VOID NTAPI IoReleaseCancelSpinLock(IN KIRQL Irql)
VOID NTAPI IoAcquireCancelSpinLock(OUT PKIRQL Irql)
BOOLEAN NTAPI KeInsertQueueApc(IN PKAPC Apc, IN PVOID SystemArgument1, IN PVOID SystemArgument2, IN KPRIORITY PriorityBoost)
VOID NTAPI KeInitializeApc(IN PKAPC Apc, IN PKTHREAD Thread, IN KAPC_ENVIRONMENT TargetEnvironment, IN PKKERNEL_ROUTINE KernelRoutine, IN PKRUNDOWN_ROUTINE RundownRoutine OPTIONAL, IN PKNORMAL_ROUTINE NormalRoutine, IN KPROCESSOR_MODE Mode, IN PVOID Context)
LONG NTAPI KeInsertQueue(IN PKQUEUE Queue, IN PLIST_ENTRY Entry)
#define STATUS_IO_REPARSE_TAG_NOT_HANDLED
VOID NTAPI ObDereferenceObjectDeferDelete(IN PVOID Object)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
#define IRP_MJ_DEVICE_CONTROL
#define STATUS_MORE_PROCESSING_REQUIRED
struct _REPARSE_DATA_BUFFER * PREPARSE_DATA_BUFFER
PULONG MinorVersion OPTIONAL
struct _IO_STACK_LOCATION::@4477::@4516 Others
PDEVICE_OBJECT DeviceObject
union _IO_STACK_LOCATION::@1709 Parameters
struct _IO_STACK_LOCATION::@4477::@4481 Read
PIO_COMPLETION_ROUTINE CompletionRoutine
struct _IO_STACK_LOCATION::@4477::@4482 Write
struct _IO_STACK_LOCATION::@1709::@1710 DeviceIoControl
union _IRP::@1711 AssociatedIrp
PP_LOOKASIDE_LIST PPLookasideList[16]
struct _LIST_ENTRY * Flink
struct _GENERAL_LOOKASIDE * P
struct _GENERAL_LOOKASIDE * L
volatile LONG ReserveIrpInUse
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_UNSUCCESSFUL
#define STATUS_VERIFY_REQUIRED
#define STATUS_INSUFFICIENT_RESOURCES
_In_ PIO_STACK_LOCATION IoStackLocation
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
_In_ WDFDPC _In_ BOOLEAN Wait
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
_In_ WDFREQUEST _In_ size_t OutputBufferLength
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
_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_ WDFREQUEST _In_ NTSTATUS _In_ CCHAR PriorityBoost
_Must_inspect_result_ _In_ WDFCMRESLIST List
_Must_inspect_result_ _In_ ULONG Flags
FORCEINLINE USHORT ExQueryDepthSList(_In_ PSLIST_HEADER SListHead)
#define ExAllocatePoolWithQuotaTag(a, b, c)
struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST * PNPAGED_LOOKASIDE_LIST
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
_In_opt_ PDRIVER_CANCEL CancelRoutine
#define IoSizeOfIrp(_StackSize)
_Must_inspect_result_ __drv_aliasesMem _In_ PDEVICE_OBJECT _In_opt_ PVOID _In_ ULONG _Out_opt_ PVOID _In_ ULONG _In_ BOOLEAN InternalDeviceIoControl
_Must_inspect_result_ _In_ BOOLEAN ChargeQuota
#define SL_PENDING_RETURNED
#define IRP_CLASS_CACHE_OPERATION
enum _IO_PAGING_PRIORITY IO_PAGING_PRIORITY
#define IRP_DEALLOCATE_BUFFER
#define IRP_CLOSE_OPERATION
#define IRP_SYNCHRONOUS_API
#define IRP_QUOTA_CHARGED
#define SL_ERROR_RETURNED
#define IRP_INPUT_OPERATION
#define IRP_OB_QUERY_NAME
@ IoPagingPriorityInvalid
#define IRP_WRITE_OPERATION
#define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
DRIVER_CANCEL * PDRIVER_CANCEL
#define SL_INVOKE_ON_ERROR
#define IRP_CREATE_OPERATION
#define IRP_DEFER_IO_COMPLETION
#define IRP_ASSOCIATED_IRP
#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE
#define SL_INVOKE_ON_CANCEL
#define IRP_MJ_FLUSH_BUFFERS
#define IRP_READ_OPERATION
#define IRP_LOOKASIDE_ALLOCATION
#define IRP_MJ_INTERNAL_DEVICE_CONTROL
#define IRP_ALLOCATED_FIXED_SIZE
#define IO_REPARSE_TAG_MOUNT_POINT
#define FO_SYNCHRONOUS_IO
#define IRP_SYNCHRONOUS_PAGING_IO
#define SL_INVOKE_ON_SUCCESS
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
@ LockQueueIoCompletionLock
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
#define ObDereferenceObject
#define InterlockedPushEntrySList(SListHead, SListEntry)
#define InterlockedPopEntrySList(SListHead)