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”)。 |
有关这些值的详细信息,请参阅 FsRtlAreThereCurrentFileLocks、FsRtlCopyRead和 FsRtlCopyWrite的引用条目。
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
保留供系统使用。 此位字段由 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
文件流的有效数据长度。
言论
文件系统必须将每个文件对象的 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) |