フレームワーク外での WDM IRP の処理

I/O マネージャーがフレームワークベースのドライバーに I/O 要求パケット (IRP) を送信すると、フレームワークは IRP を途中で取得して、次のいずれかの処理を行います。

  • IRP を処理します。たとえば、フレームワークは、IRP_MJ_PNP および IRP_MJ_POWER メジャー I/O 関数コードが含まれた IRP を処理します。これらの IRP を処理しながら、フレームワークはドライバーのイベント コールバック関数を呼び出してドライバーと通信できます。

  • IRP のフレームワーク要求オブジェクトを作成し、通常はドライバーが要求ハンドラーで要求オブジェクトを受信して処理できるように、要求オブジェクトをドライバーの I/O キューの 1 つに送信します。フレームワークは、読み取り、書き込み、およびデバイス I/O 制御の各要求をこの方法で処理します。

  • フレームワークがサポートしない I/O 関数コードが IRP に含まれているため、IRP を次の下位ドライバー (フィルター ドライバーの場合) に渡すか、状態の値を STATUS_INVALID_DEVICE_REQUEST として IRP を処理します (フィルター ドライバー以外の場合)。

場合によっては、フレームワークがサポートしない I/O 関数コードをドライバーで処理することが必要になります。

まれなことですが、フレームワークが IRP を処理する前に、ドライバーによる前処理が必要になる場合があります。または、フレームワークおよび下位レベル ドライバーが IRP の処理を完了した後で、ドライバーによる後処理が必要になる場合があります。

次のトピックでは、これらの状況について説明しています。

フレームワークでサポートされない IRP の処理

IRP の前処理および後処理