typedef struct _DEVICE_OBJECT
{
    short Type;
    unsigned short Size;
    long ReferenceCount;
    DRIVER_OBJECT *DriverObject;
    DEVICE_OBJECT *NextDevice;
    DEVICE_OBJECT *AttachedDevice;
    IRP *CurrentIrp;
    IO_TIMER *Timer;
    unsigned long Flags;
    unsigned long Characteristics;
    VPB *Vpb;
    void *DeviceExtension;
    unsigned long DeviceType;
    char StackSize;
    union
    {
        LIST_ENTRY ListEntry;
        WAIT_CONTEXT_BLOCK Wcb;
    } Queue;
    unsigned long AlignmentRequirement;
    KDEVICE_QUEUE DeviceQueue;
    KDPC Dpc;
    unsigned long ActiveThreadCount;
    void *SecurityDescriptor;
    KEVENT DeviceLock;
    unsigned short SectorSize;
    unsigned short Spare1;
    DEVOBJ_EXTENSION *DeviceObjectExtension;
    void *Reserved;
} DEVICE_OBJECT, *PDEVICE_OBJECT;