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