IRP_MN_FILTER_RESOURCE_REQUIREMENTS

PnP マネージャーは、必要に応じて、ファンクション ドライバーがデバイスに必要なリソースを調整できるように、デバイス スタックにこの IRP を送信します。

通常、この IRP はファンクション ドライバーが処理します。

親バス ドライバー (およびバス フィルター ドライバー) は、子 PDO に対してこの要求を処理してはなりません。代わりに、このようなドライバーは、IRP_MN_QUERY_RESOURCE_REQUIREMENTS 要求に応答してリソース要件を報告する必要があります。

上位および下位のフィルター ドライバーは、この IRP を処理しません。

0x0D

主要なコード

IRP_MJ_PNP

送信時

PnP マネージャーは、デバイスへのリソースの割り当てを準備をしているときに、この IRP を送信します。

PnP マネージャーは、任意のスレッドのコンテキストの IRQL PASSIVE_LEVEL でこの IRP を送信します。

入力パラメーター

Irp->IoStatus.Information は、デバイスのハードウェア リソース要件を含む IO_RESOURCE_REQUIREMENTS_LIST を指します。 デバイスがハードウェア リソースを消費しない場合、ポインターは NULL です。

Parameters.FilterResourceRequirements.IoResourceRequirementListIO_RESOURCE_REQUIREMENTS_LIST を指していますが、ファンクション ドライバーは IoStatus ブロック内のリストを使用する必要があります。

出力パラメーター

I/O 状態ブロックで返されます。

I/O 状態ブロック

ファンクション ドライバーがこの IRP を処理する場合、ドライバーは、IRP がスタックを上へと戻る途中でこれを処理します。 ファンクション ドライバーは、IRP を正常に処理すると、Irp->IoStatus.Status を STATUS_SUCCESS に設定し、Irp->IoStatus.Information を、フィルター処理されたリソース要件が含まれている IO_RESOURCE_REQUIREMENTS_LIST へのポインターに設定します。 フィルター処理されたリソース一覧の設定の詳細については、以下の「操作」セクションを参照してください。 この IRP の処理中にファンクション ドライバーでエラーが発生した場合は、ドライバーは Irp->IoStatus.Status でこのエラーを設定します。 ファンクション ドライバーは、この IRP を処理しない場合は、IoSkipCurrentIrpStackLocation を使用して、変更を加えずに IRP をスタックの下へと渡します。

上位および下位のフィルター ドライバーは、この IRP を処理しません。 このようなドライバーは、IoSkipCurrentIrpStackLocation を呼び出し、IRP を次の下位ドライバーに渡します。Irp->IoStatus の変更も、IRP の完了もしてはなりません。

親バス ドライバーは、この IRP を処理しません。 Irp->IoStatus をそのまま残して、この IRP を完了します。

操作

PnP マネージャーは、ファンクション ドライバーがデバイス スタックにデバイス オブジェクトをアタッチする前に、デバイスの親バス ドライバーに IRP_MN_QUERY_RESOURCE_REQUIREMENTS 要求を送信します。 ファンクション ドライバーにデバイスのリソース要件を変更する機会を与えるために、PnP マネージャーは、後で必要に応じて、デバイス スタック全体に IRP_MN_FILTER_RESOURCE_REQUIREMENTS 要求を送信します。 PnP マネージャーは、デバイスの初期構成中にデバイスにハードウェア リソースを割り当てる前に、この IRP を送信します。 また、PnP マネージャーは、リソースの再調整中にこの IRP を送信することもできます。

PnP マネージャーは、この IRP を送信すると、ドライバー スタックにドライバーが変更を加えて返すことができるリソース要件の一覧を提供します。 PnP マネージャーは、次のいずれかの種類のリソース要件リストを提供します (優先度順に一覧表示しています)。

  • 強制構成 (リソース リストからリソース要件リストに変更)

  • 構成をオーバーライドする

  • 基本コンフィギュレーション

  • 起動構成 (リソース リストからリソース要件リストに変更)

ファンクション ドライバーは、この IRP を処理する場合、完了ルーチンを設定し、デバイス スタックを上へと戻る途中で IRP を処理する必要があります。 デバイス スタックを上へと戻る際の PnP IRP の処理については、「プラグ アンド プレイ」を参照してください。

ファンクション ドライバーは、Irp->IoStatus.Information が指している現在のリストのサイズを変更しない場合、一覧に変更を加えることができます。 ドライバーが要件リストのサイズを変更する必要がある場合、ドライバーは、ページングされたメモリから新しい IO_RESOURCE_REQUIREMENTS_LIST リストを割り当て、前の一覧を解放する必要があります。 不要になると、PnP マネージャーは返された構造体を解放します。

ファンクション ドライバーは、Irp->IoStatus.Information が指すリスト内のリソースの順序を保持する必要があります。また、ドライバー自身が処理しないリソース タグを変更してはなりません。 ドライバーは、デバイスの親バスがサポートする方法で要件の一覧が調整されるように注意する必要があります。 ファンクション ドライバーが要件一覧に新しいリソースを追加し、そのリソースがデバイスに割り当てられる場合、ファンクション ドライバーは、開始 IRP をバス ドライバーに渡す前に、IRP_MN_START_DEVICE からそのリソースをフィルター処理する必要があります。

デバイスのファンクション ドライバーがこの IRP を処理しない場合は、PnP マネージャーが、IRP_MN_QUERY_RESOURCE_REQUIREMENTS 要求に応答して、親バス ドライバーで指定されたリソース要件を使用します。

デバイスに対してドライバーの AddDevice ルーチンが呼び出された後は、ファンクション ドライバーは、いつでもデバイスに対してこの IRP を処理する準備ができている必要があります。

プラグ アンド プレイのマイナー IRP の処理に関する一般的な規則については、「プラグ アンド プレイ」を参照してください。

この IRP の送信

システムで使用するために予約されています。 ドライバーは、この IRP を送信することはできません。

要件

ヘッダー

Wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)

関連項目

ExAllocatePoolWithTag

ExFreePool

IO_RESOURCE_REQUIREMENTS_LIST

IRP_MN_START_DEVICE