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 パラメーターが指すコンテキストは、既にオブジェクトにリンクされています。 言い換えると、このエラー コードは、NewContext が既に使用されていることを示しています。これは、FltSetXxxContext ルーチンが正常に呼び出されたためです。 |
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 呼び出すフィルターは、コンテキスト ポインターが不要になったときに、最終的に、OldContext の FltReleaseContext 呼び出す必要があります。
成功に関係なく:
- FltSetFileContext 呼び出すフィルターは、FltReleaseContext呼び出して、FltAllocateContextによってインクリメントされた NewContext オブジェクト参照カウントを減らす必要があります。
詳細については、「コンテキストの参照」を参照してください。
その他のコンテキスト操作
詳細については、「コンテキストの設定」および「コンテキストの解放」を参照してください。
ファイル コンテキストを削除するには、FltDeleteFileContext呼び出すか、FltDeleteContextをします。
特定のファイルに対してファイル コンテキストがサポートされているかどうかを確認するには、FltSupportsFileContexts呼び出すか、FltSupportsFileContextsEx呼び出します。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista 以降で使用可能でサポートされています。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | fltkernel.h (Fltkernel.h を含む) |
ライブラリ | Fltmgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |
関連項目
FltAllocateContextの
FltDeleteContextの
FltDeleteFileContextの
FltGetFileContextの
FltReleaseContextの
FltSupportsFileContextsの
FltSupportsFileContextsExの