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_DESCRIPTORIO_RESOURCE_DESCRIPTOR 结构中使用,但 noted.)

类型值 u 成员子结构
CmResourceTypePort u.Port
CmResourceTypeInterrupt u.Interruptu.MessageInterrupt。如果设置了标志CM_RESOURCE_INTERRUPT_MESSAGE标志,请使用 u.MessageInterrupt;否则,请使用 u.Interrupt
CmResourceTypeMemory u.Memory
CmResourceTypeMemoryLarge u.Memory40u.Memory48u.Memory64 之一。Flags 成员中设置的 CM_RESOURCE_MEMORY_LARGE_XXX标志确定使用哪个结构。
CmResourceTypeDma 如果未) 设置CM_RESOURCE_DMA_V3,则 u.Dma (;如果未设置CM_RESOURCE_DMA_V3标志,则 u.DmaV3 ()
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

包含特定于资源类型的标志位,如下表所示, (标志可以按位 ORed 组合在一起,视情况而定) :

CmResourceTypePort 资源类型

标志 定义
CM_RESOURCE_PORT_MEMORY 在内存地址空间中访问设备。
CM_RESOURCE_PORT_IO 设备在 I/O 地址空间中访问。
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 类型 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

使用以下成员指定 I/O 端口地址的范围。

Windows Vista 及更高版本的 Windows 操作系统的驱动程序可以使用 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource 来读取和更新 u.Port 成员,而不是直接更新它。

u.Port.Start

对于原始资源:指定分配给设备的连续 I/O 端口地址范围中最低的总线相对物理地址。

对于已翻译的资源:指定分配给设备的连续 I/O 端口地址范围中最低范围的系统物理地址。

有关原始资源和已翻译资源的详细信息,请参阅备注。

u.Port.Length

分配的 I/O 端口地址范围的长度(以字节为单位)。

u.Interrupt

使用以下成员指定中断向量和级别:

u.Interrupt.Level

对于原始资源:指定设备的特定于总线的 IRQL ((如果适合平台和总线) )。

对于已翻译的资源:指定分配给设备的 DIRQL。

有关原始资源和已翻译资源的详细信息,请参阅备注。

u.Interrupt.Group

指定处理器组编号。 仅当NT_PROCESSOR_GROUPS常量在编译时定义时,此成员才存在。 此成员只能在 Windows 7 及更高版本的 Windows 上为非零。 GroupAffinity 成员共同指定一个组相关性,该关联指示设备可以中断哪些处理器。 若要指定任何组的相关性,请将 “组” 设置为“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

定义 原始 结构。

u.MessageInterrupt.DUMMYUNIONNAME.Raw.Group

指定处理器组编号。 仅当在编译时定义NT_PROCESSOR_GROUPS时,此成员才存在。 此成员只能在 Windows 7 及更高版本的 Windows 上为非零。 GroupAffinity 成员共同指定一个组相关性,用于指示哪些处理器可以接收设备的中断。 若要指定任何组的相关性,请将 “组” 设置为“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.GroupTranslated.Affinity 成员共同指定一个组相关性,用于指示哪些处理器可以接收设备的中断。 若要指定任何组的相关性,请将 Translated.Group 设置为 ALL_PROCESSOR_GROUPS。

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Vector

指定设备的中断向量。

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Affinity

指定 KAFFINITY 值,该值标识接收设备中断的处理器。

u.Memory

使用以下成员指定内存地址的范围。

Windows Vista 及更高版本的 Windows 操作系统的驱动程序可以使用 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource 来读取和更新 u.Memory 成员,而不是直接更新它。

u.Memory.Start

对于原始资源:指定分配给设备的连续内存地址范围中最低的总线相对物理地址。

对于已翻译的资源:指定分配给设备的连续内存地址范围中最低的系统物理地址。

有关原始资源和已翻译资源的详细信息,请参阅备注。

u.Memory.Length

指定分配的内存地址范围的长度(以字节为单位)。

u.Dma

使用以下成员之一指定 DMA 设置:

u.Dma.Channel

指定设备可以使用的系统 DMA 控制器上的 DMA 通道数。

u.Dma.Port

指定 MCA 类型设备可以使用的 DMA 端口数。

u.Dma.Reserved1

未使用。

u.DmaV3

指定使用 DMA_OPERATIONS 结构版本 3 的驱动程序的 DMA 设置。

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_DATACM_KEYBOARD_DEVICE_DATACM_SCSI_DEVICE_DATACM_SERIAL_DEVICE_DATA

u.DeviceSpecificData.DataSize

指定追加到 CM_PARTIAL_RESOURCE_DESCRIPTOR 结构末尾的字节数。

u.DeviceSpecificData.Reserved1

未使用。

u.DeviceSpecificData.Reserved2

未使用。

u.Memory40

使用以下成员指定内存地址的范围。

u.Memory40 成员仅在 Windows Vista 和更高版本的 Windows 操作系统上可用。 驱动程序必须使用 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource 来读取和更新此成员,而不是直接更新它。

u.Memory40.Start

对于原始资源:指定分配给设备的最小连续内存地址范围中的总线相对物理地址。

对于已翻译的资源:指定分配给设备的连续内存地址范围中最低的系统物理地址。

有关原始资源和已翻译资源的详细信息,请参阅备注。

u.Memory40.Length40

包含分配的内存地址范围的 40 位长度(以字节为单位)的高 32 位。 最低 8 位被视为零。

u.Memory48

使用以下成员指定内存地址的范围。

u.Memory48 成员仅在 Windows Vista 和更高版本的 Windows 操作系统上可用。 驱动程序必须使用 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource 来读取和更新此成员,而不是直接更新它。

u.Memory48.Start

对于原始资源:指定分配给设备的最小连续内存地址范围中的总线相对物理地址。

对于已翻译的资源:指定分配给设备的连续内存地址范围中最低的系统物理地址。

有关原始资源和已翻译资源的详细信息,请参阅备注。

u.Memory48.Length48

包含分配的内存地址范围的 48 位长度(以字节为单位)的高 32 位。 最低 16 位被视为零。

u.Memory64

使用以下成员指定内存地址的范围。

u.Memory64 成员仅在 Windows Vista 和更高版本的 Windows 操作系统上可用。 驱动程序必须使用 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource 来读取和更新此成员,而不是直接更新它。

u.Memory64.Start

对于原始资源:指定分配给设备的最小连续内存地址范围中的总线相对物理地址。

对于已翻译的资源:指定分配给设备的连续内存地址范围中最低的系统物理地址。

有关原始资源和已翻译资源的详细信息,请参阅备注。

u.Memory64.Length64

包含分配的内存地址范围的 64 位长度(以字节为单位)的高 32 位。 最低 32 位被视为零。

u.Connection

指定与 串行总线串行端口的连接,或连接到一组或多组 常规用途 I/O (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 通过为 I/O 配置的 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

包含 64 位连接 ID 的低 32 位。

u.Connection.IdHighPart

包含 64 位连接 ID 的高 32 位。

注解

CM_PARTIAL_RESOURCE_DESCRIPTOR结构可以描述原始 (总线相对) 资源或转换 (系统物理) 资源,具体取决于使用它的例程或 IRP。 有关详细信息,请参阅 原始和翻译的资源 以及 IRP_MN_START_DEVICE

只能有 1 个DeviceSpecificData 块。 它必须位于完整描述符块中所有资源描述符的末尾。

要求

要求
Header 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