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

指示支持各种功能的标志的位掩码。 此成员必须是以下一个或多个值的按位 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_ADVANCED_FCB_HEADER 而不是FSRTL_COMMON_FCB_HEADER。 此标志是必需的,因为已弃用FSRTL_ADVANCED_FCB_HEADER结构之外的FSRTL_COMMON_FCB_HEADER结构。
FSRTL_FLAG_EOF_ADVANCE_ACTIVE 保留供系统使用。

IsFastIoPossible

此成员必须是以下值之一:

价值 意义
FastIoIs 可能 可以快速 I/O。
FastIoIsQuestionable 文件存在独占字节范围锁。 调用方应调用文件系统的 FastIoCheckIfPossible 例程。
FastIoIsNotpossible 文件的 FCB 不正确,或者文件存在机会锁(也称为“oplock”)。

有关这些值的详细信息,请参阅 FsRtlAreThereCurrentFileLocksFsRtlCopyReadFsRtlCopyWrite的引用条目。

Flags2

文件系统设置的标志的位掩码,以指示对各种功能的支持。 此成员必须是以下一个或多个值:

价值 意义
FSRTL_FLAG2_DO_MODIFIED_WRITE 请参阅下表后面的详细信息。
FSRTL_FLAG2_PURGE_WHEN_MAPPED 如果设置了此标志,则当用户首次映射文件时,缓存管理器将刷新并清除缓存映射。
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS 此标志指示文件系统在其 FCB 结构中使用 FSRTL_ADVANCED_FCB_HEADER 而不是FSRTL_COMMON_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,并且未设置此标志,则文件对象是流文件对象,流是修改的无写入 (MNW) 流。

  • 如果文件对象的 FsContext2 成员为 NULL,并且设置了此标志,则文件对象是流文件对象,流是可写的。

Reserved

保留供系统使用。 驱动程序必须将此位字段设置为零。

Version

保留供系统使用。 此位字段由 FsRtlSetupAdvancedHeaderFsRtlSetupAdvancedHeaderEx 宏设置。 从 Windows Vista 开始,此位字段的值FSRTL_FCB_HEADER_V1或更高版本;否则,该值FSRTL_FCB_HEADER_V0。 有关详细信息,请参阅 FSRTL_ADVANCED_FCB_HEADER

Resource

指向初始化的资源变量的指针,文件系统提供用于同步对 FCB 的 I/O 访问的存储。 必须从非分页池分配资源变量。

筛选器驱动程序应将此成员视为不透明。

PagingIoResource

指向其他资源变量的指针,文件系统提供用于同步对 FCB 的分页 I/O 访问的存储。 必须从非分页池分配资源变量。

筛选器驱动程序应将此成员视为不透明。

AllocationSize

文件流的分配大小。

有关 AllocationSizeFileSizeValidDataLength 成员的详细信息,请参阅 CcInitializeCacheMap

FileSize

文件流的文件大小。

ValidDataLength

文件流的有效数据长度。

言论

文件系统必须将每个文件对象的 FsContext 成员设置为指向 FSRTL_ADVANCED_FCB_HEADER 结构。 此结构可以嵌入到特定于文件系统的流上下文对象结构中(此结构的其余部分是特定于文件系统的)。 通常,FSRTL_ADVANCED_FCB_HEADER 结构是文件控制块(FCB)。 但是,在某些支持多个数据流(如 NTFS)的文件系统上,它是流控制块(SCB)。

若要支持筛选器管理器和筛选器上下文,文件系统必须在其流上下文对象中使用 FSRTL_ADVANCED_FCB_HEADER 结构。 所有Microsoft文件系统都使用此结构,所有第三方文件系统开发人员也必须这样做。 所有开放请求类(包括批量打开请求)的 FCB 和 SCB 都必须包含此结构。

如果该文件用作分页文件,则必须从非分页池分配 FSRTL_ADVANCED_FCB_HEADER 结构。 否则,可以从分页池或非分页池进行分配。

要求

要求 价值
标头 ntifs.h(包括 Ntifs.h、Fltkernel.h)

另请参阅

CcInitializeCacheMap

FSRTL_ADVANCED_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlAreThereCurrentFileLocks

FsRtlCopyRead

FsRtlCopyWrite

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx