typedef struct _IO_RESOURCE_DESCRIPTOR
{
    unsigned char Option;
    unsigned char Type;
    unsigned char ShareDisposition;
    unsigned char Spare1;
    unsigned short Flags;
    unsigned short Spare2;
    union
    {
        struct
        {
            unsigned long Length;
            unsigned long Alignment;
            LARGE_INTEGER MinimumAddress;
            LARGE_INTEGER MaximumAddress;
        } Port;
        struct
        {
            unsigned long Length;
            unsigned long Alignment;
            LARGE_INTEGER MinimumAddress;
            LARGE_INTEGER MaximumAddress;
        } Memory;
        struct
        {
            unsigned long MinimumVector;
            unsigned long MaximumVector;
            unsigned short AffinityPolicy;
            unsigned short Group;
            IRQ_PRIORITY PriorityPolicy;
            unsigned __int64 TargetedProcessors;
        } Interrupt;
        struct
        {
            unsigned long MinimumChannel;
            unsigned long MaximumChannel;
        } Dma;
        struct
        {
            unsigned long Length;
            unsigned long Alignment;
            LARGE_INTEGER MinimumAddress;
            LARGE_INTEGER MaximumAddress;
        } Generic;
        struct
        {
            unsigned long Data[3];
        } DevicePrivate;
        struct
        {
            unsigned long Length;
            unsigned long MinBusNumber;
            unsigned long MaxBusNumber;
            unsigned long Reserved;
        } BusNumber;
        struct
        {
            unsigned long Priority;
            unsigned long Reserved1;
            unsigned long Reserved2;
        } ConfigData;
        struct
        {
            unsigned long Length40;
            unsigned long Alignment40;
            LARGE_INTEGER MinimumAddress;
            LARGE_INTEGER MaximumAddress;
        } Memory40;
        struct
        {
            unsigned long Length48;
            unsigned long Alignment48;
            LARGE_INTEGER MinimumAddress;
            LARGE_INTEGER MaximumAddress;
        } Memory48;
        struct
        {
            unsigned long Length64;
            unsigned long Alignment64;
            LARGE_INTEGER MinimumAddress;
            LARGE_INTEGER MaximumAddress;
        } Memory64;
    } u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;