Почему однотонные обои вызывали 30-секундную задержку входа в Windows 7.
Почему однотонные обои вызывали 30-секундную задержку входа в Windows 7.

Представьте, что вы меняете обои рабочего стола на простой синий, зелёный или чёрный цвет, и Windows неожиданно показывает экран приветствия 30 секунд после ввода пароля. К счастью, речь не о Windows 11. Проблема была в любимой многими Windows 7 и держалась несколько месяцев, пока её не исправили в ноябре 2009 года.

Однотонный цвет, пожалуй, самое простое, что может отрисовать Windows: здесь нет ни изображения для декодирования, ни большого битмапа для загрузки. И всё же вскоре после выхода Windows 7 такая безобидная настройка могла замедлить вход в систему. Вот что произошло:

Windows 7 не тратила 30 секунд на загрузку цвета

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

Задержка на экране входа в Windows 7.
Задержка на экране входа в Windows 7.

Система входа ждёт, пока каждый из этих компонентов сообщит о готовности, и когда приходит последний сигнал или когда истекают 30 секунд, в зависимости от того, что случится раньше, экран приветствия сменяется рабочим столом.

Однако когда в качестве фона рабочего стола задан однотонный цвет, экран приветствия всегда ждал все 30 секунд. Microsoft описала эту проблему для Windows 7 и Windows Server 2008 R2 и подтвердила, что переход на файл изображения устраняет задержку.

Windows 7 с однотонными обоями.
Windows 7 с однотонными обоями.

“Эта проблема не возникает, если выполняется одно или несколько из следующих условий:

  • Вы входите в систему с помощью подключения к удалённому рабочему столу.
  • Служба Desktop Window Manager Session Manager остановлена или отключена.
  • В качестве фона рабочего стола задан файл изображения.”

Компонент обоев может отправить сигнал “я готов” только если выполняется ветка кода, загружающая файл изображения. Поэтому при выборе однотонного цвета эта ветка не запускается, и сигнал не отправляется.

Windows 7 ждёт сообщение, которое не придёт, и через 30 секунд сдаётся и всё равно показывает рабочий стол. Вот как это происходит по шагам:

  • Введите пароль. Windows ждёт, пока компоненты оболочки сообщат о готовности.
  • С обоями-изображением: битмап загружается, отрисовывается и отправляет сигнал WallpaperReady.
  • С однотонным цветом: битмапа нет, поэтому код загрузки изображения не выполняется.
  • Сигнал WallpaperReady пропускается и не доходит до менеджера входа.
  • Windows простаивает 30 секунд, пока не сработает таймер-предохранитель.
  • Тайм-аут истекает. Windows перестаёт ждать и наконец показывает рабочий стол.
Смена обоев в Windows 7.
Смена обоев в Windows 7.

Баг не означал, что Windows выполняла 30 секунд лишней работы. Все остальные компоненты могли завершить работу за пять секунд, но экран приветствия всё равно висел бы все 30, потому что система не могла узнать состояние обоев. Она ждала отчёт, который логически не мог прийти.

“В обоих случаях вход не удлиняется на 30 секунд”, сказал Чен в блоге The Old New Thing, “Скорее, экран приветствия остаётся включённым все 30 секунд вместо фактического времени, которое потребовалось всем системам, чтобы сообщить о готовности (это может быть 5 секунд или 25 секунд, в зависимости от производительности вашей системы).”

Одного пропущенного сигнала хватило, чтобы обмануть весь процесс входа

Как компонент обоев сообщает Windows о готовности.
Как компонент обоев сообщает Windows о готовности.

“Код, который сообщал о готовности обоев, находился внутри кода битмапа обоев, а значит, если битмапа обоев нет, отчёт никогда не отправляется, и система входа напрасно ждёт отчёт, который никогда не придёт”, пояснил Чен.

Опытный инженер Microsoft также упомянул связанный баг с групповой политикой. Включение политик “Скрыть все значки на рабочем столе” и “Обычные обои” вместе вызывало ту же 30-секундную задержку почти по той же причине.

Исходный код, инициализировавший значки рабочего стола, сообщал о завершении, когда заканчивал работу. Когда Microsoft позже добавила поддержку политик, работа по инициализации оказалась внутри блока “если разрешено политикой”, и отчёт о завершении тоже оказался заперт в этом блоке. Отключите значки через политику, и отчёт не отправится.

Как загружаются значки рабочего стола
Как загружаются значки рабочего стола

Пользователи Windows 7 уже нашли решение

Хотя Microsoft выпустила Hotfix 9 ноября 2009 года, люди нашли решение своим путём. В ветке форума AnandTech за декабрь 2009 года пользователь описывает симптом медленного экрана приветствия, который лечится переходом с однотонного цвета на изображение.

Но для тех, кто хотел использовать однотонный цвет как обои, комментатор предложил создать маленькое однотонное изображение и применять его. Это тот же обходной путь, который Microsoft указала как официальное исправление. Microsoft также описала параметр реестра, регулирующий значение DelayedDesktopSwitchTimeout.

Крошечные допущения, зашитые в операционную систему, могут давать крайне странные результаты, когда пользователь делает что-то, чего автор кода не предполагал.

Впрочем, забыть Windows 7 непросто многим, включая саму Microsoft. Менее двух лет назад обнаружилось, что Microsoft всё ещё рекомендует инструмент резервного копирования и восстановления из Windows 7 в Windows 11.