Поделиться через


структура IO_RESOURCE_DESCRIPTOR (wdm.h)

Структура IO_RESOURCE_DESCRIPTOR описывает диапазон необработанных аппаратных ресурсов одного типа, который может использоваться устройством. Массив структур IO_RESOURCE_DESCRIPTOR содержится в каждой IO_RESOURCE_LIST структуре.

Синтаксис

typedef struct _IO_RESOURCE_DESCRIPTOR {
  UCHAR  Option;
  UCHAR  Type;
  UCHAR  ShareDisposition;
  UCHAR  Spare1;
  USHORT Flags;
  USHORT Spare2;
  union {
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Port;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory;
    struct {
      ULONG             MinimumVector;
      ULONG             MaximumVector;
#if ...
      IRQ_DEVICE_POLICY AffinityPolicy;
      USHORT            Group;
#else
      IRQ_DEVICE_POLICY AffinityPolicy;
#endif
      IRQ_PRIORITY      PriorityPolicy;
      KAFFINITY         TargetedProcessors;
    } Interrupt;
    struct {
      ULONG MinimumChannel;
      ULONG MaximumChannel;
    } Dma;
    struct {
      ULONG RequestLine;
      ULONG Reserved;
      ULONG Channel;
      ULONG TransferWidth;
    } DmaV3;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Generic;
    struct {
      ULONG Data[3];
    } DevicePrivate;
    struct {
      ULONG Length;
      ULONG MinBusNumber;
      ULONG MaxBusNumber;
      ULONG Reserved;
    } BusNumber;
    struct {
      ULONG Priority;
      ULONG Reserved1;
      ULONG Reserved2;
    } ConfigData;
    struct {
      ULONG            Length40;
      ULONG            Alignment40;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory40;
    struct {
      ULONG            Length48;
      ULONG            Alignment48;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory48;
    struct {
      ULONG            Length64;
      ULONG            Alignment64;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory64;
    struct {
      UCHAR Class;
      UCHAR Type;
      UCHAR Reserved1;
      UCHAR Reserved2;
      ULONG IdLowPart;
      ULONG IdHighPart;
    } Connection;
  } u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;

Члены

Option

Указывает, является ли это описание ресурса обязательным, предпочтительным или альтернативным. Необходимо использовать одно из следующих значений:

Ценность Значение
0 Указанный диапазон ресурсов является обязательным, если не указаны альтернативные диапазоны.
IO_RESOURCE_PREFERRED Указанный диапазон ресурсов предпочтителен для любых альтернативных диапазонов.
IO_RESOURCE_ALTERNATIVE Указанный диапазон ресурсов является альтернативой заданному диапазону, приведенному выше. Например, если одна структура IO_RESOURCE_DESCRIPTOR указывает IRQ 5, с IO_RESOURCE_PREFERRED набором, а следующая структура задает IRQ 3 с IO_RESOURCE_ALTERNATIVE набором, диспетчер PnP назначает IRQ 3 устройству только в том случае, если IRQ 5 недоступен. Для каждого ресурса можно указать несколько альтернативных вариантов. Можно задать как IO_RESOURCE_ALTERNATIVE, так и IO_RESOURCE_PREFERRED, указывая предпочтительную альтернативу.
IO_RESOURCE_DEFAULT Не используется.

Type

Определяет тип ресурса. Список допустимых значений см. в элементе типа структуры CM_PARTIAL_RESOURCE_DESCRIPTOR.

ShareDisposition

Указывает, можно ли предоставлять общий доступ к описанному ресурсу. Список допустимых значений см. в разделе ShareDisposition члена структуры CM_PARTIAL_RESOURCE_DESCRIPTOR.

Spare1

Не используется.

Flags

Содержит битовые флаги, относящиеся к типу ресурса. В следующей таблице показаны флаги, допустимые, если Type = CmResourceTypeInterrupt:

Ценность Значение
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE Строка IRQ активируется на уровне. (Обычно эти IRQ являются шарабельными.)
CM_RESOURCE_INTERRUPT_LATCHED Строка IRQ активируется по краю.
CM_RESOURCE_INTERRUPT_MESSAGE Если этот флаг задан, прерывание представляет собой сигнальное сообщение прерывание. В противном случае прерывание — это прерывание на основе строк.
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED Если этот флаг задан, член u.Interrupt содержит данные, описывающие политику прерывания устройства.
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT Прерывание может проснуть операционную систему из состояния простоя с низкой мощностью или состояния сна системы. Этот флаг можно задать начиная с Windows 8. Дополнительные сведения о возможностях пробуждения см. в разделе Включениепробуждения устройства.
CM_RESOURCE_INTERRUPT_WAKE_HINT Прерывание может проснуть операционную систему из состояния простоя с низкой мощностью или состояния сна системы. Этот флаг можно задать начиная с Windows 8. Дополнительные сведения о возможностях пробуждения см. в разделе Включениепробуждения устройства.

Список допустимых флагов для других типов ресурсов см. в описании элемента Flags структуры CM_PARTIAL_RESOURCE_DESCRIPTOR.

Spare2

Не используется.

u

Определяет объединение u.

u.Port

Задает диапазон адресов портов ввода-вывода, используя следующие члены.

Драйверы должны использовать RtlIoDecodeMemIoResource и RtlIoEncodeMemIoResource для чтения и обновления этого элемента, а не непосредственного обновления этого элемента.

u.Port.Length

Длина (в байтах) диапазона назначенных адресов портов ввода-вывода.

u.Port.Alignment

Выравнивание в байтах, к которому должен соответствовать назначенный начальный адрес. Назначенный начальный адрес должен быть целым числом выравнивания.

u.Port.MinimumAddress

Минимальный адрес порта ввода-вывода относительно шины, который можно назначить устройству.

u.Port.MaximumAddress

Максимальный адрес порта ввода-вывода относительно шины, который можно назначить устройству.

u.Memory

Задает диапазон адресов памяти, используя следующие элементы:

Драйверы для Windows Vista и более поздних версий операционной системы Windows должны использовать RtlIoDecodeMemIoResource и RtlIoEncodeMemIoResource для чтения и обновления этого элемента, а не непосредственного обновления этого элемента.

u.Memory.Length

Длина (в байтах) диапазона назначенных адресов памяти.

u.Memory.Alignment

Выравнивание в байтах, к которому должен соответствовать назначенный начальный адрес. Назначенный начальный адрес должен быть целым числом выравнивания.

u.Memory.MinimumAddress

Минимальный адрес памяти относительно шины, который можно назначить устройству.

u.Memory.MaximumAddress

Максимальный адрес относительной шины памяти, который можно назначить устройству.

u.Interrupt

Задает диапазон векторов прерываний, используя следующие элементы:

u.Interrupt.MinimumVector

Минимальный вектор относительно шины, который можно назначить устройству.

u.Interrupt.MaximumVector

Максимальный вектор относительно шины, который можно назначить устройству.

Если задан бит флага CM_RESOURCE_INTERRUPT_MESSAGE, значения MinimumVector и maximumVector имеют особые значения. Дополнительные сведения см. в разделе Использование дескрипторов ресурсов прерываний.

Система предоставляет следующие дополнительные члены в Windows Vista и более поздних версиях операционной системы Windows:

u.Interrupt.AffinityPolicy

Указывает значение IRQ_DEVICE_POLICY, указывающее, как система должна распределять прерывания устройства между процессорами.

Указывает значение IRQ_DEVICE_POLICY, указывающее, как система должна распределять прерывания устройства между процессорами.

u.Interrupt.Group

Указывает номер группы обработчика. группа является допустимым, но необязательным членом u.Interrupt только в Windows 7 и более поздних версиях Windows. Этот элемент существует только в том случае, если NT_PROCESSOR_GROUPS определен во время компиляции. Если существует член группы , группы и targetedProcessors вместе указывают сходство групп, определяющее набор процессоров, которые должны обрабатывать прерывания устройства. Чтобы указать сходство для определенной группы, задайте AffinityPolicy значение IrqPolicySpecifiedProcessors и задайте группы соответствующее число группы. Кроме того, TargetedProcessors должны указывать целевые процессоры в группе. Если AffinityPolicy значение, отличное от IrqPolicySpecifiedProcessors, задайте для группы значение ALL_PROCESSOR_GROUPS, чтобы указать, что драйвер учитывает группу (т. е. предназначен для обработки сведений о группах обработчиков). Драйвер не может указать целевые процессоры, если группы равно ALL_PROCESSOR_GROUPS; такие целевые спецификации игнорируются.

u.Interrupt.PriorityPolicy

Указывает значение IRQ_PRIORITY, указывающее приоритет, с которым система должна отправлять прерывания устройства.

u.Interrupt.TargetedProcessors

Указывает значениеKAFFINITY, указывающее, какие процессоры должны обрабатывать прерывания устройства. Это значение используется, только если AffinityPolicyIrqPolicySpecifiedProcessors.

u.Dma

Задает параметр DMA, используя один из следующих элементов:

u.Dma.MinimumChannel

Минимальный канал DMA относительно шины, который можно назначить устройству.

u.Dma.MaximumChannel

Максимальный канал DMA относительно шины, который можно назначить устройству.

u.DmaV3

Задает параметры DMA для драйвера, использующего версию 3 структуры DMA_OPERATIONS.

Элемент u.DmaV3 доступен начиная с Windows 8.

u.DmaV3.RequestLine

Число строк запроса на системном контроллере DMA, выделенном для устройства.

u.DmaV3.Reserved

Не используется.

u.DmaV3.Channel

Число каналов DMA на системном контроллере DMA, выделенном для устройства.

u.DmaV3.TransferWidth

Задает ширину в битах шины данных, выделенной для устройства контроллером DMA системы, который используется для передачи данных на устройство или с устройства.

u.Generic

Не используется.

u.Generic.Length

Не используется.

u.Generic.Alignment

Не используется.

u.Generic.MinimumAddress

Не используется.

u.Generic.MaximumAddress

Не используется.

u.DevicePrivate

Зарезервировано для использования системы.

u.DevicePrivate.Data[3]

Зарезервировано для использования системы.

u.BusNumber

Задает номера шины, используя следующие элементы:

u.BusNumber.Length

Необходимое количество номеров шины.

u.BusNumber.MinBusNumber

Минимальный номер шины относительной шины, который можно назначить устройству.

u.BusNumber.MaxBusNumber

Максимальное число шины относительной шины, которое можно назначить устройству.

u.BusNumber.Reserved

Не используется.

u.ConfigData

Зарезервировано для использования системы.

u.ConfigData.Priority

Определяет элемент ULONGПриоритет.

u.ConfigData.Reserved1

Не используется.

u.ConfigData.Reserved2

Не используется.

u.Memory40

Задает диапазон адресов памяти, используя следующие члены.

Элемент u.Memory40 доступен только в Windows Vista и более поздних версиях операционной системы Windows. Драйверы для этих версий Windows должны использовать RtlIoDecodeMemIoResource и RtlIoEncodeMemIoResource для чтения и обновления этого элемента, а не напрямую.

u.Memory40.Length40

Высокая 32-разрядная длина 40-разрядной длины в байтах диапазона назначенных адресов памяти. Более низкие 8 битов рассматриваются как ноль.

u.Memory40.Alignment40

Высокие 32 бита 40-разрядного выравнивания в байтах, к которым должен соответствовать назначенный начальный адрес. Более низкие 8 битов рассматриваются как ноль. Назначенный начальный адрес будет нескольким из выравнивания.

u.Memory40.MinimumAddress

Минимальный адрес памяти относительно шины, который можно назначить устройству.

u.Memory40.MaximumAddress

Максимальный адрес относительной шины памяти, который можно назначить устройству.

u.Memory48

Задает диапазон адресов памяти, используя следующие члены.

Элемент u.Memory48 доступен только в Windows Vista и более поздних версиях операционной системы Windows. Драйверы для этих версий Windows должны использовать RtlIoDecodeMemIoResource и RtlIoEncodeMemIoResource для чтения и обновления этого элемента, а не напрямую.

u.Memory48.Length48

Высокая 32-разрядная длина 48-разрядной длины в байтах диапазона назначенных адресов памяти. Ниже 16 битов рассматриваются как ноль.

u.Memory48.Alignment48

Высокий 32-разрядный диапазон 48-разрядного выравнивания в байтах, к которому должен соответствовать назначенный начальный адрес. Ниже 16 битов рассматриваются как ноль. Назначенный начальный адрес будет нескольким из выравнивания.

u.Memory48.MinimumAddress

Минимальный адрес памяти относительно шины, который можно назначить устройству.

u.Memory48.MaximumAddress

Максимальный адрес относительной шины памяти, который можно назначить устройству.

u.Memory64

Задает диапазон адресов памяти, используя следующие члены.

Элемент u.Memory64 доступен только в Windows Vista и более поздних версиях операционной системы Windows. Драйверы для Windows Vista и более поздних версий операционной системы Windows должны использовать RtlIoDecodeMemIoResource и RtlIoEncodeMemIoResource для чтения и обновления этого элемента, а не непосредственного обновления этого элемента.

u.Memory64.Length64

Высокая 32-разрядная длина 64-разрядной длины в байтах диапазона назначенных адресов памяти. Более низкие 32 бита обрабатываются как ноль.

u.Memory64.Alignment64

Высокий 32-разрядный диапазон 64-разрядного выравнивания в байтах, к которому должен соответствовать назначенный начальный адрес. Более низкие 32 бита обрабатываются как ноль. Назначенный начальный адрес будет нескольким из выравнивания.

u.Memory64.MinimumAddress

Минимальный адрес памяти относительно шины, который можно назначить устройству.

u.Memory64.MaximumAddress

Максимальный адрес относительной шины памяти, который можно назначить устройству.

u.Connection

Указывает подключение к последовательной шине или последовательным портомили набору одного или нескольких контактов ввода-вывода общего назначения (GPIO).

Элемент u.Connection доступен начиная с Windows 8.

Следующие члены описывают это подключение.

u.Connection.Class

Класс подключения. Этот элемент имеет одно из следующих значений:

Ценность Значение
CM_RESOURCE_CONNECTION_CLASS_GPIO Доступ к устройству с помощью одного или нескольких закреплений на контроллере GPIO.
CM_RESOURCE_CONNECTION_CLASS_SERIAL Доступ к устройству через последовательную шину или последовательный порт.

u.Connection.Type

Тип подключения. Если класс = CM_RESOURCE_CONNECTION_CLASS_GPIO, type имеет следующее значение:

Ценность Значение
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO Доступ к устройству через пин-коды GPIO, настроенные для ввода-вывода.

Пин-код GPIO, настроенный в качестве входных данных запроса прерывания, осуществляется как обычный ресурс прерывания (CmResourceTypeInterrupt).

Если класса = CM_RESOURCE_CONNECTION_CLASS_SERIAL, type имеет одно из следующих значений:

Ценность Значение
CM_RESOURCE_CONNECTION_TYPE_SERIAL_I2C Устройство подключено к шине I2C.
CM_RESOURCE_CONNECTION_TYPE_SERIAL_SPI Устройство подключено к шине SPI.
CM_RESOURCE_CONNECTION_TYPE_SERIAL_UART Устройство подключено к последовательному порту.

u.Connection.Reserved1

Не используется.

u.Connection.Reserved2

Не используется.

u.Connection.IdLowPart

Ниже 32 бита 64-разрядного идентификатора подключения.

u.Connection.IdHighPart

Верхние 32 бита 64-разрядного идентификатора подключения.

Требования

Требование Ценность
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)

См. также

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt