總有人在抱怨Windows的關機是如何的緩慢,實際上Windows本身的關機速度已經很快的了。問題主要出在用戶安裝的程序上面,由于一些設計不好的應用程序或驅動程序的問題,造成了關機上的延遲。針對這個問題,網絡上出現了類似于下面的技巧:
打開任務管理器,按住“Ctrl”鍵的同時,再單擊任務管理器窗口中的菜單“關機→關閉”命令時,系統會快速地被關閉,同樣,在按住“Ctrl”鍵時,選擇其他命令(例如重新啟動)時,也會達到快速執行該命令的目的。
同時,也出現了像SuperFast Shutdown一樣的快速關機軟件。
在討論上述技巧原理之前,先說說Windows是如何關機的:Windows關機步驟涉及到Windows多個組件和多個過程,簡單的說,Windows的關機步驟不是大多數人認為的那么簡單?;镜倪^程是這樣的:
1. 用戶發起關機指令以后,發起關機指令的程序會通知Windows子系統CSrss.EXE,CSRSS.EXE收到通知以后會和Winlogon.EXE做一個數據交換,接著由Winlogon.EXE通知CSRSS.EXE開始關閉系統的流程 。
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在終止系統進程的時候并不像終止用戶進程那樣如果無法在規定時間內終止則提示用戶,而是跳過這個進程,去執行下一個系統 進程的終止操作。使用的超時時間和第2步使用的時間相同。
上述3個步驟是整個Windows關機過程中最耗費時間的一段,大多數關機緩慢的原因都是因為這3個步驟引起的。完成前3個步驟以后,進入了關機操作的第4個階段,也是最后一個階段。
4. Winlogon.EXE調用一個原生API函數NtShutdownSystem()來命令系統執行后面的掃尾工作。在這個階段里面,Windows執行子系統會完成最后的關機操作,例如:設備驅動在這個階段里面完成一些驅動設定的特殊操作; 也是在這個階段,配置管理系統將被修改過的注冊表數據會寫道磁盤里面。等除了電源管理以后的全部子系統完成退出以后,電源管理完成最后的操作:如重啟、關機等。
了解了Windows的關機流程以后,下面分析一下前面說的快速關機操作是怎么完成的。先分析一下SuperFast Shutdown的原理,SuperFast Shutdown是使用Visual Basic編寫的,體積很小,就15KB,經過分析以后得出一個令人驚訝的結論:SuperFast Shutdown首先使用RtlAdjustPRivilege()提升自己的權限,然后直接調用NtShutdownSystem() 函數來完成關機過程。由于跳過了最為耗費時間的前3個步驟而直接進入第4個步驟,所以造成了能夠很快關機的假象。
再看看任務管理器的快速關機是如何實現的:分析結果也是類似于SuperFast Shutdown的原理,也是通過省略一些步驟來加快關機的速度。
那么,為什么在快速關機以后會出現設置丟失的情況呢?原因在于前3個步驟里面有一個讓進程正常退出的可能。大多數軟件在編寫的時候會把一些設置保存在自己私有的內存空間里面,當軟件關閉的時候才把這些設置回寫到特定的地方,如注冊表或某個配置文件里面 。而關機操作的第4步并沒有提供一種途徑能夠讓這些設置記錄下來,因為這個階段Windows已經認為前面所有必須經過的流程已經完成,剩下的就是Windows核心組件的退出的問題了。在這種情況下,使用快速關機導致設置丟失也不足為怪了。
因此,為了你系統的健康,關機還是按照正常順序來,數據的安全性往往比節省的那幾十秒鐘重要的多。
新聞熱點
疑難解答