次の方法で共有


IO_RESOURCE_DESCRIPTOR構造体 (ミニポート.h)

IO_RESOURCE_DESCRIPTOR構造体は、デバイスで使用できる 1 種類の生のハードウェア リソースの範囲を表します。 IO_RESOURCE_DESCRIPTOR構造体の配列は、各IO_RESOURCE_LIST構造体内格納されます。

構文

typedef struct _IO_RESOURCE_DESCRIPTOR {
  UCHAR  Option;
  UCHAR  Type;
  UCHAR  ShareDisposition;
  UCHAR  Spare1;
  USHORT Flags;
  USHORT Spare2;
  union {
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Port;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory;
    struct {
      ULONG             MinimumVector;
      ULONG             MaximumVector;
#if ...
      IRQ_DEVICE_POLICY AffinityPolicy;
      USHORT            Group;
#else
      IRQ_DEVICE_POLICY AffinityPolicy;
#endif
      IRQ_PRIORITY      PriorityPolicy;
      KAFFINITY         TargetedProcessors;
    } Interrupt;
    struct {
      ULONG MinimumChannel;
      ULONG MaximumChannel;
    } Dma;
    struct {
      ULONG RequestLine;
      ULONG Reserved;
      ULONG Channel;
      ULONG TransferWidth;
    } DmaV3;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Generic;
    struct {
      ULONG Data[3];
    } DevicePrivate;
    struct {
      ULONG Length;
      ULONG MinBusNumber;
      ULONG MaxBusNumber;
      ULONG Reserved;
    } BusNumber;
    struct {
      ULONG Priority;
      ULONG Reserved1;
      ULONG Reserved2;
    } ConfigData;
    struct {
      ULONG            Length40;
      ULONG            Alignment40;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory40;
    struct {
      ULONG            Length48;
      ULONG            Alignment48;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory48;
    struct {
      ULONG            Length64;
      ULONG            Alignment64;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory64;
    struct {
      UCHAR Class;
      UCHAR Type;
      UCHAR Reserved1;
      UCHAR Reserved2;
      ULONG IdLowPart;
      ULONG IdHighPart;
    } Connection;
  } u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;

メンバー

Option

このリソースの説明を必須、優先、または代替のいずれにするかを指定します。 次のいずれかの値を使用する必要があります。

意味
0 別の範囲も指定しない限り、指定されたリソース範囲が必要です。
IO_RESOURCE_PREFERRED 指定したリソース範囲は、任意の代替範囲より優先されます。
IO_RESOURCE_ALTERNATIVE 指定したリソース範囲は、その前の範囲に代わるものになります。 たとえば、1 つの IO_RESOURCE_DESCRIPTOR 構造体で IRQ 5 が指定され、IO_RESOURCE_PREFERREDが設定され、次の構造体で IRQ 3 が指定IO_RESOURCE_ALTERNATIVE場合、PnP マネージャーは IRQ 5 が使用できない場合にのみ IRQ 3 をデバイスに割り当てます。 (リソースごとに複数の代替手段を指定できます。IO_RESOURCE_ALTERNATIVEとIO_RESOURCE_PREFERREDの両方を設定できます。推奨される代替手段を示します)。
IO_RESOURCE_DEFAULT 使用されていません。

Type

リソースの種類を識別します。 有効な値の一覧については、CM_PARTIAL_RESOURCE_DESCRIPTOR構造体の Type メンバーを参照してください。

ShareDisposition

説明されているリソースを共有できるかどうかを示します。 有効な値の一覧については、CM_PARTIAL_RESOURCE_DESCRIPTOR構造体の ShareDisposition メンバーを参照してください。

Spare1

使用されていません。

Flags

リソースの種類に固有のビット フラグが含まれています。 次の表は、 Type = CmResourceTypeInterrupt の場合に有効なフラグを示しています。

意味
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE IRQ 行はレベルによってトリガーされます。 (これらの IRQ は通常共有可能です)。
CM_RESOURCE_INTERRUPT_LATCHED IRQ ラインはエッジ トリガーされます。
CM_RESOURCE_INTERRUPT_MESSAGE このフラグが設定されている場合、割り込みはメッセージシグナル割り込みになります。 それ以外の場合、割り込みは行ベースの割り込みになります。
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED このフラグが設定されている場合、u.Interrupt メンバーには、デバイスの割り込みポリシーを記述するデータが含まれます。
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT 割り込みは 2 次割り込みです。 セカンダリ割り込みの詳細については、「 GPIO 割り込み」を参照してください。
CM_RESOURCE_INTERRUPT_WAKE_HINT 割り込みは、低電力アイドル状態またはシステム スリープ状態からオペレーティング システムをスリープ解除できます。 ウェイク機能の詳細については、「 デバイスのウェイクアップを有効にする」を参照してください。

その他のリソースの種類の有効なフラグの一覧については、CM_PARTIAL_RESOURCE_DESCRIPTOR構造体の Flags メンバーの説明を参照してください。

Spare2

使用されていません。

u

u 共用体を定義します。

u.Port

次のメンバーを使用して、I/O ポート アドレスの範囲を指定します。

ドライバーは、このメンバーを直接更新するのではなく、 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource を使用してこのメンバーを読み取って更新する必要があります。

u.Port.Length

割り当て可能な I/O ポート アドレスの範囲の長さ (バイト単位)。

u.Port.Alignment

割り当てられた開始アドレスが準拠する必要があるアラインメント (バイト単位)。 割り当てられた開始アドレスは、 Alignment の整数倍数である必要があります。

u.Port.MinimumAddress

デバイスに割り当てることができる最小バス相対 I/O ポート アドレス。

u.Port.MaximumAddress

デバイスに割り当てることができる最大バス相対 I/O ポート アドレス。

u.Memory

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

ドライバーは、このメンバーを直接更新するのではなく、 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource を使用してこのメンバーを読み取って更新する必要があります。

u.Memory.Length

割り当て可能なメモリ アドレスの範囲の長さ (バイト単位)。

u.Memory.Alignment

割り当てられた開始アドレスが準拠する必要があるアラインメント (バイト単位)。 割り当てられた開始アドレスは、 Alignment の整数倍数である必要があります。

u.Memory.MinimumAddress

デバイスに割り当てることができる最小バス相対メモリ アドレス。

u.Memory.MaximumAddress

デバイスに割り当てることができる最大バス相対メモリ アドレス。

u.Interrupt

次のメンバーを使用して、割り込みベクトル範囲を指定します。

u.Interrupt.MinimumVector

デバイスに割り当てることができる最小バス相対ベクトル。

u.Interrupt.MaximumVector

デバイスに割り当てることができる最大バス相対ベクトル。

CM_RESOURCE_INTERRUPT_MESSAGE フラグ ビットが設定されている場合、MinimumVector メンバーと MaximumVector メンバーの値には特別な意味があります。 詳細については、「 割り込みリソース記述子の使用」を参照してください。

u.Interrupt.AffinityPolicy

システム がプロセッサ 間でデバイスの割り込みを分散させる方法を示すIRQ_DEVICE_POLICY値を指定します。

システム がプロセッサ 間でデバイスの割り込みを分散させる方法を示すIRQ_DEVICE_POLICY値を指定します。

u.Interrupt.Group

プロセッサ グループ番号を指定します。 Group は、 u.Interrupt の有効な (省略可能な) メンバーです。 このメンバーは、コンパイル時にNT_PROCESSOR_GROUPSが定義されている場合にのみ存在します。 グループ メンバーが存在する場合、Group メンバーと TargetedProcessors メンバーは、デバイスの割り込みを処理するプロセッサのセットを識別するグループ アフィニティを指定します。 特定のグループのアフィニティを指定するには、 AffinityPolicyIrqPolicySpecifiedProcessors に設定し、 Group を 適切なグループ番号に設定します。 さらに、 TargetedProcessors は 、グループ内のターゲット プロセッサを指定する必要があります。 AffinityPolicyIrqPolicySpecifiedProcessors 以外の値に設定する場合は、ドライバーがグループ対応であることを示す (つまり、プロセッサ グループに関する情報を処理するように設計されている) ことを示すには、Group を ALL_PROCESSOR_GROUPS に設定します。 グループが ALL_PROCESSOR_GROUPS と等しい場合、ドライバーはターゲット プロセッサを指定できません。このようなターゲット指定は無視されます。

u.Interrupt.PriorityPolicy

システム がデバイス の割り込みをディスパッチする優先度を示すIRQ_PRIORITY値を指定します。

u.Interrupt.TargetedProcessors

デバイスの割り込みを処理するプロセッサを示す KAFFINITY 値を指定します。 この値は、AffinityPolicyIrqPolicySpecifiedProcessors の場合にのみ使用されます。

u.Dma

次のいずれかのメンバーを使用して、DMA 設定を指定します。

u.Dma.MinimumChannel

デバイスに割り当てることができる最小バス相対 DMA チャネル。

u.Dma.MaximumChannel

デバイスに割り当てることができる最大バス相対 DMA チャネル。

u.DmaV3

DMA_OPERATIONS構造体のバージョン 3 を使用するドライバーの DMA 設定を指定します。

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

u.DmaV3.RequestLine

デバイスに割り当てられているシステム DMA コントローラー上の要求行の番号。

u.DmaV3.Reserved

使用されていません。

u.DmaV3.Channel

デバイスに割り当てられているシステム DMA コントローラー上の DMA チャネルの番号。

u.DmaV3.TransferWidth

デバイスに割り当てられたシステム DMA コントローラーがデバイスとの間でデータを転送するために使用するデータ バスの幅をビット単位で指定します。

u.Generic

使用しません。

u.Generic.Length

使用しません。

u.Generic.Alignment

使用しません。

u.Generic.MinimumAddress

使用しません。

u.Generic.MaximumAddress

使用しません。

u.DevicePrivate

システムで使用するために予約されています。

u.DevicePrivate.Data[3]

システムで使用するために予約されています。

u.BusNumber

次のメンバーを使用してバス番号を指定します。

u.BusNumber.Length

必要なバス番号の数。

u.BusNumber.MinBusNumber

デバイスに割り当てることができる最小バス相対バス番号。

u.BusNumber.MaxBusNumber

デバイスに割り当てることができるバス相対バスの最大数。

u.BusNumber.Reserved

使用されていません。

u.ConfigData

システムで使用するために予約されています。

u.ConfigData.Priority

システムで使用するために予約されています。

u.ConfigData.Reserved1

システムで使用するために予約されています。

u.ConfigData.Reserved2

システムで使用するために予約されています。

u.Memory40

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

ドライバーは、このメンバーを直接更新するのではなく、 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource を使用して、このメンバーの読み取りと更新を行う必要があります。

u.Memory40.Length40

割り当て可能なメモリ アドレスの範囲の 40 ビット長の上位 32 ビット (バイト単位)。 下位 8 ビットは 0 として扱われます。

u.Memory40.Alignment40

割り当てられた開始アドレスが準拠する必要がある 40 ビットアラインメントの上位 32 ビット (バイト単位)。 下位 8 ビットは 0 として扱われます。 割り当てられた開始アドレスは、アラインメントの倍数になります。

u.Memory40.MinimumAddress

デバイスに割り当てることができる最小バス相対メモリ アドレス。

u.Memory40.MaximumAddress

デバイスに割り当てることができる最大バス相対メモリ アドレス。

u.Memory48

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

ドライバーは、このメンバーを直接更新するのではなく、 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource を使用して、このメンバーの読み取りと更新を行う必要があります。

u.Memory48.Length48

割り当て可能なメモリ アドレスの範囲の 48 ビット長の上位 32 ビット (バイト単位)。 下位 16 ビットは 0 として扱われます。

u.Memory48.Alignment48

割り当てられた開始アドレスが準拠する必要がある 48 ビットアラインメントの上位 32 ビット (バイト単位)。 下位 16 ビットは 0 として扱われます。 割り当てられた開始アドレスは、アラインメントの倍数になります。

u.Memory48.MinimumAddress

デバイスに割り当てることができる最小バス相対メモリ アドレス。

u.Memory48.MaximumAddress

デバイスに割り当てることができる最大バス相対メモリ アドレス。

u.Memory64

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

ドライバーは、このメンバーを直接更新するのではなく、 RtlIoDecodeMemIoResourceRtlIoEncodeMemIoResource を使用して、このメンバーの読み取りと更新を行う必要があります。

u.Memory64.Length64

割り当て可能なメモリ アドレスの範囲の 64 ビット長の上位 32 ビット (バイト単位)。 下位 32 ビットは 0 として扱われます。

u.Memory64.Alignment64

割り当てられた開始アドレスが準拠する必要がある 64 ビットアラインメントの上位 32 ビット (バイト単位)。 下位 32 ビットは 0 として扱われます。 割り当てられた開始アドレスは、アラインメントの倍数になります。

u.Memory64.MinimumAddress

デバイスに割り当てることができる最小バス相対メモリ アドレス。

u.Memory64.MaximumAddress

デバイスに割り当てることができる最大バス相対メモリ アドレス。

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 ビット。

要件

要件
Header miniport.h (Wdm.h、Ntddk.h、Ntifs.h、Miniport.h を含む)

こちらもご覧ください

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt