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
PushLock
FilterContexts リストへのアクセスを同期するために使用されるプッシュ ロック。 このフィールドは、Windows Vista 以降でのみ使用できます (つまり、FSRTL_COMMON_FCB_HEADER 構造体の Version ビット フィールドが FSRTL_FCB_HEADER_V1以上の場合)。
FileContextSupportPointer
ファイル コンテキストを追跡するためにファイル システム ランタイム ライブラリ (FSRTL) によって使用されるポインター フィールドへのポインター。 NULL
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_FLAG2_SUPPORTS_FILTER_CONTEXTS | FSRTL_COMMON_FCB_HEADERの Flags2 メンバーに設定され、このフラグはフィルター ドライバー コンテキストのサポートを示します。 このフラグは、ページング ファイルに対してのみクリアできます (表の後の情報を参照してください)。 |
ファイル システムでは、すべてのファイル オブジェクトの FsContext メンバーが FSRTL_ADVANCED_FCB_HEADER 構造体を指すように設定する必要があります。 この構造体は、ファイル システム ストリームに固有のコンテキスト オブジェクト構造の内部に埋め込むことができます (構造体の残りの部分はファイル システム固有です)。 通常、この構造体はファイル制御ブロック (FCB) です。 ただし、NTFS などの複数のデータ ストリームをサポートする一部のファイル システムでは、ストリーム制御ブロック (SCB) です。 ボリュームオープン要求を含め、オープン要求のすべてのクラスの FCB および SCB には、この構造を含める必要があることに注意してください。
ファイルがページング ファイルの場合は、FSRTL_ADVANCED_FCB_HEADER 構造体を非ページ プールから割り当てる必要があります。 それ以外の場合は、ページ プールまたは非ページ プールから割り当てることができます。
すべての Microsoft ファイル システムは、fsRtlSetupAdvancedHeaderを呼び出した後、
プッシュ ロックの自動展開
自動拡張プッシュ ロックは、Windows 10 バージョン 20H2 で導入されました。 フィルタマネージャのロックが当初設計されていた時、大規模なマルチプロセッサシステムは非常に珍しく、RAMは貴重でした。 このようなシステムが一般的になり、RAMが制限されるようになったので、自動拡張プッシュロックはメモリ消費と速度の間に有益なトレードオフを提供します。
自動拡張プッシュ ロックは、多数の同時共有取得者が原因で高いキャッシュ競合が発生することが検出されると、通常のキャッシュ対応以外のプッシュ ロックからキャッシュ対応プッシュ ロックに自動的に変更される可能性があります。 自動拡張プッシュ ロックは、展開されていない場合は通常のプッシュ ロックよりも大きくなりますが、キャッシュ対応のプッシュ ロックほど大きくはありません。 このプッシュ ロックの種類は、マルチプロセッサ システムでよりパフォーマンスが高くなります。
必要条件
要件 | 価値 |
---|---|
ヘッダー | ntifs.h (Ntifs.h、Fltkernel.h を含む) |
関連項目
FsRtlSetupAdvancedHeader の
FsRtlSetupAdvancedHeaderEx の