次の方法で共有


FSRTL_PER_STREAM_CONTEXT 構造体 (ntifs.h)

FSRTL_PER_STREAM_CONTEXT構造体には、ファイル システム フィルター ドライバーがファイル ストリームに関して保持するコンテキスト情報が含まれています。

構文

typedef struct _FSRTL_PER_STREAM_CONTEXT {
  LIST_ENTRY     Links;
  PVOID          OwnerId;
  PVOID          InstanceId;
  PFREE_FUNCTION FreeCallback;
} FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;

メンバー

Links

同じファイル ストリームに関連付けられているすべてのストリームごとのコンテキスト構造の一覧で、この構造体のリンク。 FsRtlInsertPerStreamContext は、ファイル ストリームのすべてのストリームごとのコンテキスト構造の一覧にこのメンバーを挿入します。 ファイル オブジェクトからリストの先頭へのポインターを取得するには、 FsRtlGetPerStreamContextPointer マクロを使用し、結果を PFSRTL_ADVANCED_FCB_HEADER ポインターにキャストします。 リスト ポインターは、ファイル ストリームの高度なファイル制御ブロック (FCB) ヘッダー構造の FilterContexts メンバーです。

OwnerId

ストリームごとのコンテキスト構造の所有者を一意に識別する、フィルター ドライバーによって割り当てられた変数へのポインター。 この変数の形式は、フィルター ドライバー固有です。 フィルター ライターは、ドライバー オブジェクトやデバイス オブジェクトのアドレスなど、意味のある便利な値を選択する必要があります。 フィルター ドライバーでは、このメンバーを NULL 以外の値に設定する必要があります。

InstanceId

同じフィルター ドライバーによって作成されたストリームごとのコンテキスト構造を区別するために使用できる、フィルター ドライバーによって割り当てられた変数へのポインター。 この変数の形式は、フィルター ドライバー固有です。 フィルター ライターは、ファイル ストリームのストリーム コンテキスト オブジェクトのアドレスなど、意味のある便利な値を選択する必要があります。 (ファイル オブジェクトからこのアドレスを取得するには、 FsRtlGetPerStreamContextPointer マクロを使用します)。

このメンバーは省略可能であり、 NULL にすることができます

FreeCallback

ストリームごとのコンテキスト構造を解放するコールバック ルーチンへのポインター。 このルーチンとそのパラメーターは、次のように定義されます。

VOID
(*PFREE_FUNCTION) (
     IN PVOID Buffer
     );

バッファー

解放する FSRTL_PER_STREAM_CONTEXT 構造体へのポインター。

注釈

ファイル システム フィルター ドライバーは、 FSRTL_PER_STREAM_CONTEXT 構造体を使用して、ファイル ストリームのコンテキスト情報を維持できます。 この構造体は、そのまま使用することも、ドライバー定義のストリームごとのコンテキスト構造に埋め込んだりすることもできます。

ファイル システムは、ファイル ストリームのストリーム コンテキスト オブジェクトを破棄するときに、 FsRtlTeardownPerStreamContexts を呼び出す必要があります。これにより、ファイル ストリームに関連付けられているすべてのストリームごとのコンテキスト構造の FreeCallback ルーチンが呼び出されます。

メモFreeCallback ルーチンは、ファイル システムに再帰的に呼び出したり、ファイル システム リソースを取得したりすることはできません。 また、このルーチンは、ファイル ストリームのファイル オブジェクトが既に解放されていることを前提とする必要があります。
 
FSRTL_PER_STREAM_CONTEXT構造体は、ページ プールまたは非ページ プールから割り当てることができます。

FsRtlSupportsPerStreamContexts マクロは、ファイル システムが特定のファイル ストリームのストリームごとのコンテキストをサポートするかどうかを決定します。

BOOLEAN FsRtlSupportsPerStreamContexts(
  [in] PFILE_OBJECT FileObject
);

パラメーター

FileObject [in]

PFILE_OBJECT

ファイル ストリームのファイル オブジェクトへのポインター。

戻り値

BOOLEAN

FsRtlSupportsPerStreamContexts マクロは、ファイル システムがファイル ストリームのストリームごとのコンテキストをサポートしている場合は TRUE を返し、それ以外の場合は FALSE を返します。

ファイル システム フィルター ドライバーは 、FsRtlSupportsPerStreamContexts を呼び出して、基になるファイル システムが、特定のファイル オブジェクトによって表されるファイル ストリームのストリームごとのコンテキストをサポートしているかどうかを判断します。 ファイル システムでは、一部の種類のファイルではストリームごとのコンテキストがサポートされますが、他の種類のファイルではサポートされないことに注意してください。 たとえば、NTFS と FAT は現在、ページング ファイルのストリームごとのコンテキストをサポートしていません。

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

要件

要件
サポートされている最小のクライアント この構造は Windows XP です
Header ntifs.h (Ntifs.h を含む)

こちらもご覧ください

FSRTL_ADVANCED_FCB_HEADER

FSRTL_COMMON_FCB_HEADER

FsRtlGetPerStreamContextPointer

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlTeardownPerStreamContexts

PFREE_FUNCTION

レガシ ファイル システム フィルター ドライバーでの Per-Stream コンテキストの追跡