везде говорят что минифильтры удобная весчь, решил написать кое-что на минифильтрах. Мне надо заблокировать доступ к папке. Почитал про минифильтры в WDK, насколько я понял надо делать что-то в этом духе Код (Text): PreOperationCallback ( __inout PFLT_CALLBACK_DATA Data, __in PCFLT_RELATED_OBJECTS FltObjects, __deref_out_opt PVOID *CompletionContext ) { FltGetFileNameInformation( Data, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP, &nameInfo ); if ( !RtlCompareUnicodeString(&nameInfo->ParentDir, &DADData.DirectoryName, FALSE)) { // сравннение имен каталогов Data->IoStatus.Status=STATUS_ACCESS_DENIED; return FLT_PREOP_COMPLETE; } } я правильно понял? а есть ли способ получить имя файла запроса IRP_MJ_CREATE не обращаясь к функции FltGetFileNameInformation? и вообще есть ли способ получить указатель на IRP в функции PreOperationCallback?
Все так. Файловый объект есть, получаете его и ObQueryNameString Помоему нет, да и зачем он нужен если вся информация содержащаяся в нем приходит в колбек?
насколько я понял драйвер-минифильтр обычным способом не загрузить, только через FilterLoad? и ещё вопрос, можно ли создавать обычные объекты ядра в таких драйверах?
ещё вопрос по поводу функции FilterUnloadCallback, всегда ли она будет вызвана? и возможны ситуации что она не будет вызвана?
Всякий раз при выгрузке минифильтра фильтр-менеджер дергает этот колбек. Не вызвана она может быть только если разработчик забыл установить сам колбек, но тогда сам драйвер просто не выгрузится.
но ведь фильтр-менеджер это такой же драйвер как и все остальные и только он знает что мой драйвер можно выгрузить, а если кто-то попытается выгрузить мой драйвер через SCM manager?