структура CM_PARTIAL_RESOURCE_DESCRIPTOR (wdm.h)
Структура CM_PARTIAL_RESOURCE_DESCRIPTOR указывает один или несколько системных аппаратных ресурсов одного типа, назначенного устройству. Эта структура используется для создания массива в CM_PARTIAL_RESOURCE_LIST структуре.
Синтаксис
typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
UCHAR Type;
UCHAR ShareDisposition;
USHORT Flags;
union {
struct {
PHYSICAL_ADDRESS Start;
ULONG Length;
} Generic;
struct {
PHYSICAL_ADDRESS Start;
ULONG Length;
} Port;
struct {
#if ...
USHORT Level;
USHORT Group;
#else
ULONG Level;
#endif
ULONG Vector;
KAFFINITY Affinity;
} Interrupt;
struct {
union {
struct {
USHORT Group;
USHORT Reserved;
USHORT MessageCount;
ULONG Vector;
KAFFINITY Affinity;
} Raw;
struct {
#if ...
USHORT Level;
USHORT Group;
#else
ULONG Level;
#endif
ULONG Vector;
KAFFINITY Affinity;
} Translated;
} DUMMYUNIONNAME;
} MessageInterrupt;
struct {
PHYSICAL_ADDRESS Start;
ULONG Length;
} Memory;
struct {
ULONG Channel;
ULONG Port;
ULONG Reserved1;
} Dma;
struct {
ULONG Channel;
ULONG RequestLine;
UCHAR TransferWidth;
UCHAR Reserved1;
UCHAR Reserved2;
UCHAR Reserved3;
} DmaV3;
struct {
ULONG Data[3];
} DevicePrivate;
struct {
ULONG Start;
ULONG Length;
ULONG Reserved;
} BusNumber;
struct {
ULONG DataSize;
ULONG Reserved1;
ULONG Reserved2;
} DeviceSpecificData;
struct {
PHYSICAL_ADDRESS Start;
ULONG Length40;
} Memory40;
struct {
PHYSICAL_ADDRESS Start;
ULONG Length48;
} Memory48;
struct {
PHYSICAL_ADDRESS Start;
ULONG Length64;
} Memory64;
struct {
UCHAR Class;
UCHAR Type;
UCHAR Reserved1;
UCHAR Reserved2;
ULONG IdLowPart;
ULONG IdHighPart;
} Connection;
} u;
} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
Члены
Type
Определяет тип ресурса. Значение константы, указанное для типа type указывает, какая структура внутри объединения u действительна, как указано в следующей таблице. (Эти флаги используются как в CM_PARTIAL_RESOURCE_DESCRIPTOR, так и в IO_RESOURCE_DESCRIPTOR структурах, за исключением отмеченных.)
Значение типа | Подструктура элемента u |
---|---|
CmResourceTypePort | порта |
CmResourceTypeInterrupt | прерывания или u.MessageInterrupt. Если установлен флаг CM_RESOURCE_INTERRUPT_MESSAGE флагов флагов, используйте u.MessageInterrupt; в противном случае используйте прерывания u. |
CmResourceTypeMemory | u.Memory |
CmResourceTypeMemoryLarge | Один из u.Memory40, u.Memory48или u.Memory64. Флаги CM_RESOURCE_MEMORY_LARGE_XXX, заданные в элементе флагов , определяют, какая структура используется. |
CmResourceTypeDma | U.Dma (если CM_RESOURCE_DMA_V3 не задано) или u.DmaV3 (если флаг CM_RESOURCE_DMA_V3 установлен) |
CmResourceTypeDevicePrivate | u.DevicePrivate |
CmResourceTypeBusNumber | u.BusNumber |
CmResourceTypeDeviceSpecific | u.DeviceSpecificData(не используется в IO_RESOURCE_DESCRIPTOR.) |
CmResourceTypePcCardConfig | u.DevicePrivate |
CmResourceTypeMfCardConfig | u.DevicePrivate |
CmResourceTypeConnection | u.Connection |
CmResourceTypeConfigData | Зарезервировано для системного использования. |
CmResourceTypeNonArbitrated | Не используется. |
ShareDisposition
Указывает, можно ли предоставлять общий доступ к описанному ресурсу. Допустимые значения констант перечислены в следующей таблице:
Ценность | Значение |
---|---|
CmResourceShareDeviceExclusive | Для устройства требуется эксклюзивное использование ресурса. |
CmResourceShareDriverExclusive | Драйверу требуется эксклюзивное использование ресурса. Не поддерживается для драйверов WDM. |
CmResourceShared | Ресурс можно совместно использовать без ограничений. |
Flags
Содержит биты флагов, относящиеся к типу ресурса, как указано в следующих таблицах (флаги могут быть битово-побитовы вместе по мере необходимости):
Тип ресурса CmResourceTypePort
Флаг | Определение |
---|---|
CM_RESOURCE_PORT_MEMORY | Устройство обращается в адресном пространстве памяти. |
CM_RESOURCE_PORT_IO | Устройство доступно в адресном пространстве ввода-вывода. |
CM_RESOURCE_PORT_10_BIT_DECODE | Устройство декодирует 10 битов адреса порта. |
CM_RESOURCE_PORT_12_BIT_DECODE | Устройство декодирует 12 битов адреса порта. |
CM_RESOURCE_PORT_16_BIT_DECODE | Устройство декодирует 16 битов адреса порта. |
CM_RESOURCE_PORT_POSITIVE_DECODE | Устройство использует "положительное декодирование" вместо "субтрактивного декодировать". (Как правило, устройства PCI используют положительное декодирование и автобусы ISA используют субтрактивное декодирование.) |
CM_RESOURCE_PORT_PASSIVE_DECODE | Устройство декодирует порт, но драйвер не использует его. |
CM_RESOURCE_PORT_WINDOW_DECODE | Зарезервировано для использования системы. |
Тип ресурса CmResourceTypeInterrupt
Флаг | Определение |
---|---|
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE | Строка IRQ активируется на уровне. (Обычно эти IRQ являются шарабельными.) |
CM_RESOURCE_INTERRUPT_LATCHED | Строка IRQ активируется по краю. |
CM_RESOURCE_INTERRUPT_MESSAGE | Если этот флаг задан, прерывание представляет собой сигнальное сообщение прерывание. В противном случае прерывание — это прерывание на основе строк. |
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED | Не используется со структурой CM_PARTIAL_RESOURCE_DESCRIPTOR. Дополнительные сведения об этом флаге см. в IO_RESOURCE_DESCRIPTOR. |
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT | Прерывание является вторичным прерыванием. Этот флаг можно задать начиная с Windows 8. Дополнительные сведения об дополнительных прерываниях см. в разделе прерываний GPIO. |
CM_RESOURCE_INTERRUPT_WAKE_HINT | Прерывание может проснуть операционную систему из состояния простоя с низкой мощностью или состояния сна системы. Этот флаг можно задать начиная с Windows 8. Дополнительные сведения о возможностях пробуждения см. в разделе Включениепробуждения устройства. |
Тип ресурса CmResourceTypeMemory
Флаг | Определение |
---|---|
CM_RESOURCE_MEMORY_READ_WRITE | Диапазон памяти доступен для чтения и записи. |
CM_RESOURCE_MEMORY_READ_ONLY | Диапазон памяти доступен только для чтения. |
CM_RESOURCE_MEMORY_WRITE_ONLY | Диапазон памяти доступен только для записи. |
CM_RESOURCE_MEMORY_PREFETCHABLE | Диапазон памяти предварительно доступен. |
CM_RESOURCE_MEMORY_COMBINEDWRITE | Кэширование в сочетании с записью допускается. |
CM_RESOURCE_MEMORY_24 | Устройство использует 24-разрядную адресацию. |
CM_RESOURCE_MEMORY_CACHEABLE | Диапазон памяти кэшируется. |
Тип ресурса CmResourceTypeMemoryLarge
Флаг | Определение |
---|---|
CM_RESOURCE_MEMORY_LARGE_40 | Дескриптор памяти использует элемент u.Memory40. |
CM_RESOURCE_MEMORY_LARGE_48 | Дескриптор памяти использует элемент u.Memory48. |
CM_RESOURCE_MEMORY_LARGE_64 | Дескриптор памяти использует элемент u.Memory64. |
Тип ресурса CmResourceTypeDma
Флаг | Определение |
---|---|
CM_RESOURCE_DMA_8 | 8-разрядный канал DMA |
CM_RESOURCE_DMA_16 | 16-разрядный канал DMA |
CM_RESOURCE_DMA_32 | 32-разрядный канал DMA |
CM_RESOURCE_DMA_8_AND_16 | 8-разрядный и 16-разрядный канал DMA |
CM_RESOURCE_DMA_BUS_MASTER | Устройство поддерживает передачу основной шины DMA. |
CM_RESOURCE_DMA_TYPE_A | Тип DMA |
CM_RESOURCE_DMA_TYPE_B | Тип B DMA |
CM_RESOURCE_DMA_TYPE_F | Тип F DMA |
CM_RESOURCE_DMA_V3 | Используйте элемент DmaV3 |
u
Определяет объединение u.
u.Generic
Не используется.
u.Generic.Start
Не используется.
u.Generic.Length
Не используется.
u.Port
Задает диапазон адресов портов ввода-вывода, используя следующие члены.
Драйверы для Windows Vista и более поздних версий операционной системы Windows могут использовать RtlCmDecodeMemIoResource и RtlCmEncodeMemIoResource для чтения и обновления члена u.Port, а не непосредственного обновления.
u.Port.Start
Для необработанных ресурсов: задает относительный физический адрес шины наименьшего диапазона смежных адресов портов ввода-вывода, выделенных устройству.
Для переведенных ресурсов: задает системный физический адрес наименьшего диапазона смежных адресов портов ввода-вывода, выделенных устройству.
Дополнительные сведения о необработанных и переведенных ресурсах см. в примечаниях.
u.Port.Length
Длина (в байтах) диапазона выделенных адресов портов ввода-вывода.
u.Interrupt
Задает вектор прерывания и уровень, используя следующие элементы:
u.Interrupt.Level
Для необработанных ресурсов: указывает irQL для конкретной шины устройства (если это подходит для платформы и шины).
Для переведенных ресурсов: указывает DIRQL, назначенный устройству.
Дополнительные сведения о необработанных и переведенных ресурсах см. в примечаниях.
u.Interrupt.Group
Указывает номер группы обработчика. Этот элемент существует только в том случае, если константа NT_PROCESSOR_GROUPS определена во время компиляции. Этот член может быть ненулевой только в Windows 7 и более поздних версиях Windows. Группа и affinity вместе указывают сходство групп, указывающее, какие процессоры могут прерывать устройство. Чтобы указать сходство для любой группы, задайте для группы
u.Interrupt.Vector
Для необработанных ресурсов: указывает вектор прерываний для конкретной шины устройства (если он подходит для платформы и шины).
Для переведенных ресурсов: указывает глобальный вектор прерываний системы, назначенный устройству.
Дополнительные сведения о необработанных и переведенных ресурсах см. в примечаниях.
u.Interrupt.Affinity
Содержит значение KAFFINITY-typed bitmask, указывающее набор процессоров, которые устройство может прервать. Чтобы указать, что устройство может прервать любой процессор, этот элемент имеет значение -1.
u.MessageInterrupt
Указывает прерывание, сигналивное сообщением. Этот член является союзом. Используйте u.MessageInterrupt.Raw для необработанных ресурсов и u.MessageInterrupt.Translated для переведенных ресурсов. Этот тип ресурса возвращается только в Windows Vista и более поздних версиях операционной системы Windows.
Дополнительные сведения о необработанных и переведенных ресурсах см. в примечаниях.
u.MessageInterrupt.DUMMYUNIONNAME
Определяет объединение DUMMYUNIONNAME.
u.MessageInterrupt.DUMMYUNIONNAME.Raw
Определяет структуру необработанных
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Group
Указывает номер группы обработчика. Этот элемент существует только в том случае, если NT_PROCESSOR_GROUPS определен во время компиляции. Этот член может быть ненулевой только в Windows 7 и более поздних версиях Windows. Группа и affinity членов вместе указывают сходство групп, указывающее, какие процессоры могут получать прерывания устройства. Чтобы указать сходство для любой группы, задайте для группы
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Reserved
Не используется.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.MessageCount
Указывает количество сигналируемых сообщений прерываний, созданных для этого драйвера.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Vector
Указывает вектор прерываний устройства.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Affinity
Указывает значение KAFFINITY, указывающее процессоры, получающие прерывания устройства.
u.MessageInterrupt.DUMMYUNIONNAME.Translated
Элемент u.MessageInterrupt.Translated содержит следующие элементы:
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Level
Указывает устройство IRQL (DIRQL), назначенное прерываниям устройства.
Указывает устройство IRQL (DIRQL), назначенное прерываниям устройства.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Group
Указывает номер группы обработчика. Этот элемент существует только в том случае, если NT_PROCESSOR_GROUPS определен во время компиляции. Этот член может быть ненулевой только в Windows 7 и более поздних версиях Windows. Члены Translated.Group и Translated.Affinity вместе указывают сходство групп, указывающее, какие процессоры могут получать прерывания устройства. Чтобы указать сходство для любой группы, задайте значение Translated.Group ALL_PROCESSOR_GROUPS.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Vector
Указывает вектор прерываний устройства.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Affinity
Указывает значение KAFFINITY, определяющее процессоры, получающие прерывания устройства.
u.Memory
Задает диапазон адресов памяти, используя следующие члены.
Драйверы для Windows Vista и более поздних версий операционной системы Windows могут использовать RtlCmDecodeMemIoResource и RtlCmEncodeMemIoResource для чтения и обновления члена u.Memory, а не непосредственного обновления.
u.Memory.Start
Для необработанных ресурсов: задает относительный физический адрес шины наименьшего диапазона адресов с непрерывной памятью, выделенных устройству.
Для переведенных ресурсов: задает системный физический адрес наименьшего диапазона смежных адресов памяти, выделенных устройству.
Дополнительные сведения о необработанных и переведенных ресурсах см. в примечаниях.
u.Memory.Length
Задает длину (в байтах) диапазона выделенных адресов памяти.
u.Dma
Задает параметр DMA, используя один из следующих элементов:
u.Dma.Channel
Указывает число каналов DMA на системном контроллере DMA, который может использовать устройство.
u.Dma.Port
Указывает номер порта DMA, который может использовать устройство типа MCA.
u.Dma.Reserved1
Не используется.
u.DmaV3
Задает параметры DMA для драйвера, использующего версию 3 структуры DMA_OPERATIONS.
Элемент u.DmaV3 доступен начиная с Windows 8.
u.DmaV3.Channel
Указывает число каналов DMA на системном контроллере DMA, выделенном для устройства.
u.DmaV3.RequestLine
Указывает номер строки запроса на системном контроллере DMA, выделенном устройству.
u.DmaV3.TransferWidth
Задает ширину в битах шины данных, выделенной для устройства контроллером DMA системы, который используется для передачи данных на устройство или с устройства.
u.DmaV3.Reserved1
Не используется.
u.DmaV3.Reserved2
Не используется.
u.DmaV3.Reserved3
Не используется.
u.DevicePrivate
Зарезервировано для использования системы.
u.DevicePrivate.Data[3]
u.BusNumber
Задает номера шины, используя следующие элементы:
u.BusNumber.Start
Указывает наименьшее число диапазонов смежных автобусов, выделенных устройству.
u.BusNumber.Length
Указывает количество автобусов, выделенных устройству.
u.BusNumber.Reserved
Не используется.
u.DeviceSpecificData
Задает размер частной структуры, которая добавляется в конец структуры CM_PARTIAL_RESOURCE_DESCRIPTOR. Если используется u.DeviceSpecificData, структура CM_PARTIAL_RESOURCE_DESCRIPTOR должна быть последней в массиве CM_PARTIAL_RESOURCE_LIST.
Примеры структур, относящихся к устройству, включают CM_FLOPPY_DEVICE_DATA, CM_KEYBOARD_DEVICE_DATA, CM_SCSI_DEVICE_DATAи CM_SERIAL_DEVICE_DATA.
u.DeviceSpecificData.DataSize
Указывает количество байтов, добавленных в конец структуры CM_PARTIAL_RESOURCE_DESCRIPTOR.
u.DeviceSpecificData.Reserved1
Не используется.
u.DeviceSpecificData.Reserved2
Не используется.
u.Memory40
Задает диапазон адресов памяти, используя следующие члены.
Элемент u.Memory40 доступен только в Windows Vista и более поздних версиях операционной системы Windows. Драйверы должны использовать RtlCmDecodeMemIoResource и RtlCmEncodeMemIoResource для чтения и обновления этого элемента, а не непосредственного обновления этого элемента.
u.Memory40.Start
Для необработанных ресурсов: задает относительный физический адрес шины наименьшего диапазона смежных адресов памяти, выделенных устройству.
Для переведенных ресурсов: задает системный физический адрес наименьшего диапазона смежных адресов памяти, выделенных устройству.
Дополнительные сведения о необработанных и переведенных ресурсах см. в примечаниях.
u.Memory40.Length40
Содержит 32-разрядную длину 40-разрядной длины в байтах диапазона выделенных адресов памяти. Наименьшие 8 битов обрабатываются как ноль.
u.Memory48
Задает диапазон адресов памяти, используя следующие члены.
Элемент u.Memory48 доступен только в Windows Vista и более поздних версиях операционной системы Windows. Драйверы должны использовать RtlCmDecodeMemIoResource и RtlCmEncodeMemIoResource для чтения и обновления этого элемента, а не непосредственного обновления этого элемента.
u.Memory48.Start
Для необработанных ресурсов: задает относительный физический адрес шины наименьшего диапазона смежных адресов памяти, выделенных устройству.
Для переведенных ресурсов: задает системный физический адрес наименьшего диапазона смежных адресов памяти, выделенных устройству.
Дополнительные сведения о необработанных и переведенных ресурсах см. в примечаниях.
u.Memory48.Length48
Содержит 32-разрядную длину 48-разрядной длины в байтах диапазона выделенных адресов памяти. Наименьшие 16 битов обрабатываются как ноль.
u.Memory64
Задает диапазон адресов памяти, используя следующие члены.
Элемент u.Memory64 доступен только в Windows Vista и более поздних версиях операционной системы Windows. Драйверы должны использовать RtlCmDecodeMemIoResource и RtlCmEncodeMemIoResource для чтения и обновления этого элемента, а не непосредственного обновления этого элемента.
u.Memory64.Start
Для необработанных ресурсов: задает относительный физический адрес шины наименьшего диапазона смежных адресов памяти, выделенных устройству.
Для переведенных ресурсов: задает системный физический адрес наименьшего диапазона смежных адресов памяти, выделенных устройству.
Дополнительные сведения о необработанных и переведенных ресурсах см. в примечаниях.
u.Memory64.Length64
Содержит 32-разрядную длину 64-разрядной длины в байтах диапазона выделенных адресов памяти. Наименьшие 32 бита обрабатываются как ноль.
u.Connection
Указывает подключение к последовательной шине или последовательным портомили набору одного или нескольких контактов ввода-вывода общего назначения (GPIO). Следующие члены описывают это подключение.
Элемент
u.Connection.Class
Указывает класс подключения. Этот элемент имеет одно из следующих значений:
Ценность | Значение |
---|---|
CM_RESOURCE_CONNECTION_CLASS_GPIO | Доступ к устройству с помощью одного или нескольких закреплений на контроллере GPIO. |
CM_RESOURCE_CONNECTION_CLASS_SERIAL | Доступ к устройству через последовательную шину или последовательный порт. |
u.Connection.Type
Указывает тип подключения.
Если класс
Ценность | Значение |
---|---|
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO | Доступ к устройству через пин-коды GPIO, настроенные для ввода-вывода. |
Пин-код GPIO, настроенный в качестве входных данных запроса прерывания, осуществляется как обычный ресурс прерывания (CmResourceTypeInterrupt).
Если класса
Ценность | Значение |
---|---|
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-разрядного идентификатора подключения.
Замечания
Структура CM_PARTIAL_RESOURCE_DESCRIPTOR может описать необработанный (относительный шины) ресурс или преобразованный (системный физический) ресурс в зависимости от подпрограммы или IRP, с которым он используется. Дополнительные сведения см. в необработанных и переведенных ресурсов и IRP_MN_START_DEVICE.
Можно только 1блок deviceSpecificData. Он должен находиться в конце всех дескрипторов ресурсов в полном блоке дескриптора.
Требования
Требование | Ценность |
---|---|
заголовка | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h) |