次の方法で共有


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" とも呼ばれます) が存在します。

これらの値の詳細については、FsRtlAreThereCurrentFileLocksFsRtlCopyRead、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

ファイル ストリームの割り当てサイズ。

AllocationSizeFileSize、および 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 を含む)

こちらもご覧ください

CcInitializeCacheMap

FSRTL_ADVANCED_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlAreThereCurrentFileLocks

FsRtlCopyRead

FsRtlCopyWrite

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx