ハードウェア リソースは、周辺機器とシステム プロセッサが相互に通信できるようにする、割り当て可能なアドレス指定可能なバス パスです。 ハードウェア リソースには、通常、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を参照してください)。