Добрый день. Перекопал весь сайт wasm.ru и написал длл-ку на C++, запрещающую доступ к сменным носителям, методом перехвата вызовов API CreateFileA и CreateFileW. Создание и открытие файлов перехватывается и запрещается, а копирование проходит. Программа API-монитор при копировании файлов тоже не перехватывает CreateFile в режиме записи. Куда дальше двигаться? Может кто-то сталкивался с такой проблемой?
Логичнее перехватывать ZwCreateFile. А то кроме CreateFile + WriteFile есть еще туева куча вариантов копирования файла.
Пасибо за совет. Перехватил, то только не ZwCreateFile, а NtCreateFile. Для определение имени файла по хэндлу использую функцию GetMappedFileName (в MSDN есть пример.) Проблема состоит в том, что таким способом можно определить имя только существующего файла. При копировании когда я перехватываю вызов ZwCreateFile на получателе файла еще не существует. Таким образом имя я определить не могу и запретить копирование тоже. Может быть есть еще какой-нибудь способ определить имя?
хмм, ZwCreateFile вызывается же два раза по идее при копировании - при открытии файла источника и файла назначения. Вот и пали имена из OBJECT_ATTRIBUTES->ObjectName.Buffer Правда, для чтения источника может применяться и ZwOpenFile, учти и этот старомодный вариант тоже
slow хз, не смотрел) вполне возможно. тогда вообще только ZwCreateFile хучить и все ЗЫ. Ща гляну ядро =)
Глянул. И ZwCreateFile и ZwOpenFile вызывают IoCreateFile. Вот пусть топикстартер и шурует хукать именно её )
Спасибо всем. Заработало. Перехватываю NtCreateFile. Просто не внимательно смотрел на параметры, оказалось что там есть имя файла. Правд остался еще один ворос - как быть с удалением файлов с диска? Пытаюсь перехватить NtDeleteFile тем-же способом, а он не перехватывается, мой перехватчик не вызывается. Как быть?