Оказывается, 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".

Больше статей на Shazoo
Тэги:

Об авторе

Эксперт по Fallout
Главный редактор
Более 16 лет в индустрии освещения видеоигр, кино, сериалов, науки и техники. Особенно разбираюсь в серии Fallout, ценитель The Elder Scrolls. Поклонник Arcanum и Fallout Tactics. Больше всего играю в Civilization, Old World и градостроители. Изучаю ИИ и загадки космоса.