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 перешли к Windows Resource Protection, которая защищает файлы с помощью списков управления доступом. Команда sfc /scannow, которую пользователи Windows 11 до сих пор запускают для восстановления системных файлов, напрямую происходит от этой работы, заменив механизм 1995 года, который решал, когда действовать, сканируя имена файлов на наличие слова «setup».
Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.
Автор – Luke James




