структура 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 | u.Port |
CmResourceTypeInterrupt | u.Interrupt или u.MessageInterrupt. Если установлен флаг CM_RESOURCE_INTERRUPT_MESSAGE флагов , используйте u.MessageInterrupt; В противном случае используйте u.Interrupt. |
CmResourceTypeMemory | u.Memory |
CmResourceTypeMemoryLarge | Один из u.Memory40, u.Memory48 или u.Memory64. Флаги CM_RESOURCE_MEMORY_LARGE_XXX, заданные в элементе Flags , определяют, какая структура используется. |
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. |
CmResourceShareShared | Ресурс можно совместно использовать без ограничений. |
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 | Устройство поддерживает передачу данных по шине master DMA. |
CM_RESOURCE_DMA_TYPE_A | Введите A DMA |
CM_RESOURCE_DMA_TYPE_B | Тип B DMA |
CM_RESOURCE_DMA_TYPE_F | Тип F DMA |
CM_RESOURCE_DMA_V3 | Используйте элемент DmaV3 вместо элемента Dma . Элемент DmaV3 доступен, начиная с Windows 8. |
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. Элементы Group и Affinity вместе указывают сходство групп, которое указывает, какие процессоры устройство может прервать. Чтобы указать сходство для любой группы, задайте для параметра Группа значение ALL_PROCESSOR_GROUPS.
u.Interrupt.Vector
Для необработанных ресурсов: указывает вектор прерываний, зависящий от шины устройства (если это применимо для платформы и шины).
Для переведенных ресурсов: указывает глобальный системный вектор прерываний, назначенный устройству.
Дополнительные сведения о необработанных и переведенных ресурсах см. в разделе Примечания.
u.Interrupt.Affinity
Содержит значение битовой маски типа KAFFINITY, указывающее набор процессоров, которые устройство может прервать. Чтобы указать, что устройство может прерывать работу любого процессора, для этого элемента задано значение -1.
u.MessageInterrupt
Указывает прерывание, сигналивное сообщением. Этот член является союзом. Используйте u.MessageInterrupt.Raw для необработанных ресурсов и u.MessageInterrupt.Translated для переведенных ресурсов. Этот тип ресурса возвращается только в Windows Vista и более поздних версиях операционной системы Windows.
Дополнительные сведения о необработанных и переведенных ресурсах см. в разделе Примечания.
u.MessageInterrupt.DUMMYUNIONNAME
Определяет объединение DUMMYUNIONNAME .
u.MessageInterrupt.DUMMYUNIONNAME.Raw
Определяет структуру Raw .
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Group
Указывает номер группы процессоров. Этот элемент существует только в том случае, если NT_PROCESSOR_GROUPS определен во время компиляции. Этот элемент может быть ненулевым только в Windows 7 и более поздних версиях Windows. Элементы Group и Affinity вместе задают сходство групп, которое указывает, какие процессоры могут получать прерывания устройства. Чтобы указать сходство для любой группы, задайте для параметра Группа значение ALL_PROCESSOR_GROUPS.
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 доступен начиная с 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-разрядного идентификатора подключения.
Комментарии
Структура CM_PARTIAL_RESOURCE_DESCRIPTOR может описывать необработанный (относительно шины) ресурс или преобразованный (физический ресурс системы) в зависимости от процедуры или IRP, с которой он используется. Дополнительные сведения см. в разделе Необработанные и переведенные ресурсы и IRP_MN_START_DEVICE.
Может быть только 1 блок DeviceSpecificData. Он должен находиться в конце всех дескрипторов ресурсов в полном блоке дескрипторов.
Требования
Требование | Значение |
---|---|
Заголовок | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h) |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по