文件系统对上下文的支持

若要支持文件上下文(如果适用)、流上下文和文件对象(流句柄)上下文,文件系统必须使用 FSRTL_ADVANCED_FCB_HEADER 结构。 所有Microsoft Windows 文件系统都使用此结构,强烈建议所有第三方文件系统开发人员也这样做。 有关详细信息,请参阅 FsRtlSetupAdvancedHeaderFSRTL_ADVANCED_FCB_HEADER

NTFS 和 FAT 文件系统不支持分页文件、文件的预创建或关闭后路径中的流或文件对象上下文,也不支持IRP_MJ_NETWORK_QUERY_OPEN操作。

微型筛选器驱动程序可以通过分别调用 FltSupportsStreamContexts 和 FltSupportsStreamHandleContexts 来确定文件系统是否支持给定文件对象的流上下文和文件对象上下文。

文件上下文在 Windows Vista 及更高版本上可用。

对于仅支持每个文件的单个数据流的文件系统(例如 FAT),文件上下文等效于流上下文。 此类文件系统通常支持流上下文,但不支持文件上下文。 相反,筛选器管理器使用文件系统对流上下文的现有支持来提供此支持。 对于附加到这些文件系统的微型筛选器驱动程序实例,FltSupportsFileContexts 返回 FALSE,而 FltSupportsFileContextsEx 返回 TRUE(当为实例参数传递有效的非 NULL 值时)。

如果文件不支持上下文类型,微型筛选器无法将该类型的上下文附加到该文件。

若要支持文件上下文,文件系统必须:

  • 在其文件上下文结构中(通常是文件上下文块(FCB)),嵌入一个类型为 PVOID 的 FileContextSupportPointer 成员。 文件系统必须将此成员初始化为 NULL

  • 使用 FsRtlSetupAdvancedHeaderEx (而不是 FsRtlSetupAdvancedHeader)初始化其流上下文结构,将有效的指针传递给 FileContextSupportPointer 成员(嵌入在相应的文件上下文结构中)作为 FileContextSupportPointer 参数。 有关详细信息,请参阅 FsRtlSetupAdvancedHeaderExFSRTL_ADVANCED_FCB_HEADER

  • 当文件系统删除某个文件的文件上下文结构时,调用 FsRtlTeardownPerFileContexts 以释放筛选器和微型筛选器驱动程序与该文件关联的所有文件上下文结构。