Оказывается, Windows 95 определяла инсталляторы по названию файла – система просто искала слова setup, install и inst
Windows 95 понимала, что запущена установочная программа, простым способом. Операционная система просто читала имя исполняемого файла и сверяла его с коротким списком жёстко прописанных слов.
Об этом рассказал инженер Microsoft и полуофициальный историк Windows Рэймонд Чен в своём блоге Old New Thing.
Если имя файла содержало "setup", "install" или "inst", программа помечалась как инсталлятор. Это запускало системную процедуру восстановления файлов, которые установщики могли повредить. В том же списке присутствовали три неанглийских слова, которые Чен назвал собственными догадками об итальянском, турецком и венгерском вариантах.
Полный список совпадений состоял из шести слов:
setup
install
inst
imposta
ayarla
felrak
Чен написал, что "install" был избыточным, так как любое имя с ним уже содержит "inst". Он предположил, что более короткую запись добавили позже, чтобы ловить установщики с именами вроде "blahinst", но при этом никто не удалил оригинал.
Если имя самой программы не давало совпадений, проводилась вторая проверка. Windows 95 смотрела, встречается ли слово "Setup" где-либо в пути к исполняемому файлу. Отдельная живая проверка выполнялась после установки любого мультимедийного драйвера через INF-файл, так как такие драйверы часто перезаписывали системные библиотеки DLL.
Это правило управляло механизмом восстановления, который Чен описывал ранее. Установщики той эпохи перезаписывали системные файлы, не проверяя версии, игнорируя правило Microsoft о том, что файл следует заменять только более новым. Например, инсталлятор с копиями общих DLL из Windows 3.1 хоронил под ними новые версии Windows 95, и любая программа, зависевшая от актуальных файлов, ломалась.
Windows 95 хранила резервные копии часто затираемых файлов в скрытой директории C:\Windows\SYSBCKUP. Затем система давала каждому установщику завершить работу, проверяла результат и восстанавливала корректные версии там, где инсталлятор их понизил. Вся эта защитная сеть целиком зависела от верного угадывания факта запуска установщика.
Поэтому установочная программа с необычным именем проскакивала мимо проверки, а обычная программа с именем вроде instant.exe запускала процедуру впустую. Проверку файлов часто откладывали до следующей загрузки, а не выполняли сразу.
Чен пояснил, что некоторые установщики, не сумев заменить уже используемый файл, откатывались в MS-DOS, запускали пакетный файл для подмены и перезапускали Windows. Из-за этого этап очистки должен был ждать перезагрузки, чтобы поймать всё, что изменил пакетный файл.
Microsoft отказалась от этого подхода в Windows 2000, где появилась технология Windows File Protection. Система регистрировалась на уведомления об изменениях файлов через Winlogon и восстанавливала защищённые файлы из кэша в %WinDir%\System32\dllcache. Никакого угадывания по именам и никакого ожидания завершения установочной программы больше не требовалось.
Затем Windows ME получила аналогичную System File Protection, а начиная с Vista Microsoft перешла на Windows Resource Protection, которая защищает файлы через списки контроля доступа.
Команда sfc /scannow, которой пользователи Windows 11 до сих пор чинят системные файлы, происходит напрямую от этой работы. Она заменила механизм 1995 года, решавший, когда действовать, простым сканированием имён файлов на слово "setup".
- Windows 95 загружается за 6 секунд на Ryzen 9 9900X
- В Windows 95 существовал секретный трюк для быстрой перезагрузки
- Microsoft прикрыла популярный метод нелегальной активации Windows