typedef struct _IRP { short Type; unsigned short Size; MDL *MdlAddress; unsigned long Flags; union { IRP *MasterIrp; long IrpCount; void *SystemBuffer; } AssociatedIrp; LIST_ENTRY ThreadListEntry; IO_STATUS_BLOCK IoStatus; char RequestorMode; unsigned char PendingReturned; char StackCount; char CurrentLocation; unsigned char Cancel; unsigned char CancelIrql; char ApcEnvironment; unsigned char AllocationFlags; IO_STATUS_BLOCK *UserIosb; KEVENT *UserEvent; union { struct { union { void (*UserApcRoutine)(void *, IO_STATUS_BLOCK *, unsigned long); void *IssuingProcess; }; void *UserApcContext; } AsynchronousParameters; LARGE_INTEGER AllocationSize; } Overlay; void (*CancelRoutine)(DEVICE_OBJECT *, IRP *); void *UserBuffer; union { struct { union { KDEVICE_QUEUE_ENTRY DeviceQueueEntry; void *DriverContext[4]; }; ETHREAD *Thread; char *AuxiliaryBuffer; LIST_ENTRY ListEntry; union { IO_STACK_LOCATION *CurrentStackLocation; unsigned long PacketType; }; FILE_OBJECT *OriginalFileObject; } Overlay; KAPC Apc; void *CompletionKey; } Tail; } IRP, *PIRP;