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