次の方法で共有


FSRTL_ADVANCED_FCB_HEADER構造体 (ntifs.h)

FSRTL_ADVANCED_FCB_HEADER 構造体には、ファイル システムがファイルに関して保持するコンテキスト情報が含まれています。

構文

typedef struct _FSRTL_ADVANCED_FCB_HEADER {
  FSRTL_COMMON_FCB_HEADER          DUMMYSTRUCTNAME;
  PFAST_MUTEX                      FastMutex;
  LIST_ENTRY                       FilterContexts;
  EX_PUSH_LOCK                     PushLock;
  PVOID                            *FileContextSupportPointer;
  union {
    OPLOCK Oplock;
    PVOID  ReservedForRemote;
  };
  PVOID                            AePushLock;
  PVOID                            ReservedContextLegacy;
  ULONG                            BypassIoOpenCount;
  struct _FSRTL_PER_STREAM_CONTEXT *ReservedContext;
} FSRTL_ADVANCED_FCB_HEADER;

メンバーズ

DUMMYSTRUCTNAME

FSRTL_COMMON_FCB_HEADER型の構造体を含む名前のないメンバー。

FastMutex

DUMMYSTRUCTNAMEの次のメンバーへのアクセスを同期するために使用される、初期化された高速ミューテックス ポインター。

  • AllocationSize
  • FileSize
  • ValidDataLength

存在する場合、PushLock メンバーは、FilterContexts メンバーへのアクセスを同期するために使用されます。それ以外の場合 FastMutex が使用されます。

FilterContexts

ファイルに関連付けられているすべてのコンテキスト構造のリストの先頭へのポインター。 フィルター ドライバーは、fsRtlLookupPerStreamContext 呼び出してこの一覧を検索し、FsRtlInsertPerStreamContext を呼び出して FsRtlRemovePerStreamContext変更できます。

PushLock

FilterContexts リストへのアクセスを同期するために使用されるプッシュ ロック。 このフィールドは、Windows Vista 以降でのみ使用できます (つまり、FSRTL_COMMON_FCB_HEADER 構造体の Version ビット フィールドが FSRTL_FCB_HEADER_V1以上の場合)。

FileContextSupportPointer

ファイル コンテキストを追跡するためにファイル システム ランタイム ライブラリ (FSRTL) によって使用されるポインター フィールドへのポインター。 NULLしない場合、このメンバーは、構造を作成したファイル システムのファイルごとの構造内の PVOID 変数へのポインターである必要があります。 NULL場合、ファイル コンテキストはサポートされません。 このメンバーは、Windows Vista 以降でのみ使用できます (つまり、FSRTL_COMMON_FCB_HEADER 構造体の Version ビット フィールドが FSRTL_FCB_HEADER_V1以上の場合)。

Oplock

ファイルまたはディレクトリの oplock。 このフィールドは、Windows 8 以降でのみ使用できます (つまり、FSRTL_COMMON_FCB_HEADER 構造体の Version ビット フィールドが FSRTL_FCB_HEADER_V2以上の場合)。

ReservedForRemote

ファイル システムがリモートの場合、このフィールドは予約されています。 Windows 8 以降でのみ使用できます (つまり、FSRTL_COMMON_FCB_HEADER 構造体の Version ビット フィールドが FSRTL_FCB_HEADER_V2以上の場合)。

AePushLock

ストリーム コンテキストの一覧へのアクセスを同期するために PushLock 代わりに使用される自動展開プッシュ ロック。 詳細については、「解説」を参照してください。

AePushlock は、Windows 10 バージョン 20H2 以降で使用できます (つまり、FSRTL_COMMON_FCB_HEADER 構造体の Version ビット フィールドが FSRTL_FCB_HEADER_V3以上の場合)、FsRtlSetupAdvancedHeaderEx2を呼び出して初期化する必要があります。

ReservedContextLegacy

このフィールドはシステム用に予約されています。 Windows 8.1 から Windows 10 バージョン 1803 でのみ使用されます (FSRTL_COMMON_FCB_HEADER 構造体の Version ビット フィールドが FSRTL_FCB_HEADER_V3以上の場合)。

BypassIoOpenCount

このストリームで BypassIO が有効になっている状態で現在開いているハンドルの数を追跡します。

このフィールドは、Windows 11 以降で使用できます (つまり、FSRTL_COMMON_FCB_HEADER 構造体の Version ビット フィールドが FSRTL_FCB_HEADER_V4以上の場合)。

ReservedContext

システム用に予約されています。

このフィールドは、Windows 11 バージョン 22H2 以降で使用できます (つまり、FSRTL_COMMON_FCB_HEADER 構造体の Version ビット フィールドが FSRTL_FCB_HEADER_V5以上の場合)。

備考

FSRTL_ADVANCED_FCB_HEADER 構造体は、FSRTL_COMMON_FCB_HEADER 構造体のスーパーセットです。 ファイル システム (レガシ フィルターとミニフィルター ドライバーを含む、該当する場合) は、FSRTL_ADVANCED_FCB_HEADER 構造体を使用する必要があります。

ファイル システムでは、次のいずれかのマクロを使用して、FSRTL_ADVANCED_FCB_HEADER 構造体を初期化する必要があります。

  • FsRtlSetupAdvancedHeader の
  • FsRtlSetupAdvancedHeaderEx の
  • FsRtlSetupAdvancedHeaderEx2。Windows 10 バージョン 20H2 以降で使用できます。

これらのマクロでは、次のフラグが設定されます。

意味
FSRTL_FLAG_ADVANCED_HEADER FSRTL_COMMON_FCB_HEADER 構造体のメンバー フラグに設定され、このフラグは、FSRTL_ADVANCED_FCB_HEADER 構造体に対するファイル システム ドライバーのサポートを示します。 このフラグは変更しないでください。
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS FSRTL_COMMON_FCB_HEADERFlags2 メンバーに設定され、このフラグはフィルター ドライバー コンテキストのサポートを示します。 このフラグは、ページング ファイルに対してのみクリアできます (表の後の情報を参照してください)。

ファイル システムでは、すべてのファイル オブジェクトの FsContext メンバーが FSRTL_ADVANCED_FCB_HEADER 構造体を指すように設定する必要があります。 この構造体は、ファイル システム ストリームに固有のコンテキスト オブジェクト構造の内部に埋め込むことができます (構造体の残りの部分はファイル システム固有です)。 通常、この構造体はファイル制御ブロック (FCB) です。 ただし、NTFS などの複数のデータ ストリームをサポートする一部のファイル システムでは、ストリーム制御ブロック (SCB) です。 ボリュームオープン要求を含め、オープン要求のすべてのクラスの FCB および SCB には、この構造を含める必要があることに注意してください。

ファイルがページング ファイルの場合は、FSRTL_ADVANCED_FCB_HEADER 構造体を非ページ プールから割り当てる必要があります。 それ以外の場合は、ページ プールまたは非ページ プールから割り当てることができます。

すべての Microsoft ファイル システムは、fsRtlSetupAdvancedHeaderを呼び出した後、FSRTL_COMMON_FCB_HEADERFlags2 メンバーの FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS フラグをクリアすることで、ページング ファイルのストリーム コンテキストサポートを無効にします。 (FASTFAT WDK サンプルについては、Strucsup.cFatCreateFcb 関数を参照してください)。オペレーティング システムがすべてのファイル システムで一貫した方法で動作するように、ファイル システムまたはシステムで同じ操作を行うことを強くお勧めします。

プッシュ ロックの自動展開

自動拡張プッシュ ロックは、Windows 10 バージョン 20H2 で導入されました。 フィルタマネージャのロックが当初設計されていた時、大規模なマルチプロセッサシステムは非常に珍しく、RAMは貴重でした。 このようなシステムが一般的になり、RAMが制限されるようになったので、自動拡張プッシュロックはメモリ消費と速度の間に有益なトレードオフを提供します。

自動拡張プッシュ ロックは、多数の同時共有取得者が原因で高いキャッシュ競合が発生することが検出されると、通常のキャッシュ対応以外のプッシュ ロックからキャッシュ対応プッシュ ロックに自動的に変更される可能性があります。 自動拡張プッシュ ロックは、展開されていない場合は通常のプッシュ ロックよりも大きくなりますが、キャッシュ対応のプッシュ ロックほど大きくはありません。 このプッシュ ロックの種類は、マルチプロセッサ システムでよりパフォーマンスが高くなります。

必要条件

要件 価値
ヘッダー ntifs.h (Ntifs.h、Fltkernel.h を含む)

関連項目

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader の

FsRtlSetupAdvancedHeaderEx の

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts