Основные понятия диспетчера фильтров

Диспетчер фильтров (FltMgr.sys) — это предоставляемый системой драйвер режима ядра, который реализует и предоставляет функции, обычно необходимые в драйверах фильтров файловой системы. Сторонние разработчики фильтров файловой системы могут использовать функции FltMgr для написания драйверов минифильтров, которые проще разрабатывать, чем устаревшие драйверы фильтров файловой системы. Конечным результатом является сокращенный процесс разработки и более качественные, более надежные факторы.

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

Минифильтры присоединяют в определенном порядке. Операционная система определяет порядок вложения по группам порядка нагрузки и высотам. Вложение драйвера минифильтра на определенной высоте на определенном томе называется экземпляром драйвера минифильтра.

Высота минифильтра:

  • Гарантирует, что экземпляр драйвера минифильтра всегда загружается в соответствующем расположении относительно других экземпляров драйвера минифильтра.
  • Определяет порядок, в котором FltMgr вызывает драйвер минифильтра для обработки операций ввода-вывода.

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

Схема, иллюстрирующая упрощенный стек ввода-вывода с диспетчером фильтров и тремя драйверами минифильтра.

Драйвер минифильтра может фильтровать операции ввода-вывода на основе IRP и быстрые операции обратного вызова фильтра ввода-вывода и фильтра файловой системы (FSFilter). Для каждой из операций ввода-вывода, которые он выбирает для фильтрации, минифильтр может зарегистрировать подпрограмму обратного вызова перед операцией, подпрограмму обратного вызова после операции или и то, и другое. Когда FltMgr обрабатывает операцию ввода-вывода, он вызывает соответствующую подпрограмму обратного вызова для каждого драйвера минифильтра, зарегистрированного для этой операции. Когда эта подпрограмма обратного вызова возвращается, FltMgr вызывает соответствующую подпрограмму обратного вызова для следующего драйвера минифильтра, зарегистрированного для операции.

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

  • Когда FltMgr получает операцию ввода-вывода, он вызывает процедуры обратного вызова минифильтра перед операцией в порядке высоты от наибольшей до самой низкой (A, B, C). Затем FltMgr перенаправит запрос ввода-вывода в драйвер следующего ниже уровня для дальнейшей обработки.
  • Когда FltMgr получает запрос ввода-вывода для завершения, он вызывает подпрограммы обратного вызова каждого драйвера минифильтра после операции в обратном порядке, от самого низкого к самому высокому (C, B, A).

Для взаимодействия с устаревшими драйверами фильтров FltMgr может присоединять объекты устройств фильтра к стеку ввода-вывода файловой системы в нескольких расположениях. Каждый объект устройства фильтра FltMgr называется кадром. С точки зрения устаревшего драйвера фильтра каждый кадр диспетчера фильтров — это просто еще один устаревший драйвер фильтра.

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

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

Важно!

Всегда проверяйте взаимодействие устаревших фильтров с минифильтрами или заменяйте устаревшие фильтры минифильтрами. Дополнительные сведения см. в разделе Рекомендации по переносу устаревших драйверов фильтров.

Если драйвер минифильтра выгружается и перезагружается, он перезагружается на той же высоте в том же кадре, из которого он был выгружен.

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

схема, иллюстрирующая упрощенный стек ввода-вывода с двумя кадрами диспетчера фильтров, экземплярами драйвера минифильтра и устаревшим драйвером фильтра.