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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Внимание

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

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

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

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