О Windows из первых рук: Суета вокруг пакета исправлений

Как убедиться, что в новом пакете исправлений есть все нужные исправления и обновления? Можете не сомневаться — все там есть.

Раймонд Чен

Задавались ли вы когда-либо вопросом, что происходит с вашими обновлениями и исправлениями при обновлении до нового пакета исправлений? Не волнуйтесь — все, что нужно, есть в пакете. Каждый пакет исправлений Windows содержит все обновления, доступные на момент выпуска пакета. Но что насчет исправлений безопасности, выпущенных после пакета исправлений?

Представьте себе, что у вас развернута оригинальная версия Windows 7 и вы задержали развертывание Windows 7 SP1 до завершения тестирования этой ОС на предмет совместимости с имеющимися бизнес-приложениями. А тем временем Microsoft выпускает пакет исправлений системы безопасности в обоих версиях Windows 7. Вы разворачиваете это исправление на всех своих компьютерах. После этого вы завершаете тестирование Windows 7 SP1, которое подтверждает пригодность этой ОС для работы в вашей компании. Вернется ли уязвимость, исправленная пакетом исправления безопасности, после установки пакета SP1?

К счастью, ответ на этот вопрос — «нет». Когда одновременно поддерживаются много версий Windows, пакеты исправлений безопасности распространяются по механизму, который называется «пакет обновления двойного режима». Подробнее об этом методе см. веб-страницу http://support.microsoft.com/kb/328848.

Предположим, что поддерживаются как оригинальная Windows 7, так и Windows 7 SP1. Исправление Windows 7 будет фактически состоять из двух исправлений: одно для оригинальной версии Windows 7 и второе для Windows 7 SP1. В системе применяется исправление, подходящее для установленной версии Windows 7. Однако в системе с Windows 7 есть дополнительный шаг. «На всякий случай» сохраняется версия для Windows 7 SP1.

При установке Windows 7 SP1 установщик пакета исправлений проверит, нет ли сохраненных исправлений Windows 7 SP1, и если обнаружит таковые, установит их в процессе обновления. Таким образом, если вы установили пакет исправлений безопасности, они никуда не пропадут, даже при обновлении до следующего пакета исправлений.

Скрытые обновления

Вы можете спросить, почему нет проблемы с обновлением до гипотетической версии Windows 7 SP2. Потому что исходное исправление не содержит версии для SP2, и установщик Windows 7 SP2 не найдет сохраненного исправления, которое он мог бы применить в процессе обновления.

Это не проблема, потому что все пакеты исправлений содержат все обновления, выпущенные на момент выпуска соответствующего пакета исправлений. Соответственно проблема, которую должно устранять исправление, уже устранена в Windows 7 SP2, просто потому что пакет SP2 вышел после публикации исправления. Пакеты обновления двойного режима нужны только для исправлений, которые выходят после пакета исправлений.

Есть еще один тип обновления, которое называется накопительным (rollup). Это обновление представляет собой просто набор других обновлений, объединенных для удобства в один пакет. Накопительное обновление можно считать мини-пакетом обновления. Если довести ситуацию до крайности, то можно считать, что Windows 8 является супер-пакетом исправлений для Windows 7, потому что помимо новой функциональности эта версия содержит все обновления для Windows 7.

Эти сложности подчеркивают то, как неправы программисты, когда при написании кода пытаются определить, установлено ли в системе определенное обновление. Некоторые пытаются перечислять все установленные обновления, но этот метод не обнаружит отдельное обновление, если оно было установлено в рамках накопительного обновления или при обновлении до Windows 7 SP2 или Windows 8. В результате программа считает, что обновление не установлено, хотя это не так. Просто обновление перестало быть независимой сущностью.

Но даже если в системе Windows 7 SP1 и не устанавливались никакие накопительные обновления, поиск определенного обновления может дать положительный результат. Например, представьте, что обновление устанавливает версию 1.3 библиотеки DLL. После этого некорректный установщик может перезаписать эту DLL версией 1.2. Обновление установлено, но фактически оно удалено в процессе последующих событий.

Поэтому правильный вопрос не «какие обновления установлены?», а «какие обновления надо установить?». Для этого можно использовать агент обновления Windows.

На сайте msdn.com много информации о нем. Пример сценария для поиска, загрузки и установки обновлений показывает, как найти все доступные обновления, которые еще не были применены. Затем выполняется загрузка и установка. Если вам требуется вполне определенное обновление, можно использовать прием, применяемый в сценарии для поиска, загрузки и установки отдельных обновлений.

Мир исправлений Windows намного более сложный, чем описанная здесь линейная последовательность пакетов исправлений. Существуют последовательности пакетов исправлений, последовательности QFE (Quick Fix Engineering) и последовательности GDR (General Distribution Release), каждая из которых отвечает различным требованиям к выпуску. В результате могут существовать многорежимные пакеты в самых различных комбинациях. Может быть, единый пакет, охватывающий все последовательности выпуска, но это тема совершенно другой статьи.

Раймонд Чен

Раймонд Чен (Raymond Chen) — *его веб-сайт и одноименная книга «Old New Thing», вышедшая в издательстве Addison-Wesley в 2007 году, рассказывает об истории Windows, программировании с использованием интерфейса Win32 и PowerPoint караоке.

Спасибо Марку Федрусу (Mark Phaedrus) за случайную техническую помощь при написании этой статьи.*