небольшой вопрос по минифильтрам

Тема в разделе "WASM.NT.KERNEL", создана пользователем rpy3uH, 2 окт 2010.

  1. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    везде говорят что минифильтры удобная весчь, решил написать кое-что на минифильтрах.
    Мне надо заблокировать доступ к папке. Почитал про минифильтры в WDK, насколько я понял надо делать что-то в этом духе
    Код (Text):
    1. PreOperationCallback (
    2.     __inout PFLT_CALLBACK_DATA Data,
    3.     __in PCFLT_RELATED_OBJECTS FltObjects,
    4.     __deref_out_opt PVOID *CompletionContext
    5.     )
    6. {
    7.    FltGetFileNameInformation( Data,  FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP,   &nameInfo );
    8.   if ( !RtlCompareUnicodeString(&nameInfo->ParentDir, &DADData.DirectoryName, FALSE))
    9.                         { // сравннение имен каталогов
    10.                           Data->IoStatus.Status=STATUS_ACCESS_DENIED;
    11.                           return FLT_PREOP_COMPLETE;  
    12.                         }
    13. }
    я правильно понял?
    а есть ли способ получить имя файла запроса IRP_MJ_CREATE не обращаясь к функции FltGetFileNameInformation? и вообще есть ли способ получить указатель на IRP в функции PreOperationCallback?
     
  2. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Все так.

    Файловый объект есть, получаете его и ObQueryNameString
    Помоему нет, да и зачем он нужен если вся информация содержащаяся в нем приходит в колбек?
     
  3. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    насколько я понял драйвер-минифильтр обычным способом не загрузить, только через FilterLoad?
    и ещё вопрос, можно ли создавать обычные объекты ядра в таких драйверах?
     
  4. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Загрузить.
    Можно.
     
  5. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    не понял, обычным способом через KmdManager можно загрузить или нет?
     
  6. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Можно
     
  7. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    ещё вопрос по поводу функции FilterUnloadCallback, всегда ли она будет вызвана? и возможны ситуации что она не будет вызвана?
     
  8. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Всякий раз при выгрузке минифильтра фильтр-менеджер дергает этот колбек. Не вызвана она может быть только если разработчик забыл установить сам колбек, но тогда сам драйвер просто не выгрузится.
     
  9. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    но ведь фильтр-менеджер это такой же драйвер как и все остальные и только он знает что мой драйвер можно выгрузить, а если кто-то попытается выгрузить мой драйвер через SCM manager?
     
  10. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Скорее всего фильтр менеджер просто подменяет DriverUnload, которая вызовется при NtUnloadDriver.