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_DESCRIPTORIO_RESOURCE_DESCRIPTOR 結構內使用,除非有注明。 )

類型值 u 成員子結構
CmResourceTypePort u. 埠
CmResourceTypeInterrupt u. 中斷MessageInterrupt。如果已設定 旗標 的 CM_RESOURCE_INTERRUPT_MESSAGE 旗標,請使用 MessageInterrupt;否則,請使用 u. 中斷
CmResourceTypeMemory u. 記憶體
CmResourceTypeMemoryLarge 其中一個Memory40u. Memory48Memory64旗標成員中設定的 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

指出是否可以共用描述的資源。 有效的常數值會列在下表中。

意義
CmResourceShareDeviceExclusive
裝置需要獨佔使用資源。
CmResourceShareDriverExclusive
驅動程式需要獨佔使用資源。 (不支援 WDM 驅動程式。 )
CmResourceShareShared
可以共用資源,而不受限制。

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 作業系統的驅動程式可以使用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

指定訊息信號中斷。 這個成員是聯集。 針對原始資源使用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 作業系統的驅動程式可以使用RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource來讀取和更新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 結構結尾的裝置特定私用結構的大小。 如果使用 DeviceSpecificDataCM_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

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

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

u.Memory40.Start

針對原始資源:指定配置給裝置的連續記憶體位址範圍中最低的匯流排相對實體位址。

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

如需原始和已轉譯資源的詳細資訊,請參閱備註。

u.Memory40.Length40

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

u.Memory48

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

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

u.Memory48.Start

針對原始資源:指定配置給裝置的連續記憶體位址範圍中最低的匯流排相對實體位址。

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

如需原始和已轉譯資源的詳細資訊,請參閱備註。

u.Memory48.Length48

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

u.Memory64

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

Memory64成員僅適用于 Windows 作業系統 Windows Vista 和更新版本。 驅動程式必須使用 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 控制器上的一或多個 pin 來存取裝置。
CM_RESOURCE_CONNECTION_CLASS_SERIAL
透過序列匯流排或序列埠存取裝置。

u.Connection.Type

指定連線類型。

如果 Class = CM_RESOURCE_CONNECTION_CLASS_GPIO, Type 會設定為下列值。

意義
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO
透過針對 i/o 設定的 GPIO pin 來存取裝置。
注意 設定為插斷要求輸入的 GPIO pin 會以一般的插斷資源 (CmResourceTypeInterrupt) 的方式來存取。
如果 Class = CM_RESOURCE_CONNECTION_CLASS_SERIAL, Type 會設定為下列其中一個值。
意義
CM_RESOURCE_CONNECTION_TYPE_SERIAL_I2C
裝置已連線到 I ² C 匯流排。
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

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

規格需求

   
標頭 wdm (包括 Wdm、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