CM_PARTIAL_RESOURCE_DESCRIPTOR構造体 (wdm.h)

CM_PARTIAL_RESOURCE_DESCRIPTOR 構造体は、デバイスに割り当てられた 1 つの種類の 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.MessageInterruptを します。Flags のCM_RESOURCE_INTERRUPT_MESSAGE フラグが設定されている場合は、u.MessageInterrupt使用します。それ以外の場合は、u.Interrupt使用します。
CmResourceTypeMemory u.Memory の
CmResourceTypeMemoryLarge u.Memory40、u.Memory48、または u.Memory64の 1 つ。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 オペレーティング システムのドライバーは、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 でのみ 0 以外にすることができます。 グループ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 以外にすることができます。 グループ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 オペレーティング システムのドライバーは、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_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

接続の種類を指定します。

クラス = CM_RESOURCE_CONNECTION_CLASS_GPIOの場合、Type は次の値に設定されます。

価値 意味
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO I/O 用に構成されている GPIO ピンを介してデバイスにアクセスします。

割り込み要求入力として構成された GPIO ピンには、通常の割り込みリソース (cmResourceTypeInterrupt) としてアクセスされます。

クラス = 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 つだけできます。 完全な記述子ブロック内のすべてのリソース記述子の末尾に配置する必要があります。

必要条件

要件 価値
ヘッダー 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 を する