Основные понятия диспетчера фильтров
Диспетчер фильтров (FltMgr.sys) — это драйвер, предоставляемый системой в режиме ядра, который реализует и предоставляет функциональные возможности, которые обычно требуются в драйверах фильтров файловой системы. Разработчики фильтров файловой системы могут использовать функции FltMgr для записи драйверов мини-фильтра , которые проще разрабатывать, чем устаревшие драйверы фильтров файловой системы. Конечный результат — это сокращенный процесс разработки и более высокий уровень качества, более надежные драйверы.
FltMgr устанавливается с Windows, но становится активным только при загрузке мини-драйвера. Он подключается к стеку файловой системы для целевого тома. Драйвер минифильтра подключается к стеку файловой системы косвенно путем регистрации в FltMgr для операций ввода-вывода, которые драйвер минифильтра выбирает для фильтрации.
Минифильтры присоединяют в определенном порядке. Операционная система определяет порядок вложения по группам заказов нагрузки и высотам. Вложение минифильтратора на определенной высоте на определенном томе называется экземпляром минифильтратора.
Высота минифильтра:
- Гарантирует, что экземпляр драйвера мини-фильтра всегда загружается в соответствующее расположение относительно других экземпляров драйвера минифильтра.
- Определяет порядок, в котором FltMgr вызывает драйвер минифильтра для обработки ввода-вывода.
На следующем рисунке показан упрощенный стек ввода-вывода с диспетчером фильтров и тремя драйверами мини-фильтра.
Драйвер мини-фильтра может фильтровать операции ввода-вывода на основе IRP и быстрые операции ввода-вывода и фильтра файловой системы (FSFilter). Для каждой операции ввода-вывода, которую он выбирает для фильтрации, мини-фильтр может зарегистрировать подпрограмму обратного вызова перед выполнением, подпрограмму обратного вызова после операции или оба. Когда FltMgr обрабатывает операцию ввода-вывода, она вызывает соответствующую подпрограмму обратного вызова для каждого драйвера минифильтратора, зарегистрированного для этой операции. Когда эта подпрограмма обратного вызова возвращается, FltMgr вызывает соответствующую подпрограмму обратного вызова для следующего минифильтратора драйвера, зарегистрированного для операции.
Например, предположим, что все три драйвера мини-фильтра в этом рисунке зарегистрированы для одной операции ввода-вывода. В этой ситуации:
- Когда FltMgr получает операцию ввода-вывода, она вызывает подпрограммы обратного вызова минифильтратора в порядке высоты от самого высокого до нижнего (A, B, C). Затем FltMgr перенаправит запрос ввода-вывода в следующий нижний драйвер для дальнейшей обработки.
- Когда FltMgr получает запрос ввода-вывода для завершения, он вызывает все подпрограммы обратного обратного вызова драйвера минифильтра в обратном порядке, от самого низкого до самого высокого (C, B, A).
Для взаимодействия с устаревшими драйверами фильтров FltMgr может подключить объекты устройств фильтра к стеку ввода-вывода файловой системы в нескольких расположениях. Каждый из объектов фильтра устройства FltMgr называется кадром. С точки зрения устаревшего драйвера фильтра каждый кадр диспетчера фильтров является просто другим устаревшим драйвером фильтра.
Каждый кадр диспетчера фильтров представляет диапазон высот. FlgMgr может настроить существующий кадр или создать новый кадр, чтобы разрешить драйверам минифильтра подключиться в правильном расположении.
FltMgr не может подключить мини-фильтр между двумя подключенными устаревшими фильтрами, если между ними еще нет кадра диспетчера фильтров. Если мини-фильтр должен быть присоединен над устаревшим фильтром, он может быть присоединен под ним в зависимости от наличия второго присоединенного устаревшего фильтра. Минифильтр, предназначенный для подключения ниже устаревшего фильтра, может быть присоединен выше этого устаревшего фильтра.
Внимание
Всегда проверяйте взаимодействие устаревших фильтров с минифильтрами или рекомендуется заменить устаревшие фильтры минифильтрами. Дополнительные сведения см. в руководстве по переносу устаревших драйверов фильтров.
Если драйвер мини-фильтра выгружается и перезагружается, система перезагрузит ее на той же высоте в том же кадре, с которого она была выгружена.
На следующем рисунке показан упрощенный стек ввода-вывода с двумя кадрами диспетчера фильтров, экземплярами драйвера мини-фильтра и устаревшим драйвером фильтра.