IRP_MN_QUERY_RESOURCE_REQUIREMENTS

PnP マネージャーは、この IRP を使用して、デバイスのリソース要件の一覧を取得します。

バス ドライバーは、ハードウェア リソースを必要とする子デバイスに対してこの要求を処理する必要があります。 バス フィルター ドライバーは、この要求を処理することができます。 ファンクション ドライバーとフィルター ドライバーは、この IRP を処理しません。

0x0B

主要なコード

IRP_MJ_PNP

送信時

PnP マネージャーは、デバイスが列挙されたとき、デバイスにリソースを割り当てる前、およびドライバーがデバイスのリソース要件が変更されたことを報告するときに、この IRP を送信します。

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

入力パラメーター

なし

出力パラメーター

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

I/O 状態ブロック

この IRP を処理するドライバーは、Irp->IoStatus.Status を STATUS_SUCCESS または適切なエラー状態に設定します。

成功した場合、ドライバーは Irp->IoStatus.Information を、要求された情報を含む IO_RESOURCE_REQUIREMENTS_LIST へのポインターに設定します。 エラーの場合は、ドライバーは Irp->IoStatus.Information を 0 に設定します。

操作

バス ドライバーは、この IRP に応答してリソース要件の一覧を返す場合、ページングされたメモリから IO_RESOURCE_REQUIREMENTS_LIST を割り当てます。 不要になると、PnP マネージャーはこのバッファを解放します。

デバイスにハードウェア リソースが必要ない場合、デバイスのバス ドライバーは Irp->IoStatus.Status または Irp->IoStatus.Information を変更せずに IRP (IoCompleteRequest) を完了します。

バス フィルター ドライバーがこの IRP を処理する場合、このドライバーは、バス ドライバーによって作成されたリソース要件の一覧を変更します。 バス フィルター ドライバーは、IRP がデバイス スタックに上へと戻る途中で一覧に変更を加えます。 バス フィルター ドライバーは、リソース要件リスト内のリソースの順序を保持する必要があり、処理しないリソース タグを変更してはなりません。 バス フィルター ドライバーがリソース要件の一覧のサイズを変更する場合、このドライバーは、ページングされたメモリから新しい構造体を割り当て、前の構造体を解放する必要があります。 バス フィルター ドライバーが一覧に新しいリソース要件を追加し、リソースがデバイスに割り当てられている場合、バス フィルター ドライバーは、IRP_MN_START_DEVICE IRP から新しいリソースをフィルター処理して、バス ドライバーに渡されないようにする必要があります。

ファンクション ドライバーと非バス フィルター ドライバーは、この IRP を処理しません。Irp->IoStatus に変更を加えず、次の下位ドライバーに IRP を渡します。

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

この IRP の送信

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

要件

ヘッダー

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

関連項目

IO_RESOURCE_REQUIREMENTS_LIST