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

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

含义
FastIoIsPossible 可以实现快速 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 文件系统都使用此结构,所有第三方文件系统开发人员也必须这样做。 所有类别的打开请求(包括批量打开请求)的 FDB 和 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