發新話題
打印

快速關機會導致資料損壞

快速關機會導致資料損壞

執行了關機操作后電腦不會立即斷電,Windows還會有一系列的動作如關閉打開的程序等,那麼從執行關機命令到最終斷電是一個什麼樣的過程呢?

Windows的正常關機涉及到多個組件和多個過程。我們來看一下它的基本過程。


  1.使用者發起關機指令后,發起關機指令的程序會通知Windows子系統CSRSS.EXE,CSRSS.EXE收到通知后會和Winlogon.EXE做一個資料交換,接著由Winlogon.EXE通知CSRSS.EXE開始關閉系統的流程。


  2.CSRSS.EXE收到Winlogon.EXE的通知后,會依次查詢擁有頂層視窗的使用者進程,讓這些使用者進程退出。如果某一個使用者進程在一個預設的超時時間5000毫秒(可以通過修改注冊表鍵值HKEY_CURRENT_USERControl PanelDesktop HungAppTimeout設定超時時間)內沒有退出的話,Windows會顯示一個結束任務對話框用於詢問使用者是否結束這個任務。預設情況下這個對話框會一直顯示而不會自動關閉。

  對於控制台程序來說,基本情況類似,只不過Windows使用HKEY_CURRENT_USERControl PanelDesktop WaitToKillAppTimeout來設置超時時間。


  3.接著是輪到終止系統進程了。系統進程包括SMSS.EXE、Winlogon.EXE、Lsass.EXE等。Windows在終止系統進程的時候並不像終止使用者進程那樣如果無法在規定時間內終止則提示使用者,而是跳過這個進程,去執行下一個系統進程的終止操作。使用的超時時間和第2步使用的時間相同。

  上述3個步驟是整個Windows關機過程中最耗費時間的一段,大多數關機緩慢的原因都是因為這3個步驟引起的。完成前3個步驟后,進入關機操作的第4個階段,這也是最后一個階段。


  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核心組件的退出問題了。在這種情況下,使用快速關機導致軟體設置丟失等現象也就不足為怪了。

  實際上Windows本身的關機速度已經很快了,關機速度變慢的多數問題都出在使用者安裝的程序上,由於一些設計不好的應用程序或驅動程序的問題,造成了關機上的延遲。

  因此要加快關機速度,正確的做法是盡量減少應用程序等對關機過程的影響,如關閉一些無用的自啟動程序等,而借助SuperFast Shutdown或一些技巧執行非常規的關機操作盡量不要使用,畢竟資料的安全性比節省的那幾十秒鐘重要得多。

TOP

發新話題