Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vazhnoe.docx
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
843 Кб
Скачать
☆

58. Перехват операций с файлами в ос Windows в режиме ядра. Мини-фильтры файловой системы.

Перехват процедур взаимодействия программ с файловой системой возможен в двух вариантах:

Установка фильтрующего драйвера – File System Filter Driver. Устаревший способ, унаследованный от предыдущих версий Windows (до Win 2000).

Установка фильтрующего мини-драйвера (мини-фильтра) – File System Mini-Filter. Способ основан на запуске компонента Filter Manager (fltmgr.sys) как фильтрующего драйвера, запускающего и контролирующего мини-фильтры.

Filter Manager: Активизируется при загрузке первого же мини-фильтра. Обеспечивает работу множества мини-фильтров. Может загружать и выгружать мини-фильтры без перезагрузки системы.

Устанавливается в стеке драйверов между менеджером ввода-вывода и драйверами файловой системы (NTFS, FAT и др.). Умеет устанавливаться в обхват других фильтрующих драйверов (см. рисунок). При установке мини-фильтров применяет параметр высоты установки (Altitude).

Скрывает сложность модели ввода-вывода на основе IRP-пакетов и предоставляет интерфейс для регистрации функций перехвата. Параметры в функции перехвата приходят разобранными (не IRP).

Предоставляет API и для ядра, и для пользовательского режима.

Mini-Filter: Загружается и управляется как из kernel mode, так и из user mode. Функции режима ядра – FltXxxYyy(), функции приложений – FilterXxx().

Перехватчики устанавливаются мини-фильтром в режиме ядра.

Для каждого тома файловой системы и присоединенного к нему мини-фильтра Filter Manager создает ассоциированный объект, называемый Instance. Мини-фильтр может перехватывать создание и удаление таких объектов.

Загрузка и выгрузка мини-фильтра:

NTSTATUS FltLoadFilter(PCUNICODE_STRING FilterName);

NTSTATUS FltUnloadFilter(PCUNICODE_STRING FilterName);

HRESULT FilterLoad(LPCWSTR lpFilterName); // user mode

HRESULT FilterUnload(LPCWSTR lpFilterName); // user mode

Регистрация процедур перехвата в мини-фильтре:

NTSTATUS FltRegisterFilter(DRIVER_OBJECT* Driver, const FLT_REGISTRATION* Registration, PFLT_FILTER* RetFilter);

NTSTATUS FltStartFiltering(PFLT_FILTER Filter);

void FltUnregisterFilter(PFLT_FILTER Filter);

1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]