從平常的經(jīng)驗(yàn)可以看出,執(zhí)行了關(guān)機(jī)操作后電腦不會(huì)立即斷電,Windows還會(huì)有一系列的動(dòng)作如關(guān)閉打開的程序等,那么從執(zhí)行關(guān)機(jī)命令到最終斷電是一個(gè)什么樣的過程呢?
Windows的正常關(guān)機(jī)涉及到多個(gè)組件和多個(gè)過程。我們來看一下它的基本過程。
①用戶發(fā)起關(guān)機(jī)指令后,發(fā)起關(guān)機(jī)指令的程序會(huì)通知 Windows子系統(tǒng)CSRSS.EXE,CSRSS.EXE收到通知后會(huì)和 Winlogon.EXE做一個(gè)數(shù)據(jù)交換,接著由Winlogon.EXE通知 CSRSS.EXE開始關(guān)閉系統(tǒng)的流程。
②CSRSS.EXE收到Winlogon.EXE的通知后,會(huì)依次查詢擁 有頂層窗口的用戶進(jìn)程,讓這些用戶進(jìn)程退出。如果某一個(gè)用戶 進(jìn)程在一個(gè)默認(rèn)的超時(shí)時(shí)間5000毫秒(可以通過修改注冊(cè)表鍵值 HKEY_CURRENT_USERControl PanelDesktop HungAppTimeout設(shè)定超時(shí)時(shí)間)內(nèi)沒有退出的話,Windows會(huì)顯示 一個(gè)結(jié)束任務(wù)對(duì)話框用于詢問用戶是否結(jié)束這個(gè)任務(wù)。默認(rèn)情況 下這個(gè)對(duì)話框會(huì)一直顯示而不會(huì)自動(dòng)關(guān)閉。
對(duì)于控制臺(tái)程序來說,基本情況類似,只不過Windows使 用HKEY_CURRENT_USERControl PanelDesktop WaitToKillAppTimeout來設(shè)置超時(shí)時(shí)間。
③接著是輪到終止系統(tǒng)進(jìn)程了。系統(tǒng)進(jìn)程包括SMSS.EXE 、Winlogon.EXE、Lsass.EXE等。Windows在終止系統(tǒng)進(jìn)程的時(shí)候 并不像終止用戶進(jìn)程那樣如果無法在規(guī)定時(shí)間內(nèi)終止則提示用戶 ,而是跳過這個(gè)進(jìn)程,去執(zhí)行下一個(gè)系統(tǒng)進(jìn)程的終止操作。使用 的超時(shí)時(shí)間和第2步使用的時(shí)間相同。
上述3個(gè)步驟是整個(gè)Windows關(guān)機(jī)過程中最耗費(fèi)時(shí)間的一 段,大多數(shù)關(guān)機(jī)緩慢的原因都是因?yàn)檫@3個(gè)步驟引起的。完成前3 個(gè)步驟后,進(jìn)入關(guān)機(jī)操作的第4個(gè)階段,這也是最后一個(gè)階段。
④Winlogon.EXE調(diào)用一個(gè)原生API函數(shù)NtShutdownSystem()來 命令系統(tǒng)執(zhí)行后面的掃尾工作。在這個(gè)階段里,Windows執(zhí)行子系統(tǒng)會(huì)完成最后的關(guān)機(jī)操作,例如:設(shè)備驅(qū)動(dòng)在這個(gè)階段里完成 一些驅(qū)動(dòng)設(shè)定的特殊操作;也是在這個(gè)階段,配置管理系統(tǒng)將被 修改過的注冊(cè)表數(shù)據(jù)回寫到磁盤里面。等除了電源管理以外的全 部子系統(tǒng)完成退出以后,電源管理完成最后的操作:如重啟、關(guān)機(jī)等。
看來Windows關(guān)機(jī)過程還挺復(fù)雜的。我也試用了劉凱讀者 所說的軟件SuperFast Shutdown(http://www.xp- smoker.com/installations/superfast.zip),確實(shí)會(huì)讓關(guān)機(jī)速 度加快。另外我們知道按Ctrl鍵的同時(shí),再單擊任務(wù)管理器窗口 中的菜單“關(guān)機(jī)→關(guān)閉”命令時(shí),系統(tǒng)也會(huì)被快速關(guān)閉。它們又 是如何實(shí)現(xiàn)快速關(guān)機(jī)的目的呢?
我分析了一下SuperFast Shutdown,它是用Visual Basic編寫的。經(jīng)過分析后得出一個(gè)令人驚訝的結(jié)論:SuperFast Shutdown首先使用RtlAdjustPrivilege()提升自己的權(quán)限,然后 直接調(diào)用NtShutdownSystem() 函數(shù)來完成關(guān)機(jī)過程。也就是說它跳過了最為耗費(fèi)時(shí)間的前3個(gè) 步驟而直接進(jìn)入第4個(gè)步驟,因此能夠很快關(guān)機(jī)。
利用Ctrl鍵配合任務(wù)管理器的快速關(guān)機(jī)技巧類似于 SuperFast Shutdown的原理,即通過省略一些步驟來加快關(guān)機(jī)的速度。
原來它們之所以能快速關(guān)機(jī)是因?yàn)橥稒C(jī)取巧,跳過了一 些步驟。我記得當(dāng)初使用Ctrl鍵配合任務(wù)管理器的關(guān)機(jī)技巧時(shí), 關(guān)機(jī)速度是快了,不過卻出現(xiàn)過Office各組件中的個(gè)性設(shè)置丟失 等莫名其妙的問題,這些問題和快速關(guān)機(jī)有關(guān)嗎?
毫無疑問,利用前面的方法快速關(guān)機(jī)很容易導(dǎo)致你所說 的那些問題。這是因?yàn)樵谇?個(gè)步驟中,有一個(gè)讓進(jìn)程正常退出 的過程。大多數(shù)軟件在編寫的時(shí)候會(huì)把一些設(shè)置保存在自己私有 的內(nèi)存空間里面,當(dāng)軟件關(guān)閉的時(shí)候才把這些設(shè)置回寫到特定的 地方,如注冊(cè)表或某個(gè)配置文件里。
而關(guān)機(jī)操作的第4步并沒有提供一種途徑能夠讓這些設(shè)置 被記錄下來,因?yàn)檫@個(gè)階段Windows認(rèn)為前面所有必須經(jīng)過的流 程已經(jīng)完成,剩下的就是Windows核心組件的退出問題了。在這 種情況下,使用快速關(guān)機(jī)導(dǎo)致軟件設(shè)置丟失等現(xiàn)象也就不足為怪了。
實(shí)際上Windows本身的關(guān)機(jī)速度已經(jīng)很快了,關(guān)機(jī)速度變 慢的多數(shù)問題都出在用戶安裝的程序上,由于一些設(shè)計(jì)不好的應(yīng) 用程序或驅(qū)動(dòng)程序的問題,造成了關(guān)機(jī)上的延遲。
因此要加快關(guān)機(jī)速度,正確的做法是盡量減少應(yīng)用程序 等對(duì)關(guān)機(jī)過程的影響,如關(guān)閉一些無用的自啟動(dòng)程序等,而借助 SuperFast Shutdown或一些技巧執(zhí)行非常規(guī)的關(guān)機(jī)操作盡量不要使用,畢竟 數(shù)據(jù)的安全性比節(jié)省的那幾十秒鐘重要得多。
------------------------------- · 相關(guān)文檔瀏覽 · --------------------------------------------------------------------- · 熱門文檔瀏覽 · -------------------------------------