次の方法で共有


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 フラグを設定します。 このフラグは、作成操作が取り消され、このファイル オブジェクトに対してクローズ (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 (「解説」セクションを参照)

こちらもご覧ください

FILE_OBJECT

FLT_CALLBACK_DATA

FLT_IS_REISSUED_IO

FLT_PARAMETERS (IRP_MJ_CREATE 用)

FltReissueSynchronousIo

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCancelFileOpen

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK