Задача:
Имеется программа №1, которая в процессе выполнения загружает некоторую дллку.
Имеется наша программа (№2), которая запускает программу №1 и после загрузки библиотеки должна модифицировать файл длл, чтобы при последующем вызове loadlibrary для нее, модифицированный модуль заменил существующий.
Собственные эксперименты и наблюдения:
1. Far+hiew.
Запускаем программу №1 вручную.
-Редактировать длл нельзя.-
Копируем файл <имя>.dll в файл <имя>.dll_new.
Изменяем файл <имя>.dll_new.
Копируем <имя>.dll_new в <имя>.dll.
На запрос о перезаписи отвечаем утвердительно.
-Все прекрасно работает.-
2. Программа №2.
Запускает программу №1.
Копирует файл dll в dll_new:
—
CopyFile(dll, dll_new, FALSE)
--
Открывает файл для записи:
—
CreateFile(dll_new, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0)
--
Изменяет файл dll_new:
—
WriteFile(hFile_new, buff, 1, byteswritten, NULL)
--
Закрывает открытый файл.
Копирует dll_new в dll:
—
CopyFile(dll_new, dll, FALSE)
--
-Копирование не проходит-