关于占位符
文件系统占位符是表示文件或驻留在其他位置的目录的实际内容的文件。 此优化允许文件或目录的实际内容驻留在其他位置并按需提取。 实际内容包括元数据、文件数据和目录条目。
占位符可以是文件或目录。 它们可能包含一部分真实文件或目录元数据,或者包含一部分真实文件数据或目录条目。 占位符文件被标记为具有FILE_ATTRIBUTE_SPARSE_FILE位集的稀疏文件。
通常,占位符是文件系统微筛选器拥有和管理的重分析点。 拥有微筛选器是虚拟化的启用器,使占位符的外观和行为与文件系统上的常规文件或目录类似。 这些虚拟化驱动程序会截获占位符上的 IO 请求,并促进类似于文件系统的行为。 ProjFs 和 云文件 是 Windows 中使用占位符的虚拟化平台的两个示例。
拥有占位符的微筛选器能够适当地处理此类 IO 请求,以满足 IO。 例如,如果应用程序尝试读取已解除冻结的占位符文件,则微筛选器会提供文件数据来满足 IO 请求。
拥有微筛选器只能为源自它们的 IO 请求提供虚拟化,这些请求来自用户模式或 IO 堆栈中高于它们的组件。
不拥有占位符的微筛选器能够使用 FLtReadFile、FltWriteFile 等 API 发出针对它们下面的筛选器的 IO 操作。 如果非拥有微筛选器从所属微筛选器下方向占位符文件发出目标 IO 请求,则拥有微筛选器将无法适当满足 IO 请求。
例如,如果筛选器将目标 FltReadFile 发布到拥有的微筛选器看不到的冻结占位符文件,则目标筛选器可能会获得零块 (0) 而不是实际数据,因为占位符可能是稀疏文件。 如果系统缓存提取块 0 的读取,则此读取会污染缓存,如果系统将受污染的缓存刷新到磁盘,则可能会损坏文件数据。 因此,微筛选器必须 正确处理占位符。