次の方法で共有


FltSetFileContext 関数 (fltkernel.h)

FltSetFileContext ルーチンは、ファイルのコンテキストを設定します。

構文

NTSTATUS FLTAPI FltSetFileContext(
  [in]  PFLT_INSTANCE             Instance,
  [in]  PFILE_OBJECT              FileObject,
  [in]  FLT_SET_CONTEXT_OPERATION Operation,
  [in]  PFLT_CONTEXT              NewContext,
  [out] PFLT_CONTEXT              *OldContext
);

パラメーター

[in] Instance

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

[in] FileObject

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

[in] Operation

FltSetFileContext が実行する操作の種類を指定するフラグ。 このパラメーターは、次のいずれかのフラグである必要があります。

フラグ 説明
FLT_SET_CONTEXT_REPLACE_IF_EXISTS FileObject パラメーターが指すファイルにコンテキストが既に設定されている場合、FltSetFileContext はそのコンテキストを NewContext で指定されたコンテキストに置き換えます。 それ以外の場合、ファイルのコンテキストの一覧に NewContext が挿入されます。
FLT_SET_CONTEXT_KEEP_IF_EXISTS FileObject が指すファイルにコンテキストが既に設定されている場合、FltSetFileContext はSTATUS_FLT_CONTEXT_ALREADY_DEFINEDを返し、既存のコンテキストを置き換えたり、参照カウントをインクリメントしたりしません。 コンテキストがまだ設定されていない場合、ルーチンは NewContext で指定されたコンテキストをファイルのコンテキストの一覧に挿入し、参照カウントをインクリメントします。

[in] NewContext

ファイルに設定する新しいコンテキストへのポインター。 このパラメーターは必須であり、 NULL にすることはできません。

[out] OldContext

呼び出し元によって割り当てられた変数へのポインター。Instance パラメーターが既に設定されている場合は、 その インスタンスの既存のファイル コンテキストのアドレスを受け取ります。 このパラメーターは省略可能であり、 NULL にすることができます。 このパラメーターの詳細については、次の「解説」セクションを参照してください。

戻り値

FltSetFileContext ルーチンは、次のいずれかのSTATUS_SUCCESSまたは適切な NTSTATUS 値を返します。

リターン コード 説明
STATUS_FLT_CONTEXT_ALREADY_DEFINED Operation パラメーターにFLT_SET_CONTEXT_KEEP_IF_EXISTSが指定されている場合、このエラー コードは、コンテキストが既にファイルにアタッチされていることを示します。
STATUS_FLT_CONTEXT_ALREADY_LINKED NewContext パラメーターが指すコンテキストは、オブジェクトに既にリンクされています。 言い換えると、このエラー コードは、FltSetXxxコンテキスト ルーチンの以前の呼び出しが成功したため、NewContext が既に使用されていることを示します。
STATUS_FLT_DELETING_OBJECT Instance パラメーターで指定された インスタンス が破棄されています。 これはエラー コードです。
STATUS_INVALID_PARAMETER 無効なパラメーターが渡されました。 たとえば、 NewContext パラメーターが有効なファイル コンテキストを指していないか、 Operation パラメーターに無効な値が指定されました。 これはエラー コードです。
STATUS_NOT_SUPPORTED ファイル コンテキストは、このファイルではサポートされていません。 これはエラー コードです。

注釈

コンテキストの詳細については、「 ミニフィルター コンテキストについて」を参照してください。

ミニフィルター ドライバーは FltSetFileContext を呼び出して、ファイル上の独自のファイル コンテキストを設定または置換します。 ミニフィルター ドライバーは、ミニフィルター ドライバー インスタンスごとに 1 つのコンテキストのみをファイルにアタッチできます。

FltSetFileContext は、開いていない FileObject で呼び出すことはできません。 そのため、 FltSetFileContext は、その時点でファイルが開かないため、ファイルの事前作成コールバックから呼び出すことはできません。 ただし、ミニフィルター ドライバーは、事前作成コールバックでファイル コンテキストを割り当てて設定し、完了コンテキスト パラメーターを使用して作成後コールバックに渡し、作成後コールバックでそのストリームに対応するファイルにファイル コンテキストを設定できます。

参照カウント

FltSetFileContext が成功した場合:

  • NewContext の参照カウントがインクリメントされます。 NewContext が不要になった場合、ミニフィルターは FltReleaseContext を呼び出して参照カウントをデクリメントする必要があります。

FltSetFileContext が失敗した場合は、それ以外の場合:

  • NewContext の参照カウントは変更されません。
  • OldContextNULL ではなく、NULL_CONTEXTを指していない場合、OldContext は現在ファイルに関連付けられているコンテキストへの参照ポインターです。 FltSetFileContext を呼び出すフィルターは、コンテキスト ポインターが不要になったときに、最終的に FltReleaseContext for OldContext を呼び出す必要があります。

成功に関係なく:

  • FltSetFileContext を呼び出すフィルターは、FltAllocateContext によってインクリメントされた NewContext オブジェクトの参照カウントをデクリメントするために FltReleaseContext を呼び出す必要があります。

詳細については、「コンテキストの 参照」を参照してください。

その他のコンテキスト操作

詳細については、「コンテキストの設定」および「コンテキストの解放」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Vista 以降で使用可能でサポートされています。
対象プラットフォーム ユニバーサル
Header fltkernel.h (Fltkernel.h を含む)
Library Fltmgr.lib
[DLL] Fltmgr.sys
IRQL <= APC_LEVEL

こちらもご覧ください

FLT_CONTEXT_REGISTRATION

FltAllocateContext

FltDeleteContext

FltDeleteFileContext

FltGetFileContext

FltReleaseContext

FltSupportsFileContexts

FltSupportsFileContextsEx