次の方法で共有


IRP_MJ_CLEANUP (FS および FS フィルター)

送信時

IRP_MJ_CLEANUP リクエストの受信は、ファイル オブジェクトのハンドル参照カウントがゼロに達したことを示します。 (言い換えると、ファイル オブジェクトへのすべてのハンドルが閉じられています。) 多くの場合、ユーザー モード アプリケーションが Win32 メソッドを呼び出したときに送信されます。クローズハンドル 関数 (またはカーネル モード ドライバーが呼び出したとき) Zw閉じる) ファイル オブジェクトへの最後の未処理のハンドル。

ファイル オブジェクトへのすべてのハンドルが閉じられている場合でも、ファイル オブジェクトがまだ使用されている可能性があることに注意することが重要です。 キャッシュ マネージャーやメモリ マネージャーなどのシステム コンポーネントは、ファイル オブジェクトへの未解決の参照を保持している可能性があります。 これらのコンポーネントは、IRP_MJ_CLEANUP リクエストを受信した後でも、ファイルの読み取りまたはファイルへの書き込みを行うことができます。

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

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

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

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

ターゲット デバイス オブジェクトがフィルター ドライバーの制御デバイス オブジェクトである場合、フィルター ドライバーは IRP を完了する必要があります。

それ以外の場合、フィルター ドライバーは、必要な処理を実行した後、スタック上の次に下位のドライバーに IRP を渡す必要があります。

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

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

パラメーター

ファイル システムまたはレガシー フィルター ドライバーは、指定された IRP で IoGetCurrentIrpStackLocation を呼び出し、IRP 内の独自の stack location へのポインターを取得します。次のリストでは 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_CLEANUP を指定します。

関連項目

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCreateStreamFileObject

IoCreateStreamFileObjectLite

IoGetCurrentIrpStackLocation

IRP

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

IRP_MJ_CLOSE

IRP_MJ_CREATE

ZwClose