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,則 PnP 管理員只有在 IRQ 5 無法使用時,才會將 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

指派起始位址必須遵守的對齊方式,以位元組為單位。 指派的起始地址必須是 對齊的整數倍數。

u.Port.MinimumAddress

可指派給裝置的最小總線相對 I/O 埠位址。

u.Port.MaximumAddress

可指派給裝置的最大總線相對 I/O 埠位址。

u.Memory

使用下列成員指定記憶體位址的範圍:

Windows Vista 和更新版本的 Windows 操作系統驅動程式必須使用 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource 來讀取和更新此成員,而不是直接更新它。

u.Memory.Length

可指派記憶體位址範圍的長度,以位元組為單位。

u.Memory.Alignment

指派起始位址必須遵守的對齊方式,以位元組為單位。 指派的起始地址必須是 對齊的整數倍數。

u.Memory.MinimumAddress

可指派給裝置的最小總線相對記憶體位址。

u.Memory.MaximumAddress

可指派給裝置的最大總線相對記憶體位址。

u.Interrupt

使用下列成員指定中斷向量範圍:

u.Interrupt.MinimumVector

可指派給裝置的最小總線相對向量。

u.Interrupt.MaximumVector

可指派給裝置的最大總線相對向量。

如果已設定CM_RESOURCE_INTERRUPT_MESSAGE旗標位,MinimumVector 和 MaximumVector 成員的值具有特殊意義。 如需詳細資訊,請參閱 使用中斷資源描述元

系統會在 Windows Vista 和更新版本的 Windows 操作系統上提供下列其他成員:

u.Interrupt.AffinityPolicy

指定 IRQ_DEVICE_POLICY 值,指出系統如何在處理器之間分散裝置的中斷。

指定 IRQ_DEVICE_POLICY 值,指出系統如何在處理器之間分散裝置的中斷。

u.Interrupt.Group

指定處理器組號。 群組 是僅限 Windows 7 和更新版本中 u.Interrupt 的有效但選擇性成員。 只有在編譯時期定義NT_PROCESSOR_GROUPS,這個成員才會存在。 如果 群組 成員存在, GroupTargetedProcessors 成員會同時指定群組親和性,以識別應該處理裝置中斷的處理器集。 若要指定特定群組的親和性,請將 AffinityPolicy 設定為 IrqPolicySpecifiedProcessors ,並將 Group 設定為適當的組號。 此外, TargetedProcessors 必須在群組中指定目標處理器。 如果您將 AffinityPolicy 設定為 IrqPolicySpecifiedProcessors 以外的值,請將 Group 設定為 ALL_PROCESSOR_GROUPS,表示驅動程式是群組感知 (,其設計目的是要處理處理器群組的相關信息) 。 如果 Group 等於 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) 針腳。

從 Windows 8 開始,即可使用 u.Connection 成員。

下列成員描述此連線。

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 位聯機標識碼的較低 32 位。

u.Connection.IdHighPart

64 位聯機標識碼的上層 32 位。

規格需求

需求
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Miniport.h)

另請參閱

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt