次の方法で共有


ファイル システムによるコンテキストのサポート

ファイル コンテキスト (該当する場合)、ストリーム コンテキスト、およびファイル オブジェクト (ストリーム ハンドル) コンテキストをサポートするには、ファイル システムで FSRTL_ADVANCED_FCB_HEADER 構造体を使用する必要があります。 すべての Microsoft Windows ファイル システムではこの構造体を使用しており、すべてのサード パーティのファイル システム開発者もこれを使用することを強くお勧めします。 詳細については、FsRtlSetupAdvancedHeader および FSRTL_ADVANCED_FCB_HEADER を参照してください。

NTFS および FAT ファイル システムでは、ページング ファイルの、作成前パスまたはクローズ後パス内の、または IRP_MJ_NETWORK_QUERY_OPEN 操作に対する、ファイル コンテキスト、ストリーム コンテキスト、ファイル オブジェクト コンテキストはサポートしていません。

ミニフィルター ドライバーは、ファイル システムが特定のファイル オブジェクトに対してストリーム コンテキストおよびファイル オブジェクト コンテキストをサポートしているかどうかを、それぞれ FltSupportsStreamContexts および FltSupportsStreamHandleContexts を呼び出すことで判断できます。

ファイル コンテキストは、Windows Vista 以降で使用可能です。

ファイルごとに 1 つのデータ ストリームのみをサポートするファイル システム (FAT など) の場合、ファイル コンテキストはストリーム コンテキストと同等です。 このようなファイル システムは通常、ストリーム コンテキストはサポートしますが、ファイル コンテキストはサポートしません。 代わりに、フィルター マネージャーがストリーム コンテキストに対するファイル システムの既存のサポートを使用して、このサポートを提供します。 これらのファイル システムにアタッチされているミニフィルター ドライバー インスタンスについて、FltSupportsFileContextsFALSE を返しますが、FltSupportsFileContextsExTRUE を返します (有効な NULL 以外の値が Instance パラメーターに渡された場合)。

ファイルでコンテキスト型がサポートされていない場合、ミニフィルターはその型のコンテキストをそのファイルにアタッチできません。

ファイル コンテキストをサポートするために、ファイル システムでは次の操作を実行する必要があります。

  • PVOID 型の FileContextSupportPointer メンバーをファイル コンテキスト構造体 (通常はファイル コンテキスト ブロック (FCB)) に埋め込みます。 ファイル システムは、このメンバーを NULL に初期化する必要があります。

  • FsRtlSetupAdvancedHeaderEx を (FsRtlSetupAdvancedHeader の代わりに) 使用してストリーム コンテキスト構造体を初期化し、FileContextSupportPointer パラメーターの (対応するファイル コンテキスト構造体に埋め込まれている) FileContextSupportPointer メンバーに有効なポインターを渡します。 詳細については、FsRtlSetupAdvancedHeaderEx および FSRTL_ADVANCED_FCB_HEADER を参照してください。

  • ファイル システムでファイルのファイル コンテキスト構造体を削除するときに、FsRtlTeardownPerFileContexts を呼び出して、フィルター ドライバーとミニフィルター ドライバーがファイルに関連付けたすべてのファイル コンテキスト構造体を解放します。