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

标识资源类型。 为 类型 指定的常量值指示 u 联合中的哪个结构有效,如下表所示。 (这些标志在 CM_PARTIAL_RESOURCE_DESCRIPTORIO_RESOURCE_DESCRIPTOR 结构中使用,除非另有说明。

类型值 u 成员子结构
CmResourceTypePort u.Port
CmResourceTypeInterrupt u.Interruptu.MessageInterrupt。如果设置了 标志 的CM_RESOURCE_INTERRUPT_MESSAGE标志,请使用 u.MessageInterrupt;否则,请使用 u.Interrupt
CmResourceTypeMemory u.Memory
CmResourceTypeMemoryLarge u.Memory40u.Memory48u.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.DeviceSpecificDataIO_RESOURCE_DESCRIPTOR中未使用)
CmResourceTypePcCardConfig u.DevicePrivate
CmResourceTypeMfCardConfig u.DevicePrivate
CmResourceTypeConnection u.Connection
CmResourceTypeConfigData 保留供系统使用。
CmResourceTypeNonArbitrated 未使用。

ShareDisposition

指示是否可以共享所描述的资源。 下表中列出了有效的常量值:

价值 意义
CmResourceShareDeviceExclusive 设备需要独占使用资源。
CmResourceShareDriverExclusive 驱动程序需要独占使用资源。 WDM 驱动程序不支持。
CmResourceShareShared 资源可以不受限制地共享。

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 成员。 从 Windows 8 开始,DmaV3 成员可用。

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 上为非零。 地缘 成员共同指定一个组相关性,指示设备可以中断的处理器。 若要指定任何组的相关性,请将 设置为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 上为非零。 地缘 成员共同指定一个组相关性,指示哪些处理器可以接收设备的中断。 若要指定任何组的相关性,请将 设置为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 设置。

从 Windows 8 开始,u.DmaV3 成员可用。

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) 引脚。 以下成员描述了此连接。

从 Windows 8 开始,u.Connection 成员可用。

u.Connection.Class

指定连接类。 此成员设置为以下值之一:

价值 意义
CM_RESOURCE_CONNECTION_CLASS_GPIO 通过 GPIO 控制器上的一个或多个引脚访问设备。
CM_RESOURCE_CONNECTION_CLASS_SERIAL 通过串行总线或串行端口访问设备。

u.Connection.Type

指定连接类型。

如果 = CM_RESOURCE_CONNECTION_CLASS_GPIO,则 类型 设置为以下值:

价值 意义
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO 通过为 I/O 配置的 GPIO 引脚访问设备。

配置为中断请求输入的 GPIO 引脚作为普通中断资源(CmResourceTypeInterrupt) 访问。

如果 = CM_RESOURCE_CONNECTION_CLASS_SERIAL,则 类型 设置为以下值之一:

价值 意义
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

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

要求

要求 价值
标头 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