|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 10, 2003 19:28:36 Доброе время суток, коллеги ! Хочу обсудить на форуме одну интересную тему. Предлагаю оставить пока за кадром полемику типа "а кому и для чего все это нужно". Как говориться, jedem das seine... Итак, проблема - заменить одну из системных и загруженных в данный момент (это важно!) DLL Windows своей собственной. Либо системной оригинальной, но чуть-чуть видоизмененной - это кому что ближе ;-). Покопавшись в статьях и ссылках, я, к сожалению, так и не смог найти удовлетворительного решения. В официальной документации Microsoft сказано, что для подобных целей следует использовать файл wininit.ini для семейства Windows 9X и API MoveFileEx() для семейства Windows 2000-XP. Обобщением такого подхода может служить вызов функции SetupInstallFile(Ex) из SETUPAPI.DLL, которой нужно только указать source и destination, а всю остальную рутинную работу она берет на себя. Но! Проведя с успехом подготовку к замене системной DLL, мы сталкиваемся с (вроде бы как) непреодолимым барьером : System File Protection ! После перезагрузки, когда процесс обновления DLL должен вступить в свою завершающую стадию этот код ( расположенный, как я понимаю, в SFC.DLL ) нагло перечеркивает все наши старания и усилия. Причем лично я наблюдал сей эффект только под Windows Millenium и XP - под Windows 98 и Windows 2000 вызов SetupInstallFile успешно решал задачу. В чем же тогда дело ? Я пробовал вручную изменять версию DLL в ресурсах (якобы на более свежую), игрался с датой/временем создания файлов, однако это не помогало. В одном из выпусков журнала 29-A (кажется в 5-м) я вычитал такую идею : вместе с модифированием системной DLL автор предлагал также "подправить" и "виновника всех бед" - саму SFC.DLL. Однако, по ряду причин этот подход выглядит далеко не идеальным, скорее вынужденной, крайней мерой. И самая главная причина кроется в необходимости лезть напрямую по фиксированному смещению в код DLLки , которая вовсе не обязана быть одинаковой (скорее наоборот)для всех версий и под-версий Windows... В общем, буду рад, если кого-то этот вопрос заинтересует. С уважением, VetabetA |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063 |