次の方法で共有


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 です
ヘッダー ntifs.h (Ntifs.h を含む)

関連項目

FSRTL_ADVANCED_FCB_HEADER

FSRTL_COMMON_FCB_HEADER

FsRtlGetPerStreamContextPointer の

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlTeardownPerStreamContexts

PFREE_FUNCTION

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