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”的机会锁 (。 |
有关这些值的详细信息,请参阅 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 文件系统都使用此结构,所有第三方文件系统开发人员也必须这样做。 所有类别的打开请求(包括批量打开请求)的 FDB 和 SCB 必须包含此结构。
如果文件用作分页文件,则必须从非分页池中分配 FSRTL_ADVANCED_FCB_HEADER 结构。 否则,可以从分页池或非分页池中分配该池。
要求
要求 | 值 |
---|---|
Header | ntifs.h (包括 Ntifs.h、Fltkernel.h) |