Добрый день. Есть проблема. У меня приложение и драйвер. Драйвер следит за операция над файлами, используется перехват NtCreateSection. Читал, что практически при любом чтении и создании файла вызывается, но при открытии файлов в некоторых программах никакой реакции, в частности Adobe Photoshop. Буду благодарен за информацию, которая реально прольёт свет на данную проблему.
Я пробовал DWORD * addr=(DWORD *)(1+(DWORD)GetProcAddress(GetModuleHandle("ntdll.dll"),"NtCreateFile")); и DWORD * addr=(DWORD *)(1+(DWORD)GetProcAddress(GetModuleHandle("ntdll.dll"),"NtOpenFile")); почему-то вообще перестаёт следить за файлами.
Насколько я понимаю драйвером обычно только код ядра перехватывают, а ты пытаешься захукать юзер-мод код.
почему вдруг? драйвер и занимается перехватом, просто получает, что перехватывать и если поймал закидывает в буфер памяти чего он поймал, а программуля выкидывает месагу что пойман такой-то файл, разрешить его открывать или нет.
Тот, кто отдает драйвру команды (юзермод) - слабое звено (ну ИМХО). Попробуй все сделать из драйвера.
Если ты знаешь, как организовать программу, которая будет вести перехват открытия файлов и при этом, нужно не просто логи писать, а выполнять действия, например их копировать в другое место. Поделись мыслями, желательно с кодами.
- Как перехватить ZwCreateFile/ZwOpenFile в ядре можно найти здесь же http://www.wasm.ru/article.php?article=apihook_3, Скопировать проблем тоже не будет - ZwCreateFile на чтение и еще один ZwCreateFile на запись - копирование. P.S. Забей на юзермод.
Попробую, просто никак не могу понять почему с функцией NtCreateSection получается, а с NtOpenFile нет