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 ポート アドレスの範囲を指定します。
ドライバーは、このメンバーを直接更新するのではなく、 RtlIoDecodeMemIoResource と RtlIoEncodeMemIoResource を使用してこのメンバーを読み取って更新する必要があります。
u.Port.Length
割り当て可能な I/O ポート アドレスの範囲の長さ (バイト単位)。
u.Port.Alignment
割り当てられた開始アドレスが準拠する必要があるアラインメント (バイト単位)。 割り当てられた開始アドレスは、 Alignment の整数倍数である必要があります。
u.Port.MinimumAddress
デバイスに割り当てることができる最小バス相対 I/O ポート アドレス。
u.Port.MaximumAddress
デバイスに割り当てることができる最大バス相対 I/O ポート アドレス。
u.Memory
次のメンバーを使用して、メモリ アドレスの範囲を指定します。
ドライバーは、このメンバーを直接更新するのではなく、 RtlIoDecodeMemIoResource と RtlIoEncodeMemIoResource を使用してこのメンバーを読み取って更新する必要があります。
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 メンバーは、デバイスの割り込みを処理するプロセッサのセットを識別するグループ アフィニティを指定します。 特定のグループのアフィニティを指定するには、 AffinityPolicy を IrqPolicySpecifiedProcessors に設定し、 Group を 適切なグループ番号に設定します。 さらに、 TargetedProcessors は 、グループ内のターゲット プロセッサを指定する必要があります。 AffinityPolicy を IrqPolicySpecifiedProcessors 以外の値に設定する場合は、ドライバーがグループ対応であることを示す (つまり、プロセッサ グループに関する情報を処理するように設計されている) ことを示すには、Group を ALL_PROCESSOR_GROUPS に設定します。 グループが ALL_PROCESSOR_GROUPS と等しい場合、ドライバーはターゲット プロセッサを指定できません。このようなターゲット指定は無視されます。
u.Interrupt.PriorityPolicy
システム がデバイス の割り込みをディスパッチする優先度を示すIRQ_PRIORITY値を指定します。
u.Interrupt.TargetedProcessors
デバイスの割り込みを処理するプロセッサを示す KAFFINITY 値を指定します。 この値は、AffinityPolicy が IrqPolicySpecifiedProcessors の場合にのみ使用されます。
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
次のメンバーを使用して、メモリ アドレスの範囲を指定します。
ドライバーは、このメンバーを直接更新するのではなく、 RtlIoDecodeMemIoResource と RtlIoEncodeMemIoResource を使用して、このメンバーの読み取りと更新を行う必要があります。
u.Memory40.Length40
割り当て可能なメモリ アドレスの範囲の 40 ビット長の上位 32 ビット (バイト単位)。 下位 8 ビットは 0 として扱われます。
u.Memory40.Alignment40
割り当てられた開始アドレスが準拠する必要がある 40 ビットアラインメントの上位 32 ビット (バイト単位)。 下位 8 ビットは 0 として扱われます。 割り当てられた開始アドレスは、アラインメントの倍数になります。
u.Memory40.MinimumAddress
デバイスに割り当てることができる最小バス相対メモリ アドレス。
u.Memory40.MaximumAddress
デバイスに割り当てることができる最大バス相対メモリ アドレス。
u.Memory48
次のメンバーを使用して、メモリ アドレスの範囲を指定します。
ドライバーは、このメンバーを直接更新するのではなく、 RtlIoDecodeMemIoResource と RtlIoEncodeMemIoResource を使用して、このメンバーの読み取りと更新を行う必要があります。
u.Memory48.Length48
割り当て可能なメモリ アドレスの範囲の 48 ビット長の上位 32 ビット (バイト単位)。 下位 16 ビットは 0 として扱われます。
u.Memory48.Alignment48
割り当てられた開始アドレスが準拠する必要がある 48 ビットアラインメントの上位 32 ビット (バイト単位)。 下位 16 ビットは 0 として扱われます。 割り当てられた開始アドレスは、アラインメントの倍数になります。
u.Memory48.MinimumAddress
デバイスに割り当てることができる最小バス相対メモリ アドレス。
u.Memory48.MaximumAddress
デバイスに割り当てることができる最大バス相対メモリ アドレス。
u.Memory64
次のメンバーを使用して、メモリ アドレスの範囲を指定します。
ドライバーは、このメンバーを直接更新するのではなく、 RtlIoDecodeMemIoResource と RtlIoEncodeMemIoResource を使用して、このメンバーの読み取りと更新を行う必要があります。
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 を含む) |