Перехват файловых операций под Win9x при "подменой" API
От: barazuk  
Дата: 25.11.04 18:56
Оценка:
Доброе время суток, господа!

Покорнейше просю Вашей помощи.

Постановка задачи.
Ввиду одностороннего общения с просьбами об реализации одной фичи
с автором достаточно известной программы,
возникла идея добавить необходимую функциональность (а именно,
дописать определенные строки в промежуточный скрипт),
"через задний проход": путем перехвата функций CreateFileA и
CloseHandle. Как "коза" были взяты сырцы с rsdn.ru
(http://www.rsdn.ru/article/baseserv/apicallsintercepting/apicallintercepting_src.zip
— сырцы, http://www.rsdn.ru/article/baseserv/apicallsintercepting.xml
Автор(ы): Игорь В. Филимонов
Дата: 13.09.2004
Это не единственная статья на тему перехвата API-вызовов. Необходимость в ней возникла вследствие того, что в других широко известных статьях и книгах есть небольшие ошибки, которые порой приводят к тому, что перехват не работает. Эта статья избавлена от указанных недостатков.
— статья).

Мною прожект был исправлен и дополнен (исходный вариант перехватывал
функции во всех процессах, я добавил фильтр по process ID,
исправил непонятку в одном месте, добавил диагностическое лог-окно и т.д.)

В принципе, перехват удался... почти.

Однако, не получается сам факт модификации файла "на лету".

Я замышлял так:

Программа-жертва ( зовет CreateFileA, и если имя файл открыт
для записи и его имя удовлетворяет определенным критериям, то хендл,
полученные от оригинального обработчика (ОО) мой обработчик (МО)
сохраняет.

Затем, при каждом вызове CloseHandle, МО сверяет закрываемый
хендл с сохраненным. В случае совпадения, зову WriteFile и дописываю
нужную мне информацию.

Собственно вопрос: это мне не удается. Хотя WriteFile рапортует
об успехе, и даже говорит, сколько байт записал, в файл нифига не пишется.

Сырцы вот:
http://www.i.com.ua/~olg_eug/AutoGKShell.rar

P.S. Это только пробная, "коленочная" версия. Для концептуальной проверки
запускается "C:\windows\notepad.exe", затем, в случае сохранения в нем файла
вида *_movie.avs, пытаюсь дописать в него строку "\nEndOfFile\n".

P.P.S. Все только под 9х! NT/2000/XP не интересуют!

WBR, Barazuk
WBR, Barazuk
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.