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

識別資源類型。 針對 Type 指定的常數值表示 u 等位內的哪一個結構有效,如下表所示。 (這些旗標會在 CM_PARTIAL_RESOURCE_DESCRIPTORIO_RESOURCE_DESCRIPTOR 結構中使用,但未指定。)

類型值 u 成員子結構
CmResourceTypePort u.Port
CmResourceTypeInterrupt u.Interruptu.MessageInterrupt。如果已設定 Flags 的CM_RESOURCE_INTERRUPT_MESSAGE旗標,請使用 u.MessageInterrupt;否則,請使用 u.Interrupt
CmResourceTypeMemory u.Memory
CmResourceTypeMemoryLarge 其中一個 u.Memory40u.Memory48u.Memory64Flags 成員中設定的 CM_RESOURCE_MEMORY_LARGE_XXX 旗標會決定使用哪一個結構。
CmResourceTypeDma 如果未設定) CM_RESOURCE_DMA_V3 或 u.DmaV3 (設定CM_RESOURCE_DMA_V3旗) 標,則 u.Dma (
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 驅動程式。
CmResourceShareShared 資源可以不受限制地共用。

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 總線則使用 subtractive decode.)
CM_RESOURCE_PORT_PASSIVE_DECODE 裝置會將埠譯碼,但驅動程式不會使用它。
CM_RESOURCE_PORT_WINDOW_DECODE 保留供系統使用。

CmResourceTypeInterrupt 資源類型

旗標 定義
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE IRQ 線會觸發層級。 (這些 IRQ 通常是 sharable.)
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 成員。 DmaV3 成員可從 Windows 8 開始使用。

u

定義 u 等位。

u.Generic

未使用。

u.Generic.Start

未使用。

u.Generic.Length

未使用。

u.Port

使用下列成員指定 I/O 連接埠地址的範圍。

Windows Vista 和更新版本的 Windows 操作系統驅動程式可以使用 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource 來讀取和更新 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

指定訊息訊號中斷。 這個成員是等位。 針對原始資源使用 u.MessageInterrupt.Raw ,並針對翻譯的資源使用 u.MessageInterrupt.Translated 。 此類型的資源只會在 Windows Vista 和更新版本的 Windows 作業系統上傳回。

如需原始和翻譯資源的詳細資訊,請參閱。

u.MessageInterrupt.DUMMYUNIONNAME

定義 DUMMCOUNTIONNAME 等位。

u.MessageInterrupt.DUMMYUNIONNAME.Raw

定義 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

u.MessageInterrupt.Translated 成員具有下列成員:

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Level

指定指派給裝置中斷的裝置 IRQL (DIRQL) 。

指定指派給裝置中斷的裝置 IRQL (DIRQL) 。

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Group

指定處理器組號。 只有在編譯時期定義NT_PROCESSOR_GROUPS,這個成員才會存在。 此成員只能在 Windows 7 和更新版本的 Windows 上非零。 Translated.GroupTranslated.Affinity 成員同時指定群組親和性,指出哪些處理器可以接收裝置的中斷。 若要指定任何群組的親和性,請將 Translated.Group 設定為 ALL_PROCESSOR_GROUPS。

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Vector

指定裝置的中斷向量。

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Affinity

指定 KAFFINITY 值,識別接收裝置中斷的處理器。

u.Memory

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

Windows Vista 和更新版本的 Windows 操作系統驅動程式可以使用 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource 來讀取和更新 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

指定使用第 3 版 DMA_OPERATIONS 結構的驅動程式 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_DATACM_KEYBOARD_DEVICE_DATACM_SCSI_DEVICE_DATACM_SERIAL_DEVICE_DATA

u.DeviceSpecificData.DataSize

指定附加至 CM_PARTIAL_RESOURCE_DESCRIPTOR 結構結尾的位元元組數目。

u.DeviceSpecificData.Reserved1

未使用。

u.DeviceSpecificData.Reserved2

未使用。

u.Memory40

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

u.Memory40 成員僅適用於 Windows Vista 和更新版本的 Windows 操作系統。 驅動程式必須使用 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource 來讀取和更新此成員,而不是直接更新成員。

u.Memory40.Start

針對原始資源:指定配置給裝置之連續記憶體位址範圍最低之總線相對實體位址。

針對已翻譯的資源:指定配置給裝置之連續記憶體位址範圍最低的系統實體位址。

如需原始和翻譯資源的詳細資訊,請參閱。

u.Memory40.Length40

包含配置記憶體位址範圍的 40 位長度高 32 位,以位元組為單位。 最低 8 位會被視為零。

u.Memory48

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

u.Memory48 成員僅適用於 Windows Vista 和更新版本的 Windows 操作系統。 驅動程式必須使用 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource 來讀取和更新此成員,而不是直接更新成員。

u.Memory48.Start

針對原始資源:指定配置給裝置之連續記憶體位址範圍最低之總線相對實體位址。

針對已翻譯的資源:指定配置給裝置之連續記憶體位址範圍最低的系統實體位址。

如需原始和翻譯資源的詳細資訊,請參閱。

u.Memory48.Length48

包含 48 位長度的高 32 位,以位元組為單位的已配置記憶體位址範圍。 最低16位會被視為零。

u.Memory64

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

u.Memory64 成員僅適用於 Windows Vista 和更新版本的 Windows 操作系統。 驅動程式必須使用 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource 來讀取和更新此成員,而不是直接更新成員。

u.Memory64.Start

針對原始資源:指定配置給裝置之連續記憶體位址範圍最低之總線相對實體位址。

針對已翻譯的資源:指定配置給裝置之連續記憶體位址範圍最低的系統實體位址。

如需原始和翻譯資源的詳細資訊,請參閱。

u.Memory64.Length64

包含 64 位長度的高 32 位,以位元組為單位的已配置記憶體位址範圍。 最低 32 位會被視為零。

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 位。

備註

CM_PARTIAL_RESOURCE_DESCRIPTOR結構可以根據所使用的例程或 IRP,描述原始 (總線相對) 資源或轉譯 (系統實體) 資源。 如需詳細資訊,請參閱 原始和翻譯的資源IRP_MN_START_DEVICE

只能有 1 個DeviceSpecificData 區塊。 它必須位於完整描述元區塊中所有資源描述元的結尾。

規格需求

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

另請參閱

CM_FLOPPY_DEVICE_DATA

CM_FULL_RESOURCE_DESCRIPTOR

CM_KEYBOARD_DEVICE_DATA

CM_PARTIAL_RESOURCE_LIST

CM_RESOURCE_LIST

CM_SCSI_DEVICE_DATA

CM_SERIAL_DEVICE_DATA

DMA_OPERATIONS

IO_RESOURCE_DESCRIPTOR

IRP_MN_START_DEVICE

IoConnectInterrupt

IoGetDeviceProperty

IoReportResourceForDetection

KAFFINITY

RtlCmDecodeMemIoResource

RtlCmEncodeMemIoResource