FltSetStreamHandleContext 関数 (fltkernel.h)
FltSetStreamHandleContext ルーチンは、ストリーム ハンドルのコンテキストを設定します。
構文
NTSTATUS FLTAPI FltSetStreamHandleContext(
[in] PFLT_INSTANCE Instance,
[in] PFILE_OBJECT FileObject,
[in] FLT_SET_CONTEXT_OPERATION Operation,
[in] PFLT_CONTEXT NewContext,
[out, optional] PFLT_CONTEXT *OldContext
);
パラメーター
[in] Instance
ストリーム ハンドルにアタッチされているコンテキストの一覧にコンテキストを挿入、削除、または置換するミニフィルター ドライバー インスタンスの不透明なインスタンス ポインター。
[in] FileObject
ファイル ストリームの ファイル オブジェクト へのポインター。 このパラメーターは必須であり、 NULL にすることはできません。
[in] Operation
実行する操作の詳細を指定するフラグ。 このパラメーターは、次のいずれかである必要があります。
値 | 意味 |
---|---|
FLT_SET_CONTEXT_REPLACE_IF_EXISTS | この インスタンスに対してコンテキストが既に設定されている場合、 FltSetStreamHandleContext によって NewContext で指定されたコンテキストに置き換えられます。 それ以外の場合は、ストリーム ハンドルのコンテキストの一覧に NewContext を挿入します。 |
FLT_SET_CONTEXT_KEEP_IF_EXISTS | この インスタンスに対してコンテキストが既に設定されている場合、 FltSetStreamHandleContext はSTATUS_FLT_CONTEXT_ALREADY_DEFINEDを返し、既存のコンテキストを置き換えたり、参照カウントをインクリメントしたりしません。 コンテキストがまだ設定されていない場合、ルーチンは NewContext を ストリーム ハンドルのコンテキストの一覧に挿入し、参照カウントをインクリメントします。 |
[in] NewContext
ストリーム ハンドルに設定する新しいコンテキストへのポインター。 このパラメーターは必須であり、 NULL にすることはできません。
[out, optional] OldContext
Instance パラメーターの既存のストリーム ハンドル コンテキストのアドレスを受け取る呼び出し元によって割り当てられた変数へのポインター (既に設定されている場合)。 このパラメーターは省略可能であり、 NULL にすることができます。 このパラメーターの詳細については、次の「解説」セクションを参照してください。
戻り値
FltSetStreamHandleContext ルーチンは、次のいずれかのエラー コードなど、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 | 指定された インスタンス が破棄されています。 これはエラー コードです。 |
STATUS_INVALID_PARAMETER | 無効なパラメーターが渡されました。 たとえば、 NewContext パラメーターが有効なストリーム ハンドル コンテキストを指していないか、 Operation に無効な値が指定されています。 |
STATUS_NOT_SUPPORTED | ファイル システムがこのファイル ストリームのストリームごとのコンテキストをサポートしていないか、呼び出し元が NULL FileObject を指定したなど、サポートされていない状況が発生しました。 |
注釈
コンテキストの詳細については、「 ミニフィルター コンテキストについて」を参照してください。
FltSetStreamHandleContext ルーチンは、ストリーム ハンドルのミニフィルター ドライバー インスタンスのコンテキストを追加、削除、または置き換えます。 ミニフィルター ドライバーは、ミニフィルター ドライバー インスタンスごとに 1 つのコンテキストをストリーム ハンドルにアタッチできます。
FltSetStreamHandleContext は、開いていない FileObject で呼び出すことはできません。 そのため、 FltSetStreamHandleContext は、ストリームの事前作成コールバックから呼び出すことはできません。これは、その時点でストリームが開かれていないためです。 ただし、ミニフィルターでは、事前作成コールバックでストリーム ハンドル コンテキストを割り当てて設定し、完了コンテキスト パラメーターを使用して作成後コールバックに渡し、作成後コールバックでストリーム ハンドル コンテキストをストリームに設定できます。
参照カウント
FltSetStreamHandleContext が成功した場合:
- NewContext の参照カウントがインクリメントされます。 NewContext が不要になった場合、ミニフィルターは FltReleaseContext を呼び出して参照カウントをデクリメントする必要があります。
FltSetStreamHandleContext が失敗した場合は、それ以外の場合:
- NewContext の参照カウントは変更されません。
- OldContext が NULL ではなく、NULL_CONTEXTを指していない場合、OldContext は現在ストリーム ハンドルに関連付けられているコンテキストへの参照ポインターです。 FltSetStreamHandleContext を呼び出すフィルターは、コンテキスト ポインターが不要になった場合にも、OldContext に対して FltReleaseContext を呼び出す必要があります。
成功に関係なく:
- FltSetStreamHandleContext を呼び出すフィルターでは、FltAllocateContext によってインクリメントされた NewContext オブジェクトの参照カウントをデクリメントするために FltReleaseContext を呼び出す必要があります。
詳細については、「コンテキストの 参照」を参照してください。
その他のコンテキスト操作
詳細については、「コンテキストの設定」および「コンテキストの解放」を参照してください。
ストリーム ハンドル コンテキストが特定のファイルでサポートされているかどうかを確認するには、FltSupportsStreamHandleContexts を呼び出します。
新しいコンテキストを割り当てるには、 FltAllocateContext を呼び出します。
ストリーム ハンドル コンテキストを取得するには、 FltGetStreamHandleContext を呼び出します。
ストリーム ハンドル コンテキストを削除するには、 FltDeleteStreamHandleContext または FltDeleteContext を呼び出します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Microsoft Windows 2000 Update Rollup 1 for SP4、Windows XP SP2、Windows Server 2003 SP1、およびそれ以降のオペレーティング システムで使用でき、サポートされています。 |
対象プラットフォーム | ユニバーサル |
Header | fltkernel.h (Fltkernel.h を含む) |
Library | Fltmgr.lib |
[DLL] | Fltmgr.sys |
IRQL | <= APC_LEVEL |