typedef struct _DEVICE_NODE
{
    DEVICE_NODE *Sibling;
    DEVICE_NODE *Child;
    DEVICE_NODE *Parent;
    DEVICE_NODE *LastChild;
    DEVICE_OBJECT *PhysicalDeviceObject;
    UNICODE_STRING InstancePath;
    UNICODE_STRING ServiceName;
    IRP *PendingIrp;
    unsigned long Level;
    PO_DEVICE_NOTIFY Notify;
    PO_IRP_MANAGER PoIrpManager;
    PNP_DEVNODE_STATE State;
    PNP_DEVNODE_STATE PreviousState;
    PNP_DEVNODE_STATE StateHistory[20];
    unsigned long StateHistoryEntry;
    long CompletionStatus;
    unsigned long Flags;
    unsigned long UserFlags;
    unsigned long Problem;
    CM_RESOURCE_LIST *ResourceList;
    CM_RESOURCE_LIST *ResourceListTranslated;
    DEVICE_OBJECT *DuplicatePDO;
    IO_RESOURCE_REQUIREMENTS_LIST *ResourceRequirements;
    INTERFACE_TYPE InterfaceType;
    unsigned long BusNumber;
    INTERFACE_TYPE ChildInterfaceType;
    unsigned long ChildBusNumber;
    unsigned short ChildBusTypeIndex;
    unsigned char RemovalPolicy;
    unsigned char HardwareRemovalPolicy;
    LIST_ENTRY TargetDeviceNotify;
    LIST_ENTRY DeviceArbiterList;
    LIST_ENTRY DeviceTranslatorList;
    unsigned short NoTranslatorMask;
    unsigned short QueryTranslatorMask;
    unsigned short NoArbiterMask;
    unsigned short QueryArbiterMask;
    union
    {
        DEVICE_NODE *LegacyDeviceNode;
        DEVICE_RELATIONS *PendingDeviceRelations;
        void *Information;
    } OverUsed1;
    union
    {
        DEVICE_NODE *NextResourceDeviceNode;
    } OverUsed2;
    CM_RESOURCE_LIST *BootResources;
    CM_RESOURCE_LIST *BootResourcesTranslated;
    unsigned long CapabilityFlags;
    struct
    {
        PROFILE_STATUS DockStatus;
        LIST_ENTRY ListEntry;
        unsigned short *SerialNumber;
    } DockInfo;
    unsigned long DisableableDepends;
    LIST_ENTRY PendedSetInterfaceState;
    LIST_ENTRY LegacyBusListEntry;
    unsigned long DriverUnloadRetryCount;
    DEVICE_NODE *PreviousParent;
    unsigned long DeletedChildren;
    unsigned long NumaNodeIndex;
    GUID ContainerID;
    unsigned char OverrideFlags;
    unsigned char RequiresUnloadedDriver;
    PENDING_RELATIONS_LIST_ENTRY *PendingEjectRelations;
} DEVICE_NODE, *PDEVICE_NODE;