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 を呼び出してファイルを閉じます。
FltCancelFileOpen では、ファイルの変更は元に戻されないことに注意してください。 たとえば、 FltCancelFileOpen は、新しく作成されたファイルを削除したり、上書きまたは以前の状態に置き換えられたファイルを復元したりすることはありません。
ファイルのハンドルを作成する前に、FltCancelFileOpen を呼び出す必要があります。 呼び出し元は、FileObject パラメーターが指すFILE_OBJECT構造体の Flags メンバーをチェックできます。 FO_HANDLE_CREATED フラグが設定されている場合は、ファイルに対して 1 つ以上のハンドルが作成されているため、 FltCancelFileOpen を呼び出しても安全ではありません。
FltCancelFileOpenは、FileObject が指すファイル オブジェクトの Flags メンバーのFO_FILE_OPEN_CANCELLED フラグを設定します。 このフラグは、作成操作が取り消され、このファイル オブジェクトに対してクローズ (IRP_MJ_CLOSE) 要求が発行されることを示します。
作成操作が取り消されると、再発行することはできません。 詳細については、「 FltReissueSynchronousIo」を参照してください。
FltCancelFileOpen は、ミニフィルター ドライバーの作成後のコールバック ルーチンからのみ呼び出すことができます。 他の種類の I/O 操作に対して Postoperation コールバック (PFLT_POST_OPERATION_CALLBACK) ルーチンから FltCancelFileOpen を呼び出すか、事前操作コールバック (PFLT_PRE_OPERATION_CALLBACK) ルーチンから呼び出すことは、プログラミング エラーです。
FltCancelFileOpen の呼び出し元は、IRQL PASSIVE_LEVELで実行されている必要があります。 ただし、ミニフィルター ドライバーは、作成後のコールバック ルーチンからこのルーチンを呼び出しても安全です。これは、作成後のコールバック ルーチンは、IRP_MJ_CREATE要求を発生させたスレッドのコンテキストで IRQL PASSIVE_LEVELで呼び出される保証があるためです。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | fltkernel.h (Fltkernel.h を含む) |
Library | FltMgr.lib |
[DLL] | Fltmgr.sys |
IRQL | PASSIVE_LEVEL (「解説」セクションを参照) |