IO_RESOURCE_DESCRIPTOR结构 (wdm.h)

IO_RESOURCE_DESCRIPTOR结构描述了设备可以使用的一种类型的原始硬件资源范围。 每个IO_RESOURCE_LIST结构中包含一个IO_RESOURCE_DESCRIPTOR结构数组。

语法

typedef struct _IO_RESOURCE_DESCRIPTOR {
  UCHAR  Option;
  UCHAR  Type;
  UCHAR  ShareDisposition;
  UCHAR  Spare1;
  USHORT Flags;
  USHORT Spare2;
  union {
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Port;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory;
    struct {
      ULONG             MinimumVector;
      ULONG             MaximumVector;
#if ...
      IRQ_DEVICE_POLICY AffinityPolicy;
      USHORT            Group;
#else
      IRQ_DEVICE_POLICY AffinityPolicy;
#endif
      IRQ_PRIORITY      PriorityPolicy;
      KAFFINITY         TargetedProcessors;
    } Interrupt;
    struct {
      ULONG MinimumChannel;
      ULONG MaximumChannel;
    } Dma;
    struct {
      ULONG RequestLine;
      ULONG Reserved;
      ULONG Channel;
      ULONG TransferWidth;
    } DmaV3;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Generic;
    struct {
      ULONG Data[3];
    } DevicePrivate;
    struct {
      ULONG Length;
      ULONG MinBusNumber;
      ULONG MaxBusNumber;
      ULONG Reserved;
    } BusNumber;
    struct {
      ULONG Priority;
      ULONG Reserved1;
      ULONG Reserved2;
    } ConfigData;
    struct {
      ULONG            Length40;
      ULONG            Alignment40;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory40;
    struct {
      ULONG            Length48;
      ULONG            Alignment48;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory48;
    struct {
      ULONG            Length64;
      ULONG            Alignment64;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory64;
    struct {
      UCHAR Class;
      UCHAR Type;
      UCHAR Reserved1;
      UCHAR Reserved2;
      ULONG IdLowPart;
      ULONG IdHighPart;
    } Connection;
  } u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;

成员

Option

指定此资源说明是必需、首选还是替代。 必须使用以下值之一:

含义
0 除非还指定了备用范围,否则需要指定的资源范围。
IO_RESOURCE_PREFERRED 指定的资源范围优先于任何备用范围。
IO_RESOURCE_ALTERNATIVE 指定的资源范围是其前面的范围的替代项。 例如,如果一个 IO_RESOURCE_DESCRIPTOR 结构指定 IRQ 5,设置了IO_RESOURCE_PREFERRED,下一个结构指定 IRQ 3,并且设置了 IO_RESOURCE_ALTERNATIVE,则仅当 IRQ 5 不可用时,PnP 管理器才会将 IRQ 3 分配给设备。 可以为每个资源指定多个替代项。 可以设置IO_RESOURCE_ALTERNATIVE和IO_RESOURCE_PREFERRED,指示首选替代项。
IO_RESOURCE_DEFAULT 未使用。

Type

标识资源类型。 有关有效值的列表,请参阅 CM_PARTIAL_RESOURCE_DESCRIPTOR 结构的 Type 成员。

ShareDisposition

指示是否可以共享所描述的资源。 有关有效值的列表,请参阅 CM_PARTIAL_RESOURCE_DESCRIPTOR 结构的 ShareDisposition 成员。

Spare1

未使用。

Flags

包含特定于资源类型的位标志。 下表显示了在 类型 = CmResourceTypeInterrupt 时有效的标志:

含义
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE IRQ 线是级别触发的。 (这些 IRQ 通常是可共享的。)
CM_RESOURCE_INTERRUPT_LATCHED IRQ 线是边缘触发的。
CM_RESOURCE_INTERRUPT_MESSAGE 如果设置了此标志,则中断是消息信号中断。 否则,中断是基于行的中断。
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 如果设置了此标志,则 u.Interrupt 成员包含描述设备中断策略的数据。
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT 中断能够将操作系统从低功耗空闲状态或系统睡眠状态唤醒。 可以从 Windows 8 开始设置此标志。 有关唤醒功能的详细信息,请参阅 启用设备唤醒
CM_RESOURCE_INTERRUPT_WAKE_HINT 中断能够将操作系统从低功耗空闲状态或系统睡眠状态唤醒。 可以从 Windows 8 开始设置此标志。 有关唤醒功能的详细信息,请参阅 启用设备唤醒

有关其他资源类型的有效标志的列表,请参阅 CM_PARTIAL_RESOURCE_DESCRIPTOR 结构的 Flags 成员的说明。

Spare2

未使用。

u

定义 u 联合。

u.Port

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

驱动程序必须使用 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource 来读取和更新此成员,而不是直接更新它。

u.Port.Length

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

u.Port.Alignment

分配的起始地址必须遵循的对齐方式(以字节为单位)。 分配的起始地址必须是 Alignment 的整数倍数。

u.Port.MinimumAddress

可分配给设备的最小总线相对 I/O 端口地址。

u.Port.MaximumAddress

可分配给设备的最大总线相对 I/O 端口地址。

u.Memory

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

Windows Vista 及更高版本的 Windows 操作系统的驱动程序必须使用 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource 来读取和更新此成员,而不是直接更新它。

u.Memory.Length

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

u.Memory.Alignment

分配的起始地址必须遵循的对齐方式(以字节为单位)。 分配的起始地址必须是 Alignment 的整数倍数。

u.Memory.MinimumAddress

可分配给设备的最小总线相对内存地址。

u.Memory.MaximumAddress

可分配给设备的最大总线相对内存地址。

u.Interrupt

使用以下成员指定中断向量范围:

u.Interrupt.MinimumVector

可分配给设备的最小总线相对向量。

u.Interrupt.MaximumVector

可分配给设备的最大总线相对向量。

如果设置了 CM_RESOURCE_INTERRUPT_MESSAGE 标志位, 则 MinimumVectorMaximumVector 成员的值具有特殊含义。 有关详细信息,请参阅 使用中断资源描述符

系统在 Windows Vista 和更高版本的 Windows 操作系统上提供以下附加成员:

u.Interrupt.AffinityPolicy

指定一个 IRQ_DEVICE_POLICY 值,该值指示系统应如何在处理器之间分配设备的中断。

指定一个 IRQ_DEVICE_POLICY 值,该值指示系统应如何在处理器之间分配设备的中断。

u.Interrupt.Group

指定处理器组编号。 仅在 Windows 7 及更高版本的 Windows 中是 u.Interrupt 的有效但可选的成员。 仅当在编译时定义NT_PROCESSOR_GROUPS时,此成员才存在。 如果 成员存在, 则 GroupTargetedProcessors 成员共同指定一个组相关性,用于标识应处理设备中断的处理器集。 若要指定特定组的相关性,请将 AffinityPolicy 设置为 IrqPolicySpecifiedProcessors ,并将 Group 设置为相应的组号。 此外, TargetedProcessors 必须在组中指定目标处理器。 如果将 AffinityPolicy 设置为 IrqPolicySpecifiedProcessors 以外的值,请将 “组 ”设置为“ALL_PROCESSOR_GROUPS”以指示驱动程序是组感知 (,旨在) 处理有关处理器组的信息。 如果 等于 ALL_PROCESSOR_GROUPS,则驱动程序无法指定目标处理器;将忽略此类目标规范。

u.Interrupt.PriorityPolicy

指定一个 IRQ_PRIORITY 值,该值指示系统调度设备中断时使用的优先级。

u.Interrupt.TargetedProcessors

指定 KAFFINITY 值,该值指示哪些处理器应处理设备的中断。 仅当 AffinityPolicyIrqPolicySpecifiedProcessors 时,才使用此值。

u.Dma

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

u.Dma.MinimumChannel

可分配给设备的最小总线相对 DMA 通道。

u.Dma.MaximumChannel

可分配给设备的最大总线相对 DMA 通道。

u.DmaV3

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

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

u.DmaV3.RequestLine

分配给设备的系统 DMA 控制器上的请求行数。

u.DmaV3.Reserved

未使用。

u.DmaV3.Channel

分配给设备的系统 DMA 控制器上的 DMA 通道数。

u.DmaV3.TransferWidth

指定分配给设备的系统 DMA 控制器用于将数据传入设备或从设备传输数据的数据总线的宽度(以位为单位)。

u.Generic

未使用。

u.Generic.Length

未使用。

u.Generic.Alignment

未使用。

u.Generic.MinimumAddress

未使用。

u.Generic.MaximumAddress

未使用。

u.DevicePrivate

预留给系统使用。

u.DevicePrivate.Data[3]

预留给系统使用。

u.BusNumber

使用以下成员指定总线编号:

u.BusNumber.Length

所需的总线编号数。

u.BusNumber.MinBusNumber

可分配给设备的最小总线相对总线编号。

u.BusNumber.MaxBusNumber

可分配给设备的最大总线相对总线数。

u.BusNumber.Reserved

未使用。

u.ConfigData

预留给系统使用。

u.ConfigData.Priority

定义 ULONG 成员 优先级

u.ConfigData.Reserved1

未使用。

u.ConfigData.Reserved2

未使用。

u.Memory40

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

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

u.Memory40.Length40

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

u.Memory40.Alignment40

分配的起始地址必须遵循的 40 位对齐方式的高 32 位(以字节为单位)。 较低的 8 位被视为零。 分配的起始地址将是对齐方式的倍数。

u.Memory40.MinimumAddress

可分配给设备的最小总线相对内存地址。

u.Memory40.MaximumAddress

可分配给设备的最大总线相对内存地址。

u.Memory48

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

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

u.Memory48.Length48

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

u.Memory48.Alignment48

分配的起始地址必须遵循的 48 位对齐方式的高 32 位(以字节为单位)。 较低的 16 位被视为零。 分配的起始地址将是对齐方式的倍数。

u.Memory48.MinimumAddress

可分配给设备的最小总线相对内存地址。

u.Memory48.MaximumAddress

可分配给设备的最大总线相对内存地址。

u.Memory64

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

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

u.Memory64.Length64

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

u.Memory64.Alignment64

分配的起始地址必须遵循的 64 位对齐方式的高 32 位(以字节为单位)。 较低的 32 位被视为零。 分配的起始地址将是对齐方式的倍数。

u.Memory64.MinimumAddress

可分配给设备的最小总线相对内存地址。

u.Memory64.MaximumAddress

可分配给设备的最大总线相对内存地址。

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 位。

要求

要求
Header wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Miniport.h)

另请参阅

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt