總有人在抱怨Windows的關(guān)機(jī)是如何的緩慢,實(shí)際上Windows本身的關(guān)機(jī)速度已經(jīng)很快的了。問題主要出在用戶安裝的程序上面,由于一些設(shè)計(jì)不好的應(yīng)用程序或驅(qū)動程序的問題,造成了關(guān)機(jī)上的延遲。針對這個(gè)問題,網(wǎng)絡(luò)上出現(xiàn)了類似于下面的技巧:
打開任務(wù)管理器,按住“Ctrl”鍵的同時(shí),再單擊任務(wù)管理器窗口中的菜單“關(guān)機(jī)→關(guān)閉”命令時(shí),系統(tǒng)會快速地被關(guān)閉,同樣,在按住“Ctrl”鍵時(shí),選擇其他命令(例如重新啟動)時(shí),也會達(dá)到快速執(zhí)行該命令的目的。
同時(shí),也出現(xiàn)了像SuperFast Shutdown一樣的快速關(guān)機(jī)軟件。
在討論上述技巧原理之前,先說說Windows是如何關(guān)機(jī)的:Windows關(guān)機(jī)步驟涉及到Windows多個(gè)組件和多個(gè)過程,簡單的說,Windows的關(guān)機(jī)步驟不是大多數(shù)人認(rèn)為的那么簡單。基本的過程是這樣的:
1. 用戶發(fā)起關(guān)機(jī)指令以后,發(fā)起關(guān)機(jī)指令的程序會通知Windows子系統(tǒng)CSrss.EXE,CSRSS.EXE收到通知以后會和Winlogon.EXE做一個(gè)數(shù)據(jù)交換,接著由Winlogon.EXE通知CSRSS.EXE開始關(guān)閉系統(tǒng)的流程 。
2. CSRSS.EXE收到Winlogon.EXE的通知以后,會依次查詢擁有頂層窗口的用戶進(jìn)程,讓這些用戶進(jìn)程退出。如果某一個(gè)用戶進(jìn)程在一個(gè)默認(rèn)的超時(shí)時(shí)間5000毫秒(可以通過修改注冊表鍵值HKEY_CURRENT_USER/Cont rol Panel/Desktop/ HungAPPTimeout設(shè)定超時(shí)時(shí)間)內(nèi)沒有退出的話,Windows會顯示一個(gè)結(jié)束任務(wù)對話框用于詢問用戶是否結(jié)束這個(gè)任務(wù)。默認(rèn)情況下將顯示這個(gè)對話框并一直保持而不會自動關(guān)閉。對于控制臺程序來說,基本情況類似,只不過Windows使用HK EY_CURRENT_USER/Control Panel/Desktop/ WaitToKillAppTimeout值來設(shè)置超時(shí)時(shí)間。
3. 接著是輪到終止系統(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è)階段。
4. Winlogon.EXE調(diào)用一個(gè)原生API函數(shù)NtShutdownSystem()來命令系統(tǒng)執(zhí)行后面的掃尾工作。在這個(gè)階段里面,Windows執(zhí)行子系統(tǒng)會完成最后的關(guān)機(jī)操作,例如:設(shè)備驅(qū)動在這個(gè)階段里面完成一些驅(qū)動設(shè)定的特殊操作; 也是在這個(gè)階段,配置管理系統(tǒng)將被修改過的注冊表數(shù)據(jù)會寫道磁盤里面。等除了電源管理以后的全部子系統(tǒng)完成退出以后,電源管理完成最后的操作:如重啟、關(guān)機(jī)等。
了解了Windows的關(guān)機(jī)流程以后,下面分析一下前面說的快速關(guān)機(jī)操作是怎么完成的。先分析一下SuperFast Shutdown的原理,SuperFast Shutdown是使用Visual Basic編寫的,體積很小,就15KB,經(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ī)的假象。
再看看任務(wù)管理器的快速關(guān)機(jī)是如何實(shí)現(xiàn)的:分析結(jié)果也是類似于SuperFast Shutdown的原理,也是通過省略一些步驟來加快關(guān)機(jī)的速度。
那么,為什么在快速關(guān)機(jī)以后會出現(xiàn)設(shè)置丟失的情況呢?原因在于前3個(gè)步驟里面有一個(gè)讓進(jìn)程正常退出的可能。大多數(shù)軟件在編寫的時(shí)候會把一些設(shè)置保存在自己私有的內(nèi)存空間里面,當(dāng)軟件關(guān)閉的時(shí)候才把這些設(shè)置回寫到特定的地方,如注冊表或某個(gè)配置文件里面 。而關(guān)機(jī)操作的第4步并沒有提供一種途徑能夠讓這些設(shè)置記錄下來,因?yàn)檫@個(gè)階段Windows已經(jīng)認(rèn)為前面所有必須經(jīng)過的流程已經(jīng)完成,剩下的就是Windows核心組件的退出的問題了。在這種情況下,使用快速關(guān)機(jī)導(dǎo)致設(shè)置丟失也不足為怪了。
因此,為了你系統(tǒng)的健康,關(guān)機(jī)還是按照正常順序來,數(shù)據(jù)的安全性往往比節(jié)省的那幾十秒鐘重要的多。
新聞熱點(diǎn)
疑難解答
圖片精選