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


структура IO_RESOURCE_DESCRIPTOR (miniport.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 Прерывание является вторичным. Дополнительные сведения о дополнительных прерываниях см. в разделе Прерывания GPIO.
CM_RESOURCE_INTERRUPT_WAKE_HINT Прерывание может вынудить операционную систему из состояния простоя с низким энергопотреблением или в спящем режиме системы. Дополнительные сведения о возможностях пробуждения см. в разделе Включение пробуждения устройства.

Список допустимых флагов для других типов ресурсов см. в описании элемента 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

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

Драйверы должны использовать 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 имеют особое значение. Дополнительные сведения см. в разделе Использование дескрипторов ресурсов прерывания.

u.Interrupt.AffinityPolicy

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

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

u.Interrupt.Group

Указывает номер группы процессоров. Группа является допустимым (но необязательным) членом u.Interrupt. Этот элемент существует только в том случае, если 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

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

u.ConfigData.Reserved1

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

u.ConfigData.Reserved2

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

u.Memory40

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

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

u.Memory40.Length40

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

u.Memory40.Alignment40

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

u.Memory40.MinimumAddress

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

u.Memory40.MaximumAddress

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

u.Memory48

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

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

u.Memory48.Length48

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

u.Memory48.Alignment48

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

u.Memory48.MinimumAddress

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

u.Memory48.MaximumAddress

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

u.Memory64

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

Драйверы должны использовать 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-разрядного идентификатора подключения.

Требования

Требование Значение
Заголовок miniport.h (включая Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)

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

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt