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


структура 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

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

ShareDisposition

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

Spare1

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

Flags

Содержит битовые флаги, относящиеся к типу ресурса. В следующей таблице показаны флаги, допустимые при типе = 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 определен во время компиляции. Если член группы существует, то участники Group и TargetedProcessors вместе задают сходство групп, которое определяет набор процессоров, которые должны обрабатывать прерывания устройства. Чтобы указать сходство для определенной группы, задайте для параметра AffinityPolicy значение IrqPolicySpecifiedProcessors , а для параметра Group — соответствующий номер группы. Кроме того, targetedProcessors должны указывать целевые процессоры в группе. Если для Параметра AffinityPolicy задано значение, отличное от IrqPolicySpecifiedProcessors, задайте для параметра Group значение ALL_PROCESSOR_GROUPS, чтобы указать, что драйвер поддерживает группу (то есть предназначен для обработки сведений о группах процессоров). Драйвер не может указать целевые процессоры, если группа равна ALL_PROCESSOR_GROUPS; такие целевые спецификации игнорируются.

u.Interrupt.PriorityPolicy

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

u.Interrupt.TargetedProcessors

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

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

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

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

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

Если Class = 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 (включает Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)

См. также раздел

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt