IRP_MJ_CLOSE (FS およびフィルター ドライバー)

送信時

I/O マネージャーは、ファイル オブジェクトの参照カウントがゼロに達したことを示す IRP_MJ_CLOSE リクエストを送信します。これは通常、ファイル システム ドライバーまたは他のカーネル モード コンポーネントがファイルオブジェクト上で ObDereferenceObject を呼び出したことが原因です。 通常、この要求はクリーンアップ要求の後に続きます。 ただし、クローズ要求はクリーンアップ要求の直後に受信されない場合があります。

操作: ファイル システム ドライバー

ターゲット デバイス オブジェクトがファイル システムの制御デバイス オブジェクトである場合、ファイル システム ドライバーは必要な処理を実行した後に IRP を完了する必要があります。

それ以外の場合、ファイル システム ドライバーは閉じる要求を処理する必要があります。

操作: レガシー ファイル システム フィルター ドライバー

ターゲット デバイス オブジェクトがフィルター ドライバーの制御デバイス オブジェクトである場合、フィルター ドライバーは、制御デバイス オブジェクトとの通信を終了するために必要な操作を行ってから、IRP を完了する必要があります。

それ以外の場合、フィルター ドライバーは必要な処理を実行してから、スタック上の次に下位のドライバーに IRP を渡す必要があります。 処理には、フィルターが保持するファイルごとおよびファイルごとのオブジェクト コンテキスト情報の削除などの操作が含まれる場合があります。

ファイル システム フィルター ドライバーの作成者は、IoCreateStreamFileObject によって IRP_MJ_CLEANUP 要求がボリュームのファイル システム ドライバー スタックに送信されることに注意する必要があります。 ファイル システムは IRP_MJ_CREATE 以外の操作の副作用としてストリーム ファイル オブジェクトを作成することが多いため、フィルター ドライバーがストリーム ファイル オブジェクトの作成を確実に検出することは困難です。 したがって、フィルター ドライバーは、以前に表示されていないファイル オブジェクトに対して IRP_MJ_CLEANUP および IRP_MJ_CLOSE 要求を受信することを想定する必要があります。

IoCreateStreamFileObjectとは異なり、IoCreateStreamFileObjectLiteIRP_MJ_CLEANUP リクエストをファイル システム ドライバ スタックに送信しないことにも注意する必要があります。 このため、また、ファイル システムは IRP_MJ_CREATE 以外の操作の副作用としてストリーム ファイル オブジェクトを作成することが多いため、フィルター ドライバーがストリーム ファイル オブジェクトの作成を確実に検出することは困難です。 したがって、フィルター ドライバーは、以前に見たことのないファイル オブジェクトに対する IRP_MJ_CLOSEリクエストを受け取ることを予期する必要があります。

パラメーター

ファイル システムまたはフィルター ドライバーは、指定された IRP を使用して IoGetCurrentIrpStackLocation を呼び出し、IRP 内の独自のスタック ロケーションへのポインターを取得します (図を参照)。次のリストでは IrpSp として示されます。 (IRP は Irp ように表示されます) ドライバーは、クローズ要求を処理する際に、IRP の次のメンバーと IRP スタックの場所に設定されている情報を使用できます。

  • デバイスオブジェクト

    ターゲットデバイスオブジェクトへのポインタ。

  • Irp->フラグ

    このリクエストには次のフラグが設定されます。

    • IRP クローズ操作
    • IRP_SYNCHRONOUS_API
  • Irp->Ioステータス

    ポインタIO_STATUS_BLOCK 最終的な完了ステータスと要求された操作に関する情報を受け取る構造体。

  • Irp->ファイルオブジェクト

    関連付けられているファイル オブジェクトへのポインタデバイスオブジェクト.

    その Irp->ファイルオブジェクト パラメータには、関連ファイルオブジェクト フィールド。これも FILE_OBJECT 構造体です。 その 関連ファイルオブジェクト FILE_OBJECT 構造体のフィールドは、IRP_MJ_CLEANUP の処理中は無効であるため、使用しないでください。

  • Irp->主要機能

    IRP_MJ_CLOSEを指定します。

関連項目

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCreateStreamFileObject

IoCreateStreamFileObjectLite

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_CLOSE (WDK カーネル リファレンス)

IRP_MJ_CLEANUP

IRP_MJ_CREATE

ObDereferenceObject