Этот пользовательский интерфейс принадлежит Winlogon, который специально загружает и вызывает Windows Update DLL во время последовательности завершения работы. Текст приходит из Центра обновления Windows через обратный вызов.
Winlogon вызывает различные внутренние функции в ответ на изменения состояния сеанса (вход в систему, выход из системы, запуск, завершение работы и т.д.) Где я исследовал, в XP одна из функций, вызываемых во время выключения, - это WUNotify. Он динамически загружает wuaueng.dll, вызывает GetProcAddress для порядкового номера 5 (WUAutoUpdateAtShutdown) и вызывает эту функцию с флагом bool и указателем на функцию StatusMessage2. WUAutoUpdateAtShutdown, в свою очередь, связывается вне процесса со службой Центра обновления Windows для выполнения своей работы и использует StatusMessage2 для обновления текста пользовательского интерфейса Winlogon ("Установка обновления 1 из 10" и т.д.)
До Vista вы могли создать свою собственную DLL-библиотеку уведомлений Winlogon, и с соответствующими ключами реестра Winlogon загружал бы ваш модуль и вызывал ваши экспорты для получения уведомлений, которые вас интересуют. Еще один способ сделать это, также до появления Vista, заключался в написании собственной библиотеки GINA DLL.
В настоящее время вы можете запускаться при завершении работы с помощью служебного уведомления (хотя у вас не так много времени здесь) или сценария завершения работы объекта групповой политики (который ограничен тайм-аутом реестра). Я не знаю, существует ли окно состояния Winlogon, когда эти вещи запускаются, но если это так, вы можете найти HWND и использовать SetWindowText напрямую, чтобы изменить сообщение о состоянии Winlogon. (Вот как в итоге работает StatusMessage2. Хотя это может быть полезно сделать из сценария завершения работы в качестве "доказательства концепции", это явно не поддерживаемое или рекомендуемое поведение.)