CM_PARTIAL_RESOURCE_DESCRIPTOR 結構 (wdm)
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_DESCRIPTOR 和 IO_RESOURCE_DESCRIPTOR 結構內使用,除非有注明。 )
| 類型值 | u 成員子結構 |
|---|---|
| CmResourceTypePort | u. 埠 |
| CmResourceTypeInterrupt | u. 中斷 或 MessageInterrupt。如果已設定 旗標 的 CM_RESOURCE_INTERRUPT_MESSAGE 旗標,請使用 MessageInterrupt;否則,請使用 u. 中斷。 |
| CmResourceTypeMemory | u. 記憶體 |
| CmResourceTypeMemoryLarge | 其中一個Memory40、 u. Memory48或Memory64。旗標成員中設定的 CM_RESOURCE_MEMORY_LARGE_XXX旗標會決定所使用的結構。 |
| CmResourceTypeDma | (如果 CM_RESOURCE_DMA_V3 未設定) ,則 為,如果設定 CM_RESOURCE_DMA_V3 旗標,則為DmaV3 () |
| CmResourceTypeDevicePrivate | DevicePrivate |
| CmResourceTypeBusNumber | BusNumber |
| CmResourceTypeDeviceSpecific | DeviceSpecificData (不會在 IO_RESOURCE_DESCRIPTOR內使用。 ) |
| CmResourceTypePcCardConfig | DevicePrivate |
| CmResourceTypeMfCardConfig | DevicePrivate |
| CmResourceTypeConnection | u. 連接 |
| CmResourceTypeConfigData | 保留供系統使用。 |
| CmResourceTypeNonArbitrated | 未使用。 |
ShareDisposition
指出是否可以共用描述的資源。 有效的常數值會列在下表中。
| 值 | 意義 |
|---|---|
|
裝置需要獨佔使用資源。 |
|
驅動程式需要獨佔使用資源。 (不支援 WDM 驅動程式。 ) |
|
可以共用資源,而不受限制。 |
Flags
包含資源類型特有的旗標位,如下表所示。 旗標可以在適當的情況之下進行位 Or 運算。
| 資源類型 | 旗標 | 定義 | |
|---|---|---|---|
| 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 | 裝置使用「正面解碼」,而不是「subtractive 解碼」。 (一般情況下,PCI 裝置會使用正解碼和 ISA 匯流排來使用 subtractive 解碼。 ) | ||
| 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 | 如果設定此旗標,插斷會是訊息信號中斷。 否則,插斷是以行為基礎的插斷。 您可以從 Windows Vista 開始設定這個旗標。 | ||
| 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 | 記憶體範圍為 prefetchable。 | ||
| CM_RESOURCE_MEMORY_COMBINEDWRITE | 允許合併寫入快取。 | ||
| CM_RESOURCE_MEMORY_24 | 裝置使用24位定址。 | ||
| CM_RESOURCE_MEMORY_CACHEABLE | 記憶體範圍可快取。 | ||
| CmResourceTypeMemoryLarge | |||
| CM_RESOURCE_MEMORY_LARGE_40 | 記憶體描述項會使用 Memory40 成員。 | ||
| CM_RESOURCE_MEMORY_LARGE_48 | 記憶體描述項會使用 Memory48 成員。 | ||
| CM_RESOURCE_MEMORY_LARGE_64 | 記憶體描述項會使用 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 | 輸入 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.Generic
未使用。
u.Generic.Start
u.Generic.Length
u.Port
使用下列成員指定 i/o 埠位址的範圍。
Windows Vista 和更新版本的 Windows 作業系統的驅動程式可以使用RtlCmDecodeMemIoResource和RtlCmEncodeMemIoResource來讀取和更新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
指定訊息信號中斷。 這個成員是聯集。 針對原始資源使用MessageInterrupt ,並針對轉譯的資源使用MessageInterrupt。 這種類型的資源只會在 Windows Vista 和更新版本的 Windows 作業系統上傳回。
如需原始和已轉譯資源的詳細資訊,請參閱備註。
MessageInterrupt成員具有下列成員:
u.MessageInterrupt.DUMMYUNIONNAME
u.MessageInterrupt.DUMMYUNIONNAME.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
MessageInterrupt 轉譯的成員具有下列成員:
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Level
指定指派給裝置中斷 (DIRQL) 的裝置 IRQL。
指定指派給裝置中斷 (DIRQL) 的裝置 IRQL。
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Group
指定處理器群組編號。 只有在編譯時期定義 NT_PROCESSOR_GROUPS 時,才會存在這個成員。 只有 Windows 7 和更新版本的 Windows 才能有非零的成員。 已 轉譯的. 群組 和 轉譯的親和性 成員一起指定群組親和性,以指出哪些處理器可以接收裝置的插斷。 若要指定任何群組的親和性,請將已 轉譯的群組 設定為 ALL_PROCESSOR_GROUPS。
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Vector
指定裝置的中斷向量。
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Affinity
指定 KAFFINITY 值,以識別接收裝置中斷的處理器。
u.Memory
使用下列成員指定記憶體位址的範圍。
Windows Vista 和更新版本的 Windows 作業系統的驅動程式可以使用RtlCmDecodeMemIoResource和RtlCmEncodeMemIoResource來讀取和更新u的成員,而不是直接更新。
u.Memory.Start
針對原始資源:指定配置給裝置的連續記憶體位址範圍中最低的匯流排相對實體位址。
針對已轉譯的資源:指定配置給裝置的連續記憶體位址範圍最低的系統實體位址。
如需原始和已轉譯資源的詳細資訊,請參閱備註。
u.Memory.Length
指定已配置記憶體位址範圍的長度(以位元組為單位)。
u.Dma
使用下列其中一個成員指定 DMA 設定:
u.Dma.Channel
指定裝置可使用的系統 DMA 控制器上 DMA 通道的數目。
u.Dma.Port
指定 MCA 類型裝置可使用的 DMA 埠號碼。
u.Dma.Reserved1
未使用。
u.DmaV3
針對使用第3版 DMA_OPERATIONS 結構的驅動程式指定 DMA 設定。
從 Windows 8 開始,可以使用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
u.BusNumber
使用下列成員指定匯流排編號:
u.BusNumber.Start
指定配置給裝置之連續匯流排範圍的最小編號。
u.BusNumber.Length
指定配置給裝置的匯流排數目。
u.BusNumber.Reserved
未使用。
u.DeviceSpecificData
指定附加至 CM_PARTIAL_RESOURCE_DESCRIPTOR 結構結尾的裝置特定私用結構的大小。 如果使用 DeviceSpecificData , CM_PARTIAL_RESOURCE_DESCRIPTOR 結構必須是 CM_PARTIAL_RESOURCE_LIST 陣列中的最後一個。
裝置特定結構的範例包括 CM_FLOPPY_DEVICE_DATA、 CM_KEYBOARD_DEVICE_DATA、 CM_SCSI_DEVICE_DATA和 CM_SERIAL_DEVICE_DATA。
u.DeviceSpecificData.DataSize
指定附加至 CM_PARTIAL_RESOURCE_DESCRIPTOR 結構結尾的位元組數目。
u.DeviceSpecificData.Reserved1
未使用。
u.DeviceSpecificData.Reserved2
未使用。
u.Memory40
使用下列成員指定記憶體位址的範圍。
Memory40成員僅適用于 Windows 作業系統 Windows Vista 和更新版本。 驅動程式必須使用 RtlCmDecodeMemIoResource 和 RtlCmEncodeMemIoResource 來讀取和更新此成員,而不是直接更新。
u.Memory40.Start
針對原始資源:指定配置給裝置的連續記憶體位址範圍中最低的匯流排相對實體位址。
針對已轉譯的資源:指定配置給裝置的連續記憶體位址範圍中最低的系統實體位址。
如需原始和已轉譯資源的詳細資訊,請參閱備註。
u.Memory40.Length40
包含已配置記憶體位址範圍的40位長度(以位元組為單位)的高32位。 最低的8個位會視為零。
u.Memory48
使用下列成員指定記憶體位址的範圍。
Memory48成員僅適用于 Windows 作業系統 Windows Vista 和更新版本。 驅動程式必須使用 RtlCmDecodeMemIoResource 和 RtlCmEncodeMemIoResource 來讀取和更新此成員,而不是直接更新。
u.Memory48.Start
針對原始資源:指定配置給裝置的連續記憶體位址範圍中最低的匯流排相對實體位址。
針對已轉譯的資源:指定配置給裝置的連續記憶體位址範圍中最低的系統實體位址。
如需原始和已轉譯資源的詳細資訊,請參閱備註。
u.Memory48.Length48
包含已配置記憶體位址範圍的48位長度(以位元組為單位)的高32位。 最低16位會視為零。
u.Memory64
使用下列成員指定記憶體位址的範圍。
Memory64成員僅適用于 Windows 作業系統 Windows Vista 和更新版本。 驅動程式必須使用 RtlCmDecodeMemIoResource 和 RtlCmEncodeMemIoResource 來讀取和更新此成員,而不是直接更新。
u.Memory64.Start
針對原始資源:指定配置給裝置的連續記憶體位址範圍中最低的匯流排相對實體位址。
針對已轉譯的資源:指定配置給裝置的連續記憶體位址範圍中最低的系統實體位址。
如需原始和已轉譯資源的詳細資訊,請參閱備註。
u.Memory64.Length64
包含已配置記憶體位址範圍的64位長度(以位元組為單位)的高32位。 最低32位會視為零。
u.Connection
指定 序列匯流排 或 序列埠的連接,或一組一或多個 一般用途的 i/o (GPIO) 的釘選。 下列成員描述此連接。
從 Windows 8 開始,可以使用u. Connection成員。
u.Connection.Class
指定連接類別。 這個成員會設定為下列其中一個值。
| 值 | 意義 |
|---|---|
|
透過 GPIO 控制器上的一或多個 pin 來存取裝置。 |
|
透過序列匯流排或序列埠存取裝置。 |
u.Connection.Type
指定連線類型。
如果 Class = CM_RESOURCE_CONNECTION_CLASS_GPIO, Type 會設定為下列值。
| 值 | 意義 |
|---|---|
|
透過針對 i/o 設定的 GPIO pin 來存取裝置。 |
| 值 | 意義 |
|---|---|
|
裝置已連線到 I ² C 匯流排。 |
|
裝置已連線至 SPI 匯流排。 |
|
裝置已連線到序列埠。 |
u.Connection.Reserved1
未使用。
u.Connection.Reserved2
未使用。
u.Connection.IdLowPart
包含64位連接識別碼的較低32位。
u.Connection.IdHighPart
包含64位連接識別碼的最高32位。
備註
CM_PARTIAL_RESOURCE_DESCRIPTOR結構可以描述原始 (匯流排相關的) 資源或轉譯的 (系統實體) 資源,視使用的常式或 IRP 而定。 如需詳細資訊,請參閱 原始和已轉譯的資源 和 IRP_MN_START_DEVICE。
只能有 1 個 DeviceSpecificData 組塊。 它必須位於完整描述項區塊中所有資源描述項的結尾。
規格需求
| 標頭 | wdm (包括 Wdm、Ntddk .h、Ntifs .h、Wudfwdm .h) |
另請參閱
意見反應
提交並檢視相關的意見反應