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 の参照カウントは変更されません。
- OldContext が NULL ではなく、NULL_CONTEXTを指していない場合、OldContext は現在ファイルに関連付けられているコンテキストへの参照ポインターです。 FltSetFileContext を呼び出すフィルターは、コンテキスト ポインターが不要になったときに、最終的に FltReleaseContext for OldContext を呼び出す必要があります。
成功に関係なく:
- FltSetFileContext を呼び出すフィルターは、FltAllocateContext によってインクリメントされた NewContext オブジェクトの参照カウントをデクリメントするために FltReleaseContext を呼び出す必要があります。
詳細については、「コンテキストの 参照」を参照してください。
その他のコンテキスト操作
詳細については、「コンテキストの設定」および「コンテキストの解放」を参照してください。
新しいコンテキストを割り当てるには、 FltAllocateContext を呼び出します。
ファイル コンテキストを取得するには、 FltGetFileContext を呼び出します。
ファイル コンテキストを削除するには、 FltDeleteFileContext または FltDeleteContext を呼び出します。
特定のファイルに対してファイル コンテキストがサポートされているかどうかを確認するには、 FltSupportsFileContexts または FltSupportsFileContextsEx を呼び出します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista 以降で使用可能でサポートされています。 |
対象プラットフォーム | ユニバーサル |
Header | fltkernel.h (Fltkernel.h を含む) |
Library | Fltmgr.lib |
[DLL] | Fltmgr.sys |
IRQL | <= APC_LEVEL |