FSRTL_ADVANCED_FCB_HEADER结构 (ntifs.h)
FSRTL_ADVANCED_FCB_HEADER 结构包含文件系统维护的有关文件的上下文信息。
语法
typedef struct _FSRTL_ADVANCED_FCB_HEADER {
FSRTL_COMMON_FCB_HEADER DUMMYSTRUCTNAME;
PFAST_MUTEX FastMutex;
LIST_ENTRY FilterContexts;
EX_PUSH_LOCK PushLock;
PVOID *FileContextSupportPointer;
union {
OPLOCK Oplock;
PVOID ReservedForRemote;
};
PVOID AePushLock;
PVOID ReservedContextLegacy;
ULONG BypassIoOpenCount;
struct _FSRTL_PER_STREAM_CONTEXT *ReservedContext;
} FSRTL_ADVANCED_FCB_HEADER;
成员
DUMMYSTRUCTNAME
包含类型为 FSRTL_COMMON_FCB_HEADER的未命名成员。
FastMutex
指向初始化的快速互斥体的指针,用于同步对 DUMMYSTRUCTNAME以下成员的访问:
- AllocationSize
- FileSize
- ValidDataLength
如果存在,则 PushLock 成员用于同步对 FilterContexts 成员的访问;否则,将使用 FastMutex。
FilterContexts
指向与文件关联的所有上下文结构的列表头的指针。 筛选器驱动程序可以通过调用 FsRtlLookupPerStreamContext 来搜索此列表,并通过调用 FsRtlInsertPerStreamContext 和 FsRtlRemovePerStreamContext对其进行修改。
PushLock
用于同步对 filterContexts 列表
FileContextSupportPointer
指向文件系统运行时库 (FSRTL) 用于跟踪文件上下文的指针字段的指针。 如果未 NULL,则此成员必须是指向创建结构的文件系统的每个文件结构内的 PVOID 变量的指针。 如果 NULL,则不支持文件上下文。 此成员仅从 Windows Vista 开始可用(也就是说,如果 FSRTL_COMMON_FCB_HEADER 结构的 版本 位字段大于或等于 FSRTL_FCB_HEADER_V1)。
Oplock
文件或目录的 oplock。 此字段仅从 Windows 8 开始可用(即,如果 FSRTL_COMMON_FCB_HEADER 结构的 版本 位字段大于或等于 FSRTL_FCB_HEADER_V2)。
ReservedForRemote
如果文件系统是远程的,则保留此字段。 仅从 Windows 8 开始可用(也就是说,如果 FSRTL_COMMON_FCB_HEADER 结构的 版本 位字段大于或等于 FSRTL_FCB_HEADER_V2)。
AePushLock
自动展开推送锁,该锁使用而不是 PushLock 来同步对流上下文列表的访问。 有关详细信息,请参阅 备注。
AePushlock 从 Windows 10 版本 20H2 开始可用(也就是说,如果 FSRTL_COMMON_FCB_HEADER 结构的 版本 位字段大于或等于 FSRTL_FCB_HEADER_V3),并且必须通过调用 FsRtlSetupAdvancedHeaderEx2进行初始化。
ReservedContextLegacy
此字段保留供系统使用。 它仅在 Windows 8.1 到 Windows 10 版本 1803 中使用(如果 FSRTL_COMMON_FCB_HEADER 结构的 版本 位字段大于或等于 FSRTL_FCB_HEADER_V3)。
BypassIoOpenCount
跟踪当前在此流上启用了 BypassIO 打开的句柄数。
此字段从 Windows 11 开始可用(也就是说,如果 FSRTL_COMMON_FCB_HEADER 结构的 版本 位字段大于或等于 FSRTL_FCB_HEADER_V4)。
ReservedContext
保留供系统使用。
此字段从 Windows 11 版本 22H2 开始可用(也就是说,如果 FSRTL_COMMON_FCB_HEADER 结构的 版本 位字段大于或等于 FSRTL_FCB_HEADER_V5)。
言论
FSRTL_ADVANCED_FCB_HEADER 结构是 FSRTL_COMMON_FCB_HEADER 结构的超集。 文件系统(包括旧筛选器和微型筛选器驱动程序(如果适用)必须使用 FSRTL_ADVANCED_FCB_HEADER 结构。
文件系统必须使用下列宏之一来初始化 FSRTL_ADVANCED_FCB_HEADER 结构:
- FsRtlSetupAdvancedHeader
- FsRtlSetupAdvancedHeaderEx
- 从 Windows 10 版本 20H2 开始,FsRtlSetupAdvancedHeaderEx2。
以下标志由这些宏设置。
旗 | 意义 |
---|---|
FSRTL_FLAG_ADVANCED_HEADER | 在 标志FSRTL_COMMON_FCB_HEADER 结构的成员中设置,此标志指示文件系统驱动程序对 FSRTL_ADVANCED_FCB_HEADER 结构的支持。 不应修改此标志。 |
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS | 此标志在 Flags2FSRTL_COMMON_FCB_HEADER成员中设置,表示支持筛选器驱动程序上下文。 此标志只能清除分页文件(请参阅表后的信息)。 |
文件系统必须将每个文件对象的 FsContext 成员设置为指向 FSRTL_ADVANCED_FCB_HEADER 结构。 此结构可以嵌入特定于文件系统流的上下文对象结构(结构的其余部分是特定于文件系统的)。 通常,此结构是文件控制块(FCB)。 但是,在某些支持多个数据流(如 NTFS)的文件系统上,它是流控制块(SCB)。 请注意,所有开放请求类的 FCB 和 SCB(包括批量打开请求)都必须包含此结构。
如果该文件是分页文件,则必须从非分页池分配 FSRTL_ADVANCED_FCB_HEADER 结构。 否则,可以从分页池或非分页池进行分配。
所有Microsoft文件系统在调用 FsRtlSetupAdvancedHeader后,清除 Flags2FSRTL_COMMON_FCB_HEADER 成员中的 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS 标志,禁用对分页文件的流上下文支持。 (请参阅 FASTFAT WDK 示例的 Strucsup.c 中的 FatCreateFcb 函数。强烈建议你在文件系统或系统中执行相同的操作,以便操作系统在所有文件系统中的行为一致。
自动扩展推送锁
Windows 10 版本 20H2 中引入了自动扩展推送锁。 当筛选器管理器的锁最初设计时,大型多处理器系统非常罕见,RAM 非常珍贵。 由于此类系统现在很常见,RAM 不受限制,自动扩展推送锁在内存消耗和速度之间提供了有益的权衡。
当检测到由于大量并发共享获取者而导致缓存感知型推送锁受到高缓存争用时,自动扩展推送锁可以自动从常规的非缓存感知推送锁更改为缓存感知推送锁。 自动扩展推送锁在未展开时大于普通推送锁,但与缓存感知推送锁不一样大。 此推送锁类型在多处理器系统上的性能更高。
要求
要求 | 价值 |
---|---|
标头 | ntifs.h(包括 Ntifs.h、Fltkernel.h) |