XP Windows Updater 在关机期间如何工作?

XP Windows Updater 在关机期间如何工作?

在 XP 中,当 Windows 更新准备好安装时,它们会在所有用户注销后的关机过程中在特殊的 UI 中运行。

这是如何实现的?

CSRSS 或其他 Windows 管理组件是否会启动 Windows 更新 UI 应用程序作为普通程序员无法使用的特殊情况?

它是否作为某种关机脚本运行?

或者它使用内核模式?

如果有的话,什么可执行文件或模块负责显示该 UI?

答案1

该 UI 属于 Winlogon,它在关机过程中专门加载并调用 Windows 更新 DLL。文本通过回调来自 Windows 更新。

Winlogon 调用不同的内部函数来响应会话状态的变化(登录、注销、启动、关机等)。据我调查,在 XP 中,关机期间调用的函数之一是 WUNotify。它动态加载 wuaueng.dll,在序数 5(WUAutoUpdateAtShutdown)上调用 GetProcAddress,并使用 bool 标志和指向 StatusMessage2 的函数指针调用该函数。WUAutoUpdateAtShutdown 反过来与 Windows Update 服务进行进程外通信以完成其工作,并使用 StatusMessage2 更新 Winlogon 的 UI 文本(“安装 10 个更新中的 1 个”,等等)

在 Vista 之前,您可以创建自己的 Winlogon 通知 DLL,然后使用适当的注册表项,Winlogon 将加载您的模块并调用您的导出以获取您感兴趣的通知。另一种方法(也是在 Vista 之前)是编写您自己的 GINA DLL。

如今,您可以使用服务通知(虽然您没有太多时间)或 GPO 关机脚本(受注册表超时限制)在关机时运行。我不知道当这些程序运行时 Winlogon 状态窗口是否存在,但如果存在,您可能能够查找 HWND,并直接使用 SetWindowText 来更改 Winlogon 的状态消息。(这就是 StatusMessage2 的最终工作方式。虽然从关机脚本中执行此操作作为“概念证明”可能很好,但显然这不是受支持或推荐的行为。)

相关内容