快速关机是否会导致数据损坏?

从平常的经验可以看出,执行了关机操作后电脑不会立即断电,Windows还会有一系列的动作如关闭打开的程序等,那么从执行关机命令到最终断电是一个什么样的过程呢?

Windows的正常关机涉及到多个组件和多个过程 。我们来看一下它的基本过程 。

①用户发起关机指令后,发起关机指令的程序会通知 Windows子系统CSRSS.EXE,CSRSS.EXE收到通知后会和 Winlogon.EXE做一个数据交换,接着由Winlogon.EXE通知 CSRSS.EXE开始关闭系统的流程 。

②CSRSS.EXE收到Winlogon.EXE的通知后,会依次查询拥 有顶层窗口的用户进程,让这些用户进程退出 。如果某一个用户 进程在一个默认的超时时间5000毫秒(可以通过修改注册表键值 HKEY_CURRENT_USERControl PanelDesktop HungAppTimeout设定超时时间)内没有退出的话,Windows会显示 一个结束任务对话框用于询问用户是否结束这个任务 。默认情况 下这个对话框会一直显示而不会自动关闭 。

对于控制台程序来说,基本情况类似,只不过Windows使 用HKEY_CURRENT_USERControl PanelDesktop WaitToKillAppTimeout来设置超时时间 。

③接着是轮到终止系统进程了 。系统进程包括SMSS.EXE 、Winlogon.EXE、Lsass.EXE等 。Windows在终止系统进程的时候 并不像终止用户进程那样如果无法在规定时间内终止则提示用户 ,而是跳过这个进程,去执行下一个系统进程的终止操作 。使用 的超时时间和第2步使用的时间相同 。

上述3个步骤是整个Windows关机过程中最耗费时间的一 段,大多数关机缓慢的原因都是因为这3个步骤引起的 。完成前3 个步骤后,进入关机操作的第4个阶段,这也是最后一个阶段 。

④Winlogon.EXE调用一个原生API函数NtShutdownSystem()来 命令系统执行后面的扫尾工作 。在这个阶段里,Windows执行子系统会完成最后的关机操作,例如:设备驱动在这个阶段里完成 一些驱动设定的特殊操作;也是在这个阶段,配置管理系统将被 修改过的注册表数据回写到磁盘里面 。等除了电源管理以外的全 部子系统完成退出以后,电源管理完成最后的操作:如重启、关 机等 。

看来Windows关机过程还挺复杂的 。我也试用了刘凯读者 所说的软件SuperFast Shutdown(http://www.xp- smoker.com/installations/superfast.zip),确实会让关机速 度加快 。另外我们知道按Ctrl键的同时,再单击任务管理器窗口 中的菜单“关机→关闭”命令时,系统也会被快速关闭 。它们又 是如何实现快速关机的目的呢?
我分析了一下SuperFast Shutdown,它是用Visual Basic编写的 。经过分析后得出一个令人惊讶的结论:SuperFast Shutdown首先使用RtlAdjustPrivilege()提升自己的权限,然后 直接调用NtShutdownSystem() 函数来完成关机过程 。也就是说它跳过了最为耗费时间的前3个 步骤而直接进入第4个步骤,因此能够很快关机 。

利用Ctrl键配合任务管理器的快速关机技巧类似于 SuperFast Shutdown的原理,即通过省略一些步骤来加快关机的 速度 。

原来它们之所以能快速关机是因为投机取巧,跳过了一 些步骤 。我记得当初使用Ctrl键配合任务管理器的关机技巧时, 关机速度是快了,不过却出现过Office各组件中的个性设置丢失 等莫名其妙的问题,这些问题和快速关机有关吗?

毫无疑问,利用前面的方法快速关机很容易导致你所说 的那些问题 。这是因为在前3个步骤中,有一个让进程正常退出 的过程 。大多数软件在编写的时候会把一些设置保存在自己私有 的内存空间里面,当软件关闭的时候才把这些设置回写到特定的 地方,如注册表或某个配置文件里 。

而关机操作的第4步并没有提供一种途径能够让这些设置 被记录下来,因为这个阶段Windows认为前面所有必须经过的流 程已经完成,剩下的就是Windows核心组件的退出问题了 。在这 种情况下,使用快速关机导致软件设置丢失等现象也就不足为怪 了 。

推荐阅读