Поделиться через


Сведения о заполнителях

Заполнитель файловой системы — это файл, который представляет фактическое содержимое файла или каталога, который находится в другом месте. Такая оптимизация позволяет размещать реальное содержимое файла или каталога в другом месте и получить его по требованию. Реальное содержимое включает метаданные, данные файлов и записи каталога.

Заполнителями могут быть файлы или каталоги. Они могут содержать часть метаданных реального файла или каталога или часть данных реального файла или записей каталога. Файлы заполнителей помечаются как разреженные файлы с набором битов FILE_ATTRIBUTE_SPARSE_FILE.

Как правило, заполнитель — это точка повторного анализа, которая принадлежит и управляется минифильтром файловой системы. Минифильтр-владелец является поддержку виртуализации и позволяет заполнителю выглядеть и вести себя как обычный файл или каталог в файловой системе. Эти драйверы виртуализации перехватывают запросы ввода-вывода в заполнителях и упрощают поведение, похожее на файловую систему. ProjFs и Cloud Files — это два примера платформ виртуализации в Windows, использующих заполнители.

Минифильтры, владеющие заполнителями, могут соответствующим образом обрабатывать такие запросы ввода-вывода для удовлетворения операций ввода-вывода. Например, если приложение пытается прочитать обезвоженный файл заполнителя, минифильтр предоставляет данные файла для удовлетворения запроса ввода-вывода.

Минифильтры-владение могут обеспечить виртуализацию только для запросов ввода-вывода, которые исходят из пользовательского режима или из компонентов, которые находятся над ними в стеке ввода-вывода.

Минифильтры, не владеющие заполнителем, могут выдавать операции ввода-вывода, предназначенные для фильтров под ними, с помощью таких API, как FltReadFile, FltWriteFile и т. д. Если несвойствующий минифильтр будет выдавать целевой запрос ввода-вывода к файлу заполнителя из-под минифильтра-владельца, то минифильтр-владелец не сможет надлежащим образом удовлетворить запрос ввода-вывода.

Например, если фильтр выдает целевой файл FltReadFile в обезвоженный файл заполнителя, который не видит минифильтр-владелец, фильтр нацеливания может получить блок нулей (0s), а не фактические данные, так как заполнитель может быть разреженным файлом. Если система кэширует чтение, которое извлекло блок 0, это чтение загрязняет кэш, что может повредить файловые данные, если система сбрасывает загрязненный кэш на диск. Поэтому крайне важно, чтобы минифильтры обрабатывали заполнители соответствующим образом.