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


структура 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 вместо члена 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. Группа и affinity вместе указывают сходство групп, указывающее, какие процессоры могут прерывать устройство. Чтобы указать сходство для любой группы, задайте для группы значение ALL_PROCESSOR_GROUPS.

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 членов вместе указывают сходство групп, указывающее, какие процессоры могут получать прерывания устройства. Чтобы указать сходство для любой группы, задайте для группы значение 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

Указывает тип подключения.

Если класс = 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-разрядного идентификатора подключения.

Замечания

Структура CM_PARTIAL_RESOURCE_DESCRIPTOR может описать необработанный (относительный шины) ресурс или преобразованный (системный физический) ресурс в зависимости от подпрограммы или IRP, с которым он используется. Дополнительные сведения см. в необработанных и переведенных ресурсов и IRP_MN_START_DEVICE.

Можно только 1блок deviceSpecificData. Он должен находиться в конце всех дескрипторов ресурсов в полном блоке дескриптора.

Требования

Требование Ценность
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h)

См. также

CM_FLOPPY_DEVICE_DATA

CM_FULL_RESOURCE_DESCRIPTOR

CM_KEYBOARD_DEVICE_DATA

CM_PARTIAL_RESOURCE_LIST

CM_RESOURCE_LIST

CM_SCSI_DEVICE_DATA

CM_SERIAL_DEVICE_DATA

DMA_OPERATIONS

IO_RESOURCE_DESCRIPTOR

IRP_MN_START_DEVICE

IoConnectInterrupt

IoGetDeviceProperty

IoReportResourceForDetection

KAFFINITY

RtlCmDecodeMemIoResource

RtlCmEncodeMemIoResource