FsRtlRemovePerStreamContext 関数 (ntifs.h)

FsRtlRemovePerStreamContext は、ファイル ストリームに関連付けられているストリームごとのコンテキストの一覧からストリームごとのコンテキスト構造を削除します。

構文

PFSRTL_PER_STREAM_CONTEXT FsRtlRemovePerStreamContext(
  [in]           PFSRTL_ADVANCED_FCB_HEADER StreamContext,
  [in, optional] PVOID                      OwnerId,
  [in, optional] PVOID                      InstanceId
);

パラメーター

[in] StreamContext

ファイル ストリームのFSRTL_ADVANCED_FCB_HEADER構造体へのポインター。 ファイル オブジェクトからこのポインターを取得するには、 FsRtlGetPerStreamContextPointer マクロを使用します。

[in, optional] OwnerId

特定のフィルター ドライバーに属するコンテキスト情報を識別するために使用されます。

[in, optional] InstanceId

ストリームごとのコンテキストの特定のインスタンスを検索するために使用されます。 指定しない場合は、フィルター ドライバーが所有するコンテキストのいずれかが削除され、返されます。

OwnerIdInstanceId も指定されていない場合は、関連付けられているストリームごとのコンテキストが削除され、返されます。

戻り値

FsRtlRemovePerStreamContext は、削除されたストリームごとのコンテキストへのポインターを返します。 一致するものが見つからない場合、またはファイル システムがフィルター コンテキストをサポートしていない場合、 FsRtlRemovePerStreamContext は NULL を返します。

注釈

ファイル システム フィルター ドライバーは FsRtlRemovePerStreamContext を呼び出して、ファイル ストリームに関連付けられているストリームごとのコンテキストの一覧から独自のストリームごとのコンテキスト構造を削除します。

FsRtlRemovePerStreamContext は、見つかった最初の一致するストリームごとのコンテキスト構造のみを削除します。 ストリームごとに一致するコンテキストが追加されている場合、フィルター ドライバーは、 FsRtlRemovePerStreamContext を必要な回数だけ呼び出して、それらすべてを削除する必要があります。

このルーチンは、ストリームがまだ開いている間に、フィルター ドライバーがファイル ストリームに関連付けられているコンテキスト情報を破棄する必要がある場合にのみ使用する必要があります。 たとえば、フィルター ドライバーは、次の場合に FsRtlRemovePerStreamContext を呼び出す場合があります。

  • 特定のボリュームに対する I/O 要求のログ記録を停止する要求をユーザー モード アプリケーションから受信した場合。

  • ファイルまたはディレクトリの名前が変更されたことが検出された場合。

ファイル ストリームが閉じられると、ファイル システムは、そのストリームに関連付けられているすべてのストリームごとのコンテキストが確実に削除および解放されるようにする必要があります。 これを行うには、ファイル システムは、ファイル 制御ブロック (FCB) またはファイル ストリームの他のストリーム コンテキスト オブジェクトで FsRtlTeardownPerStreamContexts を呼び出す必要があります。 FsRtlTeardownPerStreamContexts では、FilterContexts リストが表示され、各エントリが削除され、 FreeCallback ルーチンが呼び出されます。

したがって、ファイル システム フィルター ドライバーは、IRP_MJ_CLOSEまたはIRP_MJ_PNPディスパッチ ルーチン内から FsRtlRemovePerStreamContext を呼び出さないでください。 このような呼び出しは不要であるだけでなく、 FsRtlTeardownPerStreamContexts に対するファイル システムの呼び出しにも干渉する可能性があります。

ファイル システム フィルター ドライバーは、ストリームごとのコンテキスト構造の FreeCallback ルーチン内から FsRtlRemovePerStreamContext を呼び出さないでください。 これは、基になるファイル システムが、FilterContexts リストからコンテキスト構造を既に削除した後に FreeCallback ルーチンを呼び出すからです。

ストリームごとのコンテキスト構造を初期化するには、 FsRtlInitPerStreamContext マクロを 使用します。

初期化されたストリームごとのコンテキスト構造をファイル ストリームに関連付けるには、 FsRtlInsertPerStreamContext を呼び出します。

ファイル ストリームに関連付けられているストリームごとのコンテキスト構造を取得するには、 FsRtlLookupPerStreamContext を呼び出します。

FsRtlRemovePerStreamContext は、フィルター コンテキストをサポートするファイル システムでのみ使用できます。

詳細については、「 レガシ ファイル システム フィルター ドライバーでの Per-Stream コンテキストの追跡」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 SP4 更新プログラムのロールアップ。Windows XP
対象プラットフォーム ユニバーサル
Header ntifs.h (Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= APC_LEVEL

こちらもご覧ください

FSRTL_ADVANCED_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlGetPerStreamContextPointer

FsRtlInitPerStreamContext

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSupportsPerStreamContexts

FsRtlTeardownPerStreamContexts

IRP_MJ_CLOSE

IRP_MJ_PNP