struct _IRP
{
SHORT Type;
USHORT Size;
struct _MDL* MdlAddress;
ULONG Flags;
union
{
struct _IRP* MasterIrp;
LONG IrpCount;
VOID* SystemBuffer;
} AssociatedIrp;
struct _LIST_ENTRY ThreadListEntry;
struct _IO_STATUS_BLOCK IoStatus;
CHAR RequestorMode;
UCHAR PendingReturned;
CHAR StackCount;
CHAR CurrentLocation;
UCHAR Cancel;
UCHAR CancelIrql;
CHAR ApcEnvironment;
UCHAR AllocationFlags;
union
{
struct _IO_STATUS_BLOCK* UserIosb;
VOID* IoRingContext;
};
struct _KEVENT* UserEvent;
union
{
struct
{
union
{
VOID (*UserApcRoutine)(
VOID* arg1,
struct _IO_STATUS_BLOCK* arg2,
ULONG arg3);
VOID* IssuingProcess;
};
union
{
VOID* UserApcContext;
struct _IORING_OBJECT* IoRing;
};
} AsynchronousParameters;
union _LARGE_INTEGER AllocationSize;
} Overlay;
VOID (*CancelRoutine)(
struct _DEVICE_OBJECT* arg1,
struct _IRP* arg2);
VOID* UserBuffer;
union
{
struct
{
union
{
struct _KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
VOID* DriverContext[
4];
};
struct _ETHREAD* Thread;
CHAR* AuxiliaryBuffer;
struct _LIST_ENTRY ListEntry;
union
{
struct _IO_STACK_LOCATION* CurrentStackLocation;
ULONG PacketType;
};
struct _FILE_OBJECT* OriginalFileObject;
} Overlay;
struct _KAPC Apc;
VOID* CompletionKey;
} Tail;
};