IO_RESOURCE_DESCRIPTOR 結構 (miniport.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 | 中斷是次要中斷。 如需次要中斷的詳細資訊,請參閱 GPIO 中斷。 |
CM_RESOURCE_INTERRUPT_WAKE_HINT | 中斷能夠從低電源閑置狀態或系統睡眠狀態喚醒操作系統。 如需喚醒功能的詳細資訊,請參閱 啟用裝置喚醒。 |
如需其他資源類型的有效旗標清單,請參閱 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
使用下列成員指定記憶體位址的範圍:
驅動程式必須使用 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 成員的值具有特殊意義。 如需詳細資訊,請參閱 使用中斷資源描述元。
u.Interrupt.AffinityPolicy
指定 IRQ_DEVICE_POLICY 值,指出系統如何在處理器之間分散裝置的中斷。
指定 IRQ_DEVICE_POLICY 值,指出系統如何在處理器之間分散裝置的中斷。
u.Interrupt.Group
指定處理器組號。 群組 是有效的 (,但選擇性) 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
保留供系統使用。
u.ConfigData.Reserved1
保留供系統使用。
u.ConfigData.Reserved2
保留供系統使用。
u.Memory40
使用下列成員指定記憶體位址的範圍。
驅動程式必須使用 RtlIoDecodeMemIoResource 和 RtlIoEncodeMemIoResource 來讀取和更新此成員,而不是直接更新成員。
u.Memory40.Length40
40 位長度的高 32 位,以位元組為單位,可指派記憶體位址的範圍。 較低的8位會視為零。
u.Memory40.Alignment40
40 位對齊的高 32 位,以位元組為單位,指派的起始地址必須遵守。 較低的8位會視為零。 指派的起始位址將是對齊方式的倍數。
u.Memory40.MinimumAddress
可指派給裝置的最小總線相對記憶體位址。
u.Memory40.MaximumAddress
可指派給裝置的最大總線相對記憶體位址。
u.Memory48
使用下列成員指定記憶體位址的範圍。
驅動程式必須使用 RtlIoDecodeMemIoResource 和 RtlIoEncodeMemIoResource 來讀取和更新此成員,而不是直接更新成員。
u.Memory48.Length48
48 位長度的高 32 位,以位元組為單位,可指派記憶體位址的範圍。 較低的16位會視為零。
u.Memory48.Alignment48
48 位對齊的高 32 位,以位元組為單位,指派的起始地址必須遵守。 較低的16位會視為零。 指派的起始位址將是對齊方式的倍數。
u.Memory48.MinimumAddress
可指派給裝置的最小總線相對記憶體位址。
u.Memory48.MaximumAddress
可指派給裝置的最大總線相對記憶體位址。
u.Memory64
使用下列成員指定記憶體位址的範圍。
驅動程式必須使用 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) 針腳。
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 位聯機標識碼的較低 32 位。
u.Connection.IdHighPart
64 位聯機標識碼的上限 32 位。
規格需求
需求 | 值 |
---|---|
標頭 | miniport.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Miniport.h) |