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 連接埠地址的範圍。
驅動程式必須使用 RtlIoDecodeMemIoResource 和 RtlIoEncodeMemIoResource 來讀取和更新此成員,而不是直接更新成員。
u.Port.Length
可指派 I/O 埠位址範圍的長度,以位元組為單位。
u.Port.Alignment
指派起始位址必須遵守的對齊方式,以位元組為單位。 指派的起始地址必須是 對齊的整數倍數。
u.Port.MinimumAddress
可指派給裝置的最小總線相對 I/O 埠位址。
u.Port.MaximumAddress
可指派給裝置的最大總線相對 I/O 埠位址。
u.Memory
使用下列成員指定記憶體位址的範圍:
Windows Vista 和更新版本的 Windows 操作系統驅動程式必須使用 RtlIoDecodeMemIoResource 和 RtlIoEncodeMemIoResource 來讀取和更新此成員,而不是直接更新它。
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,這個成員才會存在。 如果 群組 成員存在, Group 和 TargetedProcessors 成員會同時指定群組親和性,以識別應該處理裝置中斷的處理器集。 若要指定特定群組的親和性,請將 AffinityPolicy 設定為 IrqPolicySpecifiedProcessors ,並將 Group 設定為適當的組號。 此外, TargetedProcessors 必須在群組中指定目標處理器。 如果您將 AffinityPolicy 設定為 IrqPolicySpecifiedProcessors 以外的值,請將 Group 設定為 ALL_PROCESSOR_GROUPS,表示驅動程式是群組感知 (,其設計目的是要處理處理器群組的相關信息) 。 如果 Group 等於 ALL_PROCESSOR_GROUPS,則驅動程式無法指定目標處理器;系統會忽略這類目標規格。
u.Interrupt.PriorityPolicy
指定 IRQ_PRIORITY 值,指出系統應該分派裝置中斷的優先順序。
u.Interrupt.TargetedProcessors
指定 KAFFINITY 值,指出哪些處理器應該處理裝置的中斷。 只有在 AffinityPolicy 是 IrqPolicySpecifiedProcessors 時,才會使用此值。
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 版本的驅動程式必須使用 RtlIoDecodeMemIoResource 和 RtlIoEncodeMemIoResource 來讀取和更新此成員,而不是直接更新它。
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 版本的驅動程式必須使用 RtlIoDecodeMemIoResource 和 RtlIoEncodeMemIoResource 來讀取和更新此成員,而不是直接更新它。
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 操作系統驅動程式必須使用 RtlIoDecodeMemIoResource 和 RtlIoEncodeMemIoResource 來讀取和更新此成員,而不是直接更新它。
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) |