CM_PARTIAL_RESOURCE_DESCRIPTOR結構 (wdm.h)
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 成員子結構 |
---|---|
CmResourceTypePort | u.Port |
CmResourceTypeInterrupt | u.Interrupt 或 u.MessageInterrupt。如果已設定 旗標 的CM_RESOURCE_INTERRUPT_MESSAGE旗標,請使用 u.MessageInterrupt;否則,請使用 u.Interrupt。 |
CmResourceTypeMemory | u.Memory |
CmResourceTypeMemoryLarge | u.Memory40、u.Memory48或 u.Memory64之一。旗標 成員中設定的CM_RESOURCE_MEMORY_LARGE_XXX 旗標會決定使用哪一個結構。 |
CmResourceTypeDma | u.Dma(如果未設定CM_RESOURCE_DMA_V3),或 u.DmaV3(如果已設定CM_RESOURCE_DMA_V3旗標) |
CmResourceTypeDevicePrivate | u.DevicePrivate |
CmResourceTypeBusNumber | u.BusNumber |
CmResourceTypeDeviceSpecific | u.DeviceSpecificData(在 IO_RESOURCE_DESCRIPTOR中使用) |
CmResourceTypePcCardConfig | u.DevicePrivate |
CmResourceTypeMfCardConfig | u.DevicePrivate |
CmResourceTypeConnection | u.Connection |
CmResourceTypeConfigData | 保留供系統使用。 |
CmResourceTypeNonArbitrated | 未使用。 |
ShareDisposition
指出是否可以共用描述的資源。 下表列出有效的常數值:
價值 | 意義 |
---|---|
CmResourceShareDeviceExclusive | 裝置需要獨佔使用資源。 |
CmResourceShareDriverExclusive | 驅動程式需要獨佔使用資源。 WDM 驅動程式不支援。 |
CmResourceShared | 資源可以不受限制地共用。 |
Flags
包含資源類型專屬的旗標位,如下表所示(旗標可以適當地位-ORed 一起):
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 | 裝置使用「正譯碼」,而不是「減反譯碼」。 (一般而言,PCI 裝置使用正譯碼,ISA 總線使用減數譯碼。) |
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 | 如果設定此旗標,則中斷是訊息訊號中斷。 否則,中斷是以線條為基礎的中斷。 |
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 | 記憶體範圍是預先擷取的。 |
CM_RESOURCE_MEMORY_COMBINEDWRITE | 允許合併寫入快取。 |
CM_RESOURCE_MEMORY_24 | 裝置會使用24位尋址。 |
CM_RESOURCE_MEMORY_CACHEABLE | 記憶體範圍是可快取的。 |
CmResourceTypeMemoryLarge 資源類型
旗 | 定義 |
---|---|
CM_RESOURCE_MEMORY_LARGE_40 | 記憶體描述元會使用 u.Memory40 成員。 |
CM_RESOURCE_MEMORY_LARGE_48 | 記憶體描述元會使用 u.Memory48 成員。 |
CM_RESOURCE_MEMORY_LARGE_64 | 記憶體描述元會使用 u.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 | 輸入 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 等位
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 上非零。 Group 和 Affinity 成員一起指定群組親和性,指出裝置可以中斷的處理器。 若要指定任何群組的親和性,請將 [群組] 設定為 [ALL_PROCESSOR_GROUPS]。
u.Interrupt.Vector
針對原始資源:指定裝置的總線特定插斷向量(適用於平臺和總線)。
針對翻譯的資源:指定指派給裝置的全域系統中斷向量。
如需原始和翻譯資源的詳細資訊,請參閱。
u.Interrupt.Affinity
包含 KAFFINITY型別位掩碼值,指出裝置可以中斷的處理器集。 若要指出裝置可以中斷任何處理器,此成員會設定為 -1。
u.MessageInterrupt
指定訊息訊號中斷。 這個成員是聯集。 針對原始資源使用 u.MessageInterrupt.Raw,並 u.MessageInterrupt.Translated 轉譯資源。 這種類型的資源只會在 Windows Vista 和更新版本的 Windows 作業系統上傳回。
如需原始和翻譯資源的詳細資訊,請參閱。
u.MessageInterrupt.DUMMYUNIONNAME
定義 DUMMYUNIONNAME 等位。
u.MessageInterrupt.DUMMYUNIONNAME.Raw
定義 Raw 結構。
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Group
指定處理器組號。 只有在編譯時期定義NT_PROCESSOR_GROUPS,這個成員才會存在。 此成員只能在 Windows 7 和更新版本的 Windows 上非零。 Group 和 Affinity 成員一起指定群組親和性,指出哪些處理器可以接收裝置的中斷。 若要指定任何群組的親和性,請將 [群組] 設定為 [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
u.MessageInterrupt.Translated 成員具有下列成員:
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Level
指定指派給裝置中斷的裝置 IRQL (DIRQL)。
指定指派給裝置中斷的裝置 IRQL (DIRQL)。
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Group
指定處理器組號。 只有在編譯時期定義NT_PROCESSOR_GROUPS,這個成員才會存在。 此成員只能在 Windows 7 和更新版本的 Windows 上非零。 Translated.Group 和 Translated.Affinity 成員一起指定群組親和性,指出哪些處理器可以接收裝置的中斷。 若要指定任何群組的親和性,請將 Translated.Group 設定為 ALL_PROCESSOR_GROUPS。
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Vector
指定裝置的插斷向量。
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Affinity
指定 KAFFINITY 值,識別接收裝置中斷的處理器。
u.Memory
使用下列成員指定記憶體位址的範圍。
Windows Vista 和更新版本的 Windows 操作系統驅動程式可以使用 RtlCmDecodeMemIoResource 和 RtlCmEncodeMemIoResource 來讀取和更新 u.Memory 成員,而不是直接更新它。
u.Memory.Start
針對原始資源:指定配置給裝置之連續記憶體位址範圍之最低總線相對實體位址。
針對轉譯的資源:指定配置給裝置之連續記憶體位址範圍最低的系統實體位址。
如需原始和翻譯資源的詳細資訊,請參閱。
u.Memory.Length
指定配置記憶體位址範圍的長度,以位元組為單位。
u.Dma
使用下列其中一個成員來指定 DMA 設定:
u.Dma.Channel
指定裝置可以使用之系統 DMA 控制器上的 DMA 通道數目。
u.Dma.Port
指定 MCA 類型裝置可以使用的 DMA 埠數目。
u.Dma.Reserved1
未使用。
u.DmaV3
指定使用 DMA_OPERATIONS 結構第 3 版之驅動程式的 DMA 設定。
u.DmaV3 成員可從 Windows 8 開始使用。
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[3]
u.BusNumber
使用下列成員指定總線號碼:
u.BusNumber.Start
指定配置給裝置之連續總線範圍的最低編號。
u.BusNumber.Length
指定配置給裝置的總線數目。
u.BusNumber.Reserved
未使用。
u.DeviceSpecificData
指定附加至 CM_PARTIAL_RESOURCE_DESCRIPTOR 結構結尾的裝置特定私人結構大小。 如果使用 u.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
使用下列成員指定記憶體位址的範圍。
u.Memory40 成員僅適用於 Windows Vista 和更新版本的 Windows 操作系統。 驅動程式必須使用 RtlCmDecodeMemIoResource 和 RtlCmEncodeMemIoResource 來讀取和更新此成員,而不是直接更新它。
u.Memory40.Start
針對原始資源:指定配置給裝置之連續記憶體位址範圍之最低總線相對實體位址。
針對轉譯的資源:指定配置給裝置之連續記憶體位址範圍之最低系統實體位址。
如需原始和翻譯資源的詳細資訊,請參閱。
u.Memory40.Length40
包含配置記憶體位址範圍的 40 位長度高 32 位,以位元組為單位。 最低 8 位會被視為零。
u.Memory48
使用下列成員指定記憶體位址的範圍。
u.Memory48 成員僅適用於 Windows Vista 和更新版本的 Windows 作業系統。 驅動程式必須使用 RtlCmDecodeMemIoResource 和 RtlCmEncodeMemIoResource 來讀取和更新此成員,而不是直接更新它。
u.Memory48.Start
針對原始資源:指定配置給裝置之連續記憶體位址範圍之最低總線相對實體位址。
針對轉譯的資源:指定配置給裝置之連續記憶體位址範圍之最低系統實體位址。
如需原始和翻譯資源的詳細資訊,請參閱。
u.Memory48.Length48
包含配置記憶體位址範圍的48位長度,以位元組為單位的高32位。 最低16位會視為零。
u.Memory64
使用下列成員指定記憶體位址的範圍。
u.Memory64 成員僅適用於 Windows Vista 和更新版本的 Windows 作業系統。 驅動程式必須使用 RtlCmDecodeMemIoResource 和 RtlCmEncodeMemIoResource 來讀取和更新此成員,而不是直接更新它。
u.Memory64.Start
針對原始資源:指定配置給裝置之連續記憶體位址範圍之最低總線相對實體位址。
針對轉譯的資源:指定配置給裝置之連續記憶體位址範圍之最低系統實體位址。
如需原始和翻譯資源的詳細資訊,請參閱。
u.Memory64.Length64
包含配置記憶體位址範圍的64位長度高32位,以位元組為單位。 最低 32 位會被視為零。
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 位。
言論
CM_PARTIAL_RESOURCE_DESCRIPTOR 結構可以根據所使用的例程或 IRP,來描述原始(總線相對)資源或已翻譯的(系統實體)資源。 如需詳細資訊,請參閱 原始和翻譯的資源 和 IRP_MN_START_DEVICE。
只有 1
要求
要求 | 價值 |
---|---|
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Wudfwdm.h) |