次の方法で共有


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
ターゲット プラットフォーム の 万国
ヘッダー ntifs.h (Ntifs.h を含む)
ライブラリ 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