次の方法で共有


FltCancelFileOpen 関数 (fltkernel.h)

ミニフィルター ドライバーは、FltCancelFileOpen ルーチンを使用して、新しく開かれたファイルまたは作成されたファイルを閉じます。

構文

VOID FLTAPI FltCancelFileOpen(
  [in] PFLT_INSTANCE Instance,
  [in] PFILE_OBJECT  FileObject
);

パラメーター

[in] Instance

呼び出し元の不透明なインスタンス ポインター。 このパラメーターは必須であり、NULL することはできません。

[in] FileObject

ファイルのファイル オブジェクト ポインター。 このパラメーターは必須であり、NULL することはできません。

戻り値

何一つ

備考

ミニフィルター ドライバーは、ファイル システムが既に成功した NTSTATUS 値 (STATUS_SUCCESS など) の操作を完了した後に、ファイルを開くまたはファイルの作成 (IRP_MJ_CREATE) 操作が失敗する必要があると判断した場合、ミニフィルター ドライバーは、作成後のコールバック ルーチンから FltCancelFileOpen を呼び出してファイルを閉じます。

STATUS_REPARSEは成功 NTSTATUS 値ですが、STATUS_REPARSEで完了した作成操作に対して FltCancelFileOpen 呼び出す必要はありません。これは、ファイルが正常に開かれていないことを示します。
 
FltCancelFileOpen 正常に呼び出されると、ミニフィルター ドライバーインスタンス スタックの呼び出し元より上にあるミニフィルター ドライバーとレガシ フィルターに対して、作成要求が失敗したように見えます。 呼び出し元の下にあるものに対して、ファイルは開かれた (または作成された) ように見え、その後閉じられたように見えます。

FltCancelFileOpen ファイルの変更は元に戻しません。 たとえば、FltCancelFileOpen は、新しく作成されたファイルを削除したり、上書きまたは以前の状態に置き換えられたファイルを復元したりすることはありません。

FltCancelFileOpen 、ファイルのハンドルを作成する前に呼び出す必要があります。 呼び出し元は、FileObject パラメーターが指す FILE_OBJECT 構造体の Flags メンバーを確認できます。 FO_HANDLE_CREATED フラグが設定されている場合は、ファイルに対して 1 つ以上のハンドルが作成されているため、FltCancelFileOpen 呼び出しても安全ではありません。

FltCancelFileOpen 、FileObject が指すファイル オブジェクトの Flags メンバーのFO_FILE_OPEN_CANCELLED フラグ 設定します。 このフラグは、作成操作が取り消されたことを示し、このファイル オブジェクトに対して close (IRP_MJ_CLOSE) 要求が発行されます。

作成操作が取り消されると、再発行できません。 詳細については、FltReissueSynchronousIo を参照してください。

FltCancelFileOpen は、ミニフィルター ドライバーの作成後コールバック ルーチンからのみ呼び出すことができます。 他の種類の I/O 操作 ポスト操作コールバック (PFLT_POST_OPERATION_CALLBACK) ルーチンから FltCancelFileOpen を呼び出すか、プリ操作コールバック (PFLT_PRE_OPERATION_CALLBACK) ルーチンから呼び出すことは、プログラミング エラーです。

FltCancelFileOpen の呼び出し元 IRQL PASSIVE_LEVELで実行されている必要があります。 ただし、ミニフィルター ドライバーは、作成後のコールバック ルーチンからこのルーチンを呼び出しても安全です。これは、作成後のコールバック ルーチンは、IRP_MJ_CREATE要求を発生させたスレッドのコンテキストで IRQL PASSIVE_LEVELで呼び出される保証があるためです。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー fltkernel.h (Fltkernel.h を含む)
ライブラリ FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL (「解説」セクションを参照)

関連項目

FILE_OBJECT

FLT_CALLBACK_DATA

FLT_IS_REISSUED_IO

IRP_MJ_CREATE FLT_PARAMETERS

FltReissueSynchronousIo する

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCancelFileOpen

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK