ハードウェア リソース

ハードウェア リソースは、周辺機器とシステム プロセッサが相互に通信できるようにする、割り当て可能およびアドレス指定可能なバス パスです。 ハードウェア リソースには通常、I/O ポート アドレス、割り込みベクトル、バス相対メモリ アドレスのブロックが含まれています。

システムがデバイス インスタンスと通信する前に、PnP マネージャーは、使用可能なリソースとデバイス インスタンスが使用できるリソースに関する情報に基づいて、ハードウェア リソースをデバイス インスタンスに割り当てる必要があります。 リソースは、デバイス ツリー内の各デバイス ノードに割り当てられます (表されているデバイスにリソースが必要であり、それらのリソースが使用可能であると仮定します)。 PnP マネージャーは、デバイス ノードに関連付けるリストを使ってハードウェア リソースを追跡します。 以下の 2 種類のリストを使用します。

リソース要件リスト
通常、デバイスはリソース割り当ての範囲内で動作するよう設計されています。 たとえば、デバイスに必要な割り込みベクトルは 1 つだけですが、任意の範囲のベクターを使用できる可能性があります。 デバイス インスタンスごとに、PnP マネージャーには、デバイスが動作できるハードウェア リソースのすべての範囲を指定するリソース要件リストが保持されます。 リストの名前は、PnP マネージャーがデバイスに割り当てるときに、このリストからリソースを選択する必要があるという事実に由来します。

カーネル モード コードは、(システム ルーチンへの入力として、または IRP への応答として) IO_RESOURCE_REQUIREMENTS_LIST 構造を使ってリソース要件リストを指定します。 ユーザー モード コードは、PnP 構成マネージャー関数への入力として PnP 構成マネージャー構造を使ってリソース要件リストを指定します。

リソース リスト
PnP マネージャーは、デバイスにリソースを割り当てるとき、各デバイス インスタンスに割り当てられたリソースのリストを作成することにより、これらの割り当てを追跡します。 これらのリストは、リソース割り当てリストと呼ばれる場合がありますが、通常、その名前はリソース リストに短縮されます。 PnP マネージャーは、デバイスがシステムに追加または削除され、その後リソースが再割り当てされると、リソース リストの内容を変更することができます。 (リソースは PnP BIOS によって割り当てることもできます。さらに、インストール ソフトウェアは、INF ファイルまたはユーザー入力を使用して、特定のリソースをデバイスに割り当てることを PnP マネージャーに強制できます)。

カーネル モード コードは、(システム ルーチンへの入力として、または IRP への応答として) CM_RESOURCE_LIST 構造を使用してリソース リストを指定します。 ユーザー モード コードは、PnP 構成マネージャー関数への入力として PnP 構成マネージャー構造を使ってリソース リストを指定します。

PnP マネージャーは、リソース要件リストとリソース リストをレジストリに格納します。これらは、Regedit.exe を使用して表示できます。 ドライバーは、プラグ アンド プレイ ルーチンとプラグ アンド プレイ マイナー IRP を通じて、これらのリストに間接的にアクセスできます。 ユーザー モード アプリケーションでは、PnP 構成マネージャー関数を使用できます。 (ストレージ形式は将来のリリースで変更される可能性があるため、ドライバーとアプリケーションがレジストリ関数を使ってこれらのリストに直接アクセスすることはできません)。

論理構成

リソース要件リストとリソース リストのどちらにも、1 つ以上の論理構成が含まれています。 各論理構成は、受け入れ可能なリソースの範囲、または特定のデバイス インスタンスの特定のリソースのセットを識別します。 加えて、デバイス インスタンスの各論理構成は、いずれかの論理構成の種類に属しています。 構成の種類を以下に示します。 同じ種類または異なる種類の複数の論理構成が、各デバイス インスタンスに割り当てられる場合があります。

リソース要件リストの論理構成の種類

基本構成
プラグ アンド プレイ デバイスによって提供されるリソース範囲を識別するリソース要件リスト。 ドライバーは、IRP_MN_QUERY_RESOURCE_REQUIREMENTS IRP を受け取ったときに、このリストを返す必要があります。 (PnP 以外のデバイスの基本的な構成は、INF ファイルで記述できます。この場合、デバイス インストール ソフトウェアは INF ファイルを読み取り、PnP 構成マネージャー関数を呼び出して要件リストを作成します)。

フィルター処理された構成
IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP に応答して、ドライバー スタックに提供され、場合によっては変更され、その後ドライバー スタックによって返されるリソース要件リスト。 PnP マネージャーは、結果としてフィルター処理された構成を、リソースの割り当て基準として使用します。

オーバーライド構成
基本的な構成をオーバーライドするリソース要件リスト。 通常、デバイスの INF ファイルに INF DDInstall.LogConfigOverride セクションが含まれている場合、デバイス インストーラーはオーバーライド構成を作成します。 オーバーライド構成は、そのデバイスがシステムから物理的に削除された場合、削除されません。

リソース リストの論理構成の種類

ブート構成
システムの起動時にデバイス インスタンスに割り当てられたリソースを識別するリソース リスト。 (PnP デバイスの場合、これは BIOS によって提供される構成です。PnP 以外のデバイスの場合、これらのリソースはカードのジャンパーによって選択される可能性があります)。ドライバーは、IRP_MN_QUERY_RESOURCES IRP を受け取ったときに、このリソース リストを返す必要があります。 (デバイスによって使用されるすべてのリソースを BIOS が特定できない場合、ブート構成を部分的に空にすることができます)。PnP マネージャーは、デバイスが削除または再起動された場合に、このリストを変更できます。 PnP 以外のデバイスの場合、この構成の種類は、強制構成の代わりに使用することができます。その場合、同等の強制構成よりも構成の優先順位が低くなります。 デバイス インスタンスごとに存在できるブート構成は 1 つだけです。

強制構成
デバイス インスタンスで使用する必要があるリソースを識別するリソース リスト。 強制構成では、PnP マネージャーがデバイス インスタンスに他のリソースを割り当てることができません。 デバイス インストーラーは、INF に含まれている情報か、ユーザーから受信した情報に基づいて、強制構成を作成することがあります。 強制構成は、そのデバイスがシステムから物理的に削除された場合、削除されません。 デバイス インスタンスごとに存在できる強制構成は 1 つだけです。

割り当て済み構成
デバイス インスタンスによって現在使用されているリソースを識別するリソース リスト。 デバイス インスタンスごとに存在できる割り当て済み構成は 1 つだけです。

デバイス ドライバーは、PnP と互換性のあるデバイスの基本構成、フィルター処理された構成、ブート構成を決定し、PnP マネージャーによって送信された IRP に応答してその情報を返す役割を担います。 (詳しくは、「実行中のシステムへの PnP デバイスの追加」を参照)。ドライバー インストール ソフトウェアでは、オーバーライド構成、強制構成、および PnP 以外のデバイス場合はブート構成を作成できます。 PnP マネージャーには、各デバイス インスタンスの割り当て済み構成が保持されます。

優先順位は、作成時に各構成に割り当てられます。 PnP マネージャーは、デバイス インスタンスに同じ種類の複数の論理構成が割り当てられていることが判明した場合、優先度が最も高いものをまず使用しようとします。 その構成の結果リソースの競合が発生した場合、次に優先順位が低い構成が試行されます。 (構成の優先順位の一覧については、CM_Add_Empty_Log_Conf を参照)。