Хук WriteFile не перехватывает операцию записи в файл

У меня есть приложение, которое записывает в файлы некоторые текстовые данные. Что я пытаюсь сделать, так это зацепить процесс написания. Я подключился к функциям MS Detours, CreateFile, WriteFile и WriteFileEx. CreateFile правильно отлавливает создание/открытие этих текстовых файлов, а перехватчики WriteFile — нет. Он улавливает много других вещей, но не это. Крючки работают исправно. Я проверил их.

Также Process Monitor показывает эти операции записи как операцию WriteFile (adv-имена IRP_MJ_WRITE и FASTIO_WRITE), точно так же, как когда я пишу что-то сам (с моим хуком операции работает правильно)

Что тут происходит? Есть ли другой способ записать что-то в файл, кроме WriteFile?


person Jakub Matczak    schedule 16.06.2012    source источник
comment
Другой альтернативой является NtWriteFile. ;-)   -  person Xearinox    schedule 16.06.2012


Ответы (2)


В Windows вы можете сопоставить файл с памятью, используя функции CreateFileMapping и MapViewOfFile после вызова CreateFile. Как только это будет сделано, вы можете использовать любую из функций памяти, таких как memcpy, для записи в файл. Для небольших текстовых файлов Windows делает это по умолчанию, что, вероятно, и происходит в вашем случае.

person Superman    schedule 16.06.2012
comment
Зацепил CreateFileMapping. Эта функция не вызывается во время создания текстового файла и получения новых данных. :/ - person Jakub Matczak; 16.06.2012

Это не решение Microsoft Detours, но вы можете попробовать использовать нашу консоль подключения Deviare, чтобы увидеть, вызываются ли там функции. Он написан на C#, исходный код консоли включен в дистрибутив. Его очень легко портировать на C++, и вы можете свободно им пользоваться (появляется только заставка при загрузке компонента Deviare). Загрузка доступна здесь http://www.nektra.com/products/deviare-api-hook-windows/

person sw.    schedule 18.06.2012