Доброе время суток, господа!
Покорнейше просю Вашей помощи.
Постановка задачи.
Ввиду одностороннего общения с просьбами об реализации одной фичи
с автором достаточно известной программы,
возникла идея добавить необходимую функциональность (а именно,
дописать определенные строки в промежуточный скрипт),
"через задний проход": путем перехвата функций 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