Minifilter и контроль других драйверов

Тема в разделе "WASM.NT.KERNEL", создана пользователем user99, 17 июн 2018.

  1. user99

    user99 New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2018
    Сообщения:
    1
    Всем привет.
    Пишу MiniFilter для контроля за файловой системой, это мои первые попытки написать драйвер, поэтому могу путать терминологию и чтобы не было неоднозначностей буду приводить названия используемых функций.
    Фильтр устанавливаю с помощью FltRegisterFilter, контролирую IRP_MJ_CREATE и IRP_MJ_DIRECTORY_CONTROL. Внутри колбеков с помощью PsGetCurrentProcess получаю ссылку на PEPROCESS, дальше используется пара функций для определения идентификатора процесса (PsGetProcessId) и его названия. По полученным данным принимаю решение об фильтрации. Когда запрос идет из обычных приложений, то проблем никаких нет. Но если какой-либо драйвер работает с файловой системой напрямую, то PsGetProcessId ссылается на system процесс (тесты с несколькими драйверами не проводил, но как я понимаю у каждого драйвера будет свой уникальный PEPROCESS, который будет ссылаться на system-процесс). Отсюда возникает вопрос:
    Можно ли как-нибудь из PEPROCESS (или любым другим способом) понять какой конкретный драйвер работает с файловой системой?
    Можно попробовать сделать перехват системных функций, тогда по точке возврата есть шанс определить драйвер, но я так понимаю, что PatchGuard мне не даст этого сделать, а возиться с отключение защиты совсем не хочется (я так понял это не тривиальная задача).
    Драйвер пишу для Win10 x64 и на данный момент использовать его в других системах не планирую.