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

См. также раздел

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