CM_PARTIAL_RESOURCE_DESCRIPTOR 構造体 (wdm.h)

CM_PARTIAL_RESOURCE_DESCRIPTOR構造体は、デバイスに割り当てられた単一の種類の 1 つ以上のシステム ハードウェア リソースを指定します。 この構造体は、 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_DESCRIPTOR構造体と IO_RESOURCE_DESCRIPTOR 構造体の両方で使用されます)。

種類の値 u メンバーのサブ構造
CmResourceTypePort u.Port
CmResourceTypeInterrupt u.Interrupt または u.MessageInterruptFlags のCM_RESOURCE_INTERRUPT_MESSAGE フラグが設定されている場合は、 u.MessageInterrupt を使用します。それ以外の場合は、 u.Interrupt を使用します。
CmResourceTypeMemory u.Memory
CmResourceTypeMemoryLarge u.Memory40u.Memory48、または u.Memory64 のいずれか。Flags メンバーに設定されている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 ドライバーではサポートされていません。
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 バスでは減算デコードが使用されます)。
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 割り込みは 2 次割り込みです。 このフラグは、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 DMA を入力する
CM_RESOURCE_DMA_TYPE_B 「B DMA」と入力します
CM_RESOURCE_DMA_TYPE_F 「F DMA」と入力します
CM_RESOURCE_DMA_V3 Dma メンバーの代わりに DmaV3 メンバーを使用します。 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 でのみ 0 以外にすることができます。 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 でのみ 0 以外にすることができます。 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 でのみ 0 以外にすることができます。 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 オペレーティング システム用ドライバーでは、直接更新するのではなく、 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

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_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 ビットは 0 として扱われます。

u.Memory48

次のメンバーを使用して、メモリ アドレスの範囲を指定します。

u.Memory48 メンバーは、Windows Vista 以降のバージョンの Windows オペレーティング システムでのみ使用できます。 ドライバーは、このメンバーを直接更新するのではなく、 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource を使用して、このメンバーを読み取って更新する必要があります。

u.Memory48.Start

生リソースの場合: デバイスに割り当てられる連続するメモリ アドレスの範囲の中で最も低いバス相対物理アドレスを指定します。

変換されたリソースの場合: デバイスに割り当てられる連続するメモリ アドレスの範囲の中で最も低いシステム物理アドレスを指定します。

生および翻訳されたリソースの詳細については、「解説」を参照してください。

u.Memory48.Length48

割り当てられたメモリ アドレスの範囲の 48 ビット長の上位 32 ビットをバイト単位で格納します。 最下位の 16 ビットは 0 として扱われます。

u.Memory64

次のメンバーを使用して、メモリ アドレスの範囲を指定します。

u.Memory64 メンバーは、Windows Vista 以降のバージョンの Windows オペレーティング システムでのみ使用できます。 ドライバーは、このメンバーを直接更新するのではなく、 RtlCmDecodeMemIoResourceRtlCmEncodeMemIoResource を使用して、このメンバーを読み取って更新する必要があります。

u.Memory64.Start

生リソースの場合: デバイスに割り当てられる連続するメモリ アドレスの範囲の中で最も低いバス相対物理アドレスを指定します。

変換されたリソースの場合: デバイスに割り当てられる連続するメモリ アドレスの範囲の中で最も低いシステム物理アドレスを指定します。

生および翻訳されたリソースの詳細については、「解説」を参照してください。

u.Memory64.Length64

割り当てられたメモリ アドレスの範囲の 64 ビット長の上位 32 ビットをバイト単位で格納します。 最下位の 32 ビットは 0 として扱われます。

u.Connection

シリアル バスまたはシリアル ポート、または 1 つ以上の汎用 I/O (GPIO) ピンのセットへの接続を指定します。 次のメンバーは、この接続について説明します。

u.Connection メンバーは、Windows 8 以降で使用できます。

u.Connection.Class

接続クラスを指定します。 このメンバーは、次のいずれかの値に設定されます。

意味
CM_RESOURCE_CONNECTION_CLASS_GPIO GPIO コントローラー上の 1 つ以上のピンを介してデバイスにアクセスします。
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 ビット接続 ID の下位 32 ビットを格納します。

u.Connection.IdHighPart

64 ビット接続 ID の上位 32 ビットを格納します。

注釈

CM_PARTIAL_RESOURCE_DESCRIPTOR構造体では、使用されているルーチンまたは IRP に応じて、生 (バス相対) リソースまたは変換された (システム物理) リソースを記述できます。 詳細については、「生および翻訳されたリソースとIRP_MN_START_DEVICE」を参照してください。

指定できる DeviceSpecificData ブロックは 1 つだけです。 これは、完全な記述子ブロック内のすべてのリソース記述子の末尾に配置する必要があります。

要件

要件
Header 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