次の方法で共有


FsRtlRemovePerFileObjectContext 関数 (ntifs.h)

"レガシ" ファイル システム フィルター ドライバーの場合、 FsRtlRemovePerFileObjectContext 関数は、ファイル オブジェクトに以前に関連付けられていたファイル オブジェクトごとのコンテキストの一覧から、ファイル オブジェクトごとのコンテキスト情報構造のリンクを解除します。

構文

PFSRTL_PER_FILEOBJECT_CONTEXT FsRtlRemovePerFileObjectContext(
  [in]           PFILE_OBJECT FileObject,
  [in, optional] PVOID        OwnerId,
  [in, optional] PVOID        InstanceId
);

パラメーター

[in] FileObject

コンテキスト情報を削除するファイル オブジェクトへのポインター。

[in, optional] OwnerId

ファイルオブジェクトごとのコンテキスト構造の所有フィルターを一意に識別する呼び出し元によって割り当てられた変数へのポインター。 この変数の形式は、フィルター ドライバー固有です。

[in, optional] InstanceId

呼び出し元によって割り当てられた変数へのポインター。同じフィルター ドライバーによって作成されたファイル オブジェクトごとのコンテキスト構造を区別するために使用できます。 この変数の形式は、フィルター ドライバー固有です。 このパラメーターは省略可能であり、 NULL にすることができます。

戻り値

FsRtlRemovePerFileObjectContext はリンクを解除し、検出された最初の一致するファイル オブジェクトごとのコンテキストへのポインターを返します。 一致するものが見つからない場合、 FsRtlRemovePerFileObjectContextNULL を返します。

注釈

"レガシ" ファイル システム フィルター ドライバーは 、FsRtlRemovePerFileObjectContext を呼び出して、ファイル オブジェクトに関連付けられているファイルごとのオブジェクトごとのコンテキストの一覧から独自のファイル オブジェクトごとのコンテキスト構造のリンクを解除します。 このようなコンテキスト構造はすべて、 FsRtlInsertPerFileObjectContext を呼び出すことによって、ファイル オブジェクトに以前に関連付けられている必要があります。

FsRtlRemovePerFileObjectContext の呼び出しが成功した場合、OwnerId (および存在する場合は InstanceId) に一致する最初のファイル オブジェクトごとのコンテキスト構造はリンク解除され、そのコンテキストへのポインターが返されます。 このポインターは、リンクされていないコンテキスト構造を解放するためにフィルター ドライバーによって使用できます。

メモFsRtlRemovePerFileObjectContext は、見つかった最初の一致するファイル オブジェクトごとのコンテキスト構造のみをリンク解除します。 ファイル オブジェクトごとに一致するコンテキストが追加されている場合、フィルター ドライバーは FsRtlRemovePerFileObjectContext を必要な回数だけ呼び出して、それらすべてをリンク解除する必要があります。
 
ファイルオブジェクトごとのコンテキスト構造を初期化するには、 FsRtlInitPerFileObjectContext マクロを使用します。

初期化されたファイルオブジェクトごとのコンテキスト構造をファイル オブジェクトに関連付けるには、 FsRtlInsertPerFileObjectContext 関数を 使用します。

ファイル オブジェクトに関連付けられているファイル オブジェクトごとのコンテキスト構造を取得するには、 FsRtlLookupPerFileObjectContext 関数を使用します。

メモ レガシ フィルター ドライバーでは、 fsRtlRemovePerFileObjectContext 関数を呼び出して、IRP_MJ_CLOSEが完了する前にコンテキスト情報構造のリンクを解除して解放する必要があります。 そうしないと、そのコンテキスト構造に割り当てられたメモリがリークされます。
 
さらに、ファイル システム ミニフィルター ドライバーでは 、FsRtlXxxPerFileObjectContext 関数を使用しないでください。 代わりに、適切な FltXxxコンテキスト 関数を使用できます。 詳細については、 FSRTL_PER_FILEOBJECT_CONTEXTトピックを 参照してください。

要件

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

こちらもご覧ください

FSRTL_PER_FILEOBJECT_CONTEXT

FsRtlInitPerFileObjectContext

FsRtlInsertPerFileObjectContext

FsRtlLookupPerFileObjectContext