次の方法で共有


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 操作に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 ファイル システムがこのファイル ストリームのストリームごとのコンテキストをサポートしていない、または呼び出し元が fileObject に NULLを指定するなど、サポートされていない状況が発生しました。

備考

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

FltSetStreamHandleContext ルーチンは、ストリーム ハンドル上のミニフィルター ドライバー インスタンスのコンテキストを追加、削除、または置き換えます。 ミニフィルター ドライバーは、ミニフィルター ドライバー インスタンスごとに 1 つのコンテキストをストリーム ハンドルにアタッチできます。

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

参照カウント

FltSetStreamHandleContext 成功した場合:

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

FltSetStreamHandleContext 失敗した場合は、次のようになります。

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

成功に関係なく:

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

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

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

  • ストリーム ハンドル コンテキストが特定のファイルでサポートされているかどうかを確認するには、FltSupportsStreamHandleContexts 呼び出

  • 新しいコンテキストを割り当てるには、FltAllocateContext呼び出します。

  • ストリーム ハンドル コンテキストを取得するには、FltGetStreamHandleContext呼び出します。

  • ストリーム ハンドル コンテキストを削除するには、FltDeleteStreamHandleContext呼び出すか、FltDeleteContextを呼び出します。

必要条件

要件 価値
サポートされる最小クライアント Microsoft Windows 2000 Update Rollup 1 for SP4、Windows XP SP2、Windows Server 2003 SP1、およびそれ以降のオペレーティング システムで使用可能でサポートされています。
ターゲット プラットフォーム 万国
ヘッダー fltkernel.h (Fltkernel.h を含む)
ライブラリ Fltmgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

関連項目

FltAllocateContext

FltDeleteContext

FltDeleteStreamHandleContext

FltGetStreamHandleContext

FltReleaseContext