FSRTL_COMMON_FCB_HEADER構造体 (ntifs.h)
FSRTL_ADVANCED_FCB_HEADER構造体の外部では、 FSRTL_COMMON_FCB_HEADER 構造体を使用しないでください。 FSRTL_COMMON_FCB_HEADER構造体には、ファイル、ディレクトリ、ボリューム、または代替データ ストリームに関してファイル システムが保持するコンテキスト情報が含まれています。
構文
typedef struct _FSRTL_COMMON_FCB_HEADER {
CSHORT NodeTypeCode;
CSHORT NodeByteSize;
UCHAR Flags;
UCHAR IsFastIoPossible;
UCHAR Flags2;
UCHAR Reserved : 4;
UCHAR Version : 4;
PERESOURCE Resource;
PERESOURCE PagingIoResource;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER FileSize;
LARGE_INTEGER ValidDataLength;
} FSRTL_COMMON_FCB_HEADER;
メンバー
NodeTypeCode
システムで使用するために予約されています。
NodeByteSize
システムで使用するために予約されています。
Flags
さまざまな機能のサポートを示すフラグのビットマスク。 このメンバーは、次の 1 つ以上の値のビットごとの OR 組み合わせである必要があります。
値 | 意味 |
---|---|
FSRTL_FLAG_FILE_MODIFIED | システムで使用するために予約されています。 |
FSRTL_FLAG_FILE_LENGTH_CHANGED | システムで使用するために予約されています。 |
FSRTL_FLAG_LIMIT_MODIFIED_PAGES | システムで使用するために予約されています。 ファイルの変更されたデータの制限を設定またはクリアする必要があるファイル システム ドライバー (フィルター ドライバーを除く) は 、CcSetDirtyPageThreshold を呼び出す必要があります。 |
FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX | システムで使用するために予約されています。 |
FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH | システムで使用するために予約されています。 |
FSRTL_FLAG_USER_MAPPED_FILE | キャッシュ マネージャーは、ビューがファイルにマップされていることを示すようにこのフラグを設定します。 |
FSRTL_FLAG_ADVANCED_HEADER | このフラグは、ファイル・システムがそのファイル制御ブロック (FCB) 構造でFSRTL_COMMON_FCB_HEADER の代わりに FSRTL_ADVANCED_FCB_HEADERを使用していることを示します。 このフラグは、FSRTL_ADVANCED_FCB_HEADER構造体の外部でFSRTL_COMMON_FCB_HEADER構造体を使用することは非推奨であるため、必須です。 |
FSRTL_FLAG_EOF_ADVANCE_ACTIVE | システムで使用するために予約されています。 |
IsFastIoPossible
このメンバーは、次のいずれかの値である必要があります。
値 | 意味 |
---|---|
FastIoIsPossible | 高速 I/O が可能です。 |
FastIoIsQuestionable | ファイルの排他バイト範囲ロックが存在します。 呼び出し元は、ファイル システムの FastIoCheckIfPossible ルーチンを 呼び出す必要があります。 |
FastIoIsNotPossible | ファイルの FCB が正しくないか、ファイルに対して日和見ロック ("oplock" とも呼ばれます) が存在します。 |
これらの値の詳細については、FsRtlAreThereCurrentFileLocks、FsRtlCopyRead、FsRtlCopyWrite のリファレンス エントリを参照してください。
Flags2
さまざまな機能のサポートを示すためにファイル システムが設定するフラグのビットマスク。 このメンバーは、次の値の 1 つ以上である必要があります。
値 | 意味 |
---|---|
FSRTL_FLAG2_DO_MODIFIED_WRITE | この表の詳細を参照してください。 |
FSRTL_FLAG2_PURGE_WHEN_MAPPED | このフラグが設定されている場合、キャッシュ マネージャーは、ユーザーが最初にファイルをマップするときにキャッシュ マップをフラッシュして消去します。 |
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS | このフラグは、ファイル・システムが FCB 構造体で FSRTL_COMMON_FCB_HEADER の代わりにFSRTL_ADVANCED_FCB_HEADERを使用していることを示します。 このフラグは、FSRTL_ADVANCED_FCB_HEADER構造体の外部で FSRTL_COMMON_FCB_HEADER構造体を 使用することは非推奨であるため、必須です。 |
FSRTL_FLAG2_IS_PAGING_FILE | 設定すると、この FCB ヘッダーはページ ファイルに関連付けられます。 |
FSRTL_FLAG2_DO_MODIFIED_WRITE フラグは、次のように、ファイル ストリームのファイル オブジェクトの FsContext2 メンバーと共に使用されます。
ファイル オブジェクトの FsContext2 メンバーが NULL 以外の場合、ファイル ストリームはファイルまたはディレクトリの開いているインスタンスを表し、このフラグの値はオペレーティング システムによって無視されます。
ファイル オブジェクトの FsContext2 メンバーが NULL で、このフラグが設定されていない場合、ファイル オブジェクトはストリーム ファイル オブジェクトであり、ストリームは modified-no-write (MNW) ストリームです。
ファイル オブジェクトの FsContext2 メンバーが NULL で、このフラグが設定されている場合、ファイル オブジェクトはストリーム ファイル オブジェクトであり、ストリームは書き込み可能です。
Reserved
システムで使用するために予約されています。 ドライバーは、このビット フィールドを 0 に設定する必要があります。
Version
システムで使用するために予約されています。 このビット フィールドは、 FsRtlSetupAdvancedHeader マクロまたは FsRtlSetupAdvancedHeaderEx マクロによって設定されます。 Windows Vista 以降では、このビット フィールドの値はFSRTL_FCB_HEADER_V1以上です。それ以外の場合、値はFSRTL_FCB_HEADER_V0。 詳細については、「 FSRTL_ADVANCED_FCB_HEADER 」を参照してください。
Resource
初期化されたリソース変数へのポインター。ファイル システムは、FCB への I/O アクセスの同期に使用されるストレージを提供します。 リソース変数は、非ページ プールから割り当てる必要があります。
フィルター ドライバーは、このメンバーを不透明として扱う必要があります。
PagingIoResource
FCB へのページング I/O アクセスの同期に使用されるストレージをファイル システムが提供する追加のリソース変数へのポインター。 リソース変数は、非ページ プールから割り当てる必要があります。
フィルター ドライバーは、このメンバーを不透明として扱う必要があります。
AllocationSize
ファイル ストリームの割り当てサイズ。
AllocationSize、FileSize、および ValidDataLength メンバーの詳細については、「CcInitializeCacheMap」を参照してください。
FileSize
ファイル ストリームのファイル サイズ。
ValidDataLength
ファイル ストリームの有効なデータ長。
注釈
ファイル システムでは、FSRTL_ADVANCED_FCB_HEADER構造体を指すように、すべてのファイル オブジェクトの FsContext メンバーを設定する必要があります。 この構造体は、ファイル システム固有のストリーム コンテキスト オブジェクト構造内に埋め込むことができます (この構造体の残りの部分はファイル システム固有です)。 通常、 FSRTL_ADVANCED_FCB_HEADER 構造はファイル制御ブロック (FCB) です。 ただし、NTFS などの複数のデータ ストリームをサポートする一部のファイル システムでは、ストリーム制御ブロック (SCB) です。
フィルター マネージャーとフィルター コンテキストをサポートするには、ファイル システムがストリーム コンテキスト オブジェクトで FSRTL_ADVANCED_FCB_HEADER 構造を使用する必要があります。 すべての Microsoft ファイル システムでこの構造が使用され、すべてのサード パーティのファイル システム開発者も同様に行う必要があります。 ボリュームオープン要求を含め、オープン要求のすべてのクラスの FCB と SCB には、この構造を含める必要があります。
ファイルがページング ファイルとして使用されている場合は、非ページ プールから FSRTL_ADVANCED_FCB_HEADER 構造体を割り当てる必要があります。 それ以外の場合は、ページ プールまたは非ページ プールから割り当てられます。
要件
要件 | 値 |
---|---|
Header | ntifs.h (Ntifs.h、Fltkernel.h を含む) |