Windows 开机和关机慢,很多时候慢得令人抓狂。特别是做嵌入式开发时(如 XPE 和
WinCE),任谁都无法忍受开发出来的设备开关机的蜗牛速度。所以我们得为她加速。采用
HORM 是不错的方案,因为是直接从休眠文件中恢复系统现场,开机速度快了不少。采用
HORM 方案后,Windows 默认的关机过程中,很多步骤对我们的设备来说,是完全不需要的,
我们需要直接断电关机。本文将分析 Windows 的关机过程,然后介绍如何使用 Windows 未
公开的 API 实现直接断电关机。
一、Windows 关机过程
简单地说,在 Windows 关机时,系统做了以下工作:q
1. 软保护qq首先先结束登录用户打开的所有程序,保存用户的设置和系统设置,然后停止
系统服务和操作系统大部分进程。
2. 硬保护q复位硬件,如复位磁盘的磁头、停止硬件驱动程序等。
3. 断电q断开主板给各硬件设备的电源。当然这步需要主板的电源管理模块支持,一般来
说,ATX 电源和主板都支持软断电。
在整个关机过程中,软保护是最耗时的,少则五六秒,多则上分钟。刚安装的操作系统,
因为未安装驱动和开启额外的系统服务,关机非常快。开启服务一多,关机就慢下来了,特别
是安装了有 Bug 的驱动,问题可能更糟。
二、软保护
为了保证数据的完整性,软保护是必须的,不管是操作系统本身还是第三方的应用程序。
软保护的步骤有:
1. 用户发起关机指令以后,发起关机指令的程序会通知 Windows 子系统
CSRSS.EXE,CSRSS.EXE 收到通知以后会和 Winlogon.EXE 做一个数据交换,接着由
Winlogon.EXE 通知 CSRSS.EXE 开始关闭系统的流程q。
2. CSRSS.EXE 收到 Winlogon.EXE 的通知以后,会依次查询拥有顶层窗口的用户进程,
让这些用户进程退出。如果某一个用户进程在一个默认的超时时间 5000 毫秒(可以通过修改注
册表键值 HKEY_CURRENT_USER/Cont rol Panel/Desktop/ HungAppTimeout 设定超时
时间)内没有退出的话,Windows 会显示一个结束任务对话框用于询问用户是否结束这个任务。
默认情况下将显示这个对话框并一直保持而不会自动关闭。对于控制台程序来说,基本情况类
似,只不过 Windows 使用 HK EY_CURRENT_USER/Control Panel/Desktop/
WaitToKillAppTimeout 值来设置超时时间。
3. 接着是轮到终止系统进程了。系统进程包括 SMSS.EXE、Winlogon.EXE、Lsass.EXE
等。Windows 在终止系统进程的时候并不像终止用户进程那样如果无法在规定时间内终止则
提示用户,而是跳过这个进程,去执行下一个系统q进程的终止操作。使用的超时时间和第 2 步
使用的时间相同。
三、硬保护和断电
评论0
最新资源