Windows重啓延遲刪除,重命名技術原理

轉自:http://hi.baidu.com/cndate/blog/item/d5e5b6a4d74c8df29152ee41.html

所謂重啓延遲刪除技術,就是在操作系統啓動前刪除或者替換文件!
說起重啓延遲刪除,大家可能都很陌生,但是實際上,該功能已經被各種軟件所採用:如安裝Windows 補丁程序(如:HotFix、Service Pack)、安裝Office 補丁程序、反病毒軟件的的清除、軟件的升級,文件強制刪除工具軟件等等等等……
本文將首先介紹延遲刪除/重命名的工作機制,然後介紹如何使用這個功能維護你的系統。
一、 什麼是重啓延遲刪除/重命名
很多人可能都碰到過下面的一種情形:在安裝某個軟件的時候,安裝程序正在初始化,突然,安裝程序彈出一個類似於下面所描述的警告提示:發現有重啓操作沒有完成,在重啓系統之前安裝過程不能繼續。然後安裝程序自動退出。這類提示最常發生在安裝Microsoft SQL Server 的時候。之所以出現這種提示,是因爲安裝程序檢測到了有未完成的重啓。那麼安裝程序是如何發現有未完成的重啓呢?這就是本文的要點所在:Windows 2000/XP/Server 2003 的延遲刪除/重命名功能。對於軟件開發人員來說,Windows 2000/XP/Server 2003 的延遲刪除/重命名功能並不是什麼新鮮玩意,但是其實行的機制倒很少有人會關注。本文不想過多地涉及Windows 內
部的實現機制,但是僅從一個側面簡單的描述一下Windows 2000/XP/Server 2003 的延遲刪除/重命名功能的原理和適用範圍。對於Windows 操作系統而言,要想成功的刪除一個文件或重命名一個文件,需要滿足一個條件:文件不能被佔用。可是有的時候,要刪除/重命名的文件總是被某個進程佔用着,這樣一來操作者就無法對這個文件進行刪除和重命名。要解決這個問題,微軟在Windows操作系統裏面提出了一個延遲刪除/重命名的功能。需要說明的是,這個功能不僅存在於Windows 2000/XP/Server 2003 操作系統裏面,對於Windows 9X,這個功能也是存在的。只不過本文的重點在於介紹延遲刪除的故事


延遲刪除/重命名的基本實現原理是這樣的:
1. 如果有任何應用程序需要使用延遲刪除/重命名功能,那麼該應用程序會使用一個
特殊的參數MOVEFILE_DELAY_UNTIL_REBOOT 來命令Win32 API 函數
MoveFileEx()在系統裏面註冊一個延遲刪除/重命名操作。註冊的記錄放在註冊表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\PendingFileRenameOperations 和PendingFileRenameOperations2
鍵值下面。該鍵值是一個REG_MULTI_SZ 類型的鍵值,註冊表編輯器無法直接
編輯這種類型的鍵值。
警告!不要使用註冊表編輯器直接編輯這個鍵值,這樣會造成系統無法判定是
該執行延遲刪除操作還是延遲重命名操作。
2. 操作系統在下次啓動的時候,由smss.exe 對上述的註冊表鍵值進行讀取分析並
完成相應的操作。需要注意的是,在執行延遲操作的時候,Win32 子系統並沒有
啓動,也就是說延遲操作是在沒有Win32 子系統干擾的情形下完成的。這樣設計
的一個最大好處就是可以替換任何受Win32 子系統保護的文件。
3. 如果上述鍵值指定了一個文件需要被刪除,那麼smss.exe 將執行刪除操作,如
果指定的是重命名操作,那麼smss.exe 執行的是重命名操作。
注意!如果執行重命名操作的時候,和新文件名同名的文件存在,那麼原有的文
件將被覆蓋掉。例如:假設有一個文件C:\1.DLL 存在,而延遲重命名裏面的記
錄是把C:\2.DLL 改名爲C:\1.DLL,那麼原來的C:\1.DLL 將被C:\2.DLL 覆蓋掉。
4. 當所有的記錄完成以後,系統自動把上述的註冊表鍵值刪除掉,不會存留任何痕
跡的。現在說說軟件開發人員是如何使用這個功能的。以安裝Windows Service Pack 爲例。在Service Pack 安裝完成以後,安裝程序肯定會提示用戶重新啓動。其實,重新啓動的過程就是一個執行延遲刪除/重命名的過程。由於在安裝Service Pack 的時候,很多文件不能夠被新版本的文件替換,如果碰到這個情況,安裝程序將會把新版本文件改名並放到和舊版本文件同樣的目錄下面,然後在系統裏面註冊一個延遲重命名操作。系統在下次啓動的時候,將執行這個延遲重命名操作以便讓舊版本文件被新版本文件替換掉從而完成Service Pack 的安裝。
對於延遲刪除來說,和延遲重命名類似。如果發現有一個文件不能夠被立即刪除,則
軟件會註冊一個延遲刪除,讓操作系統在下次啓動的時候自動把文件刪除掉。

對於延遲刪除/重命名功能來說,軟件開發人員把這個功能用於以下方面:
􀁺 新版本文件的替換
􀁺 刪除不能立即刪除的文件
對於一般用戶而言,什麼時候需要這個功能呢?
􀁺 無法重命名一個總是被某個進程佔用的文件
􀁺 無法刪除一個文件。特別是要刪除一個計算機病毒體文件的時候。
以上兩種情況都可以使用延遲操作,讓操作系統按照你的設想完成你需要的操作。
回過頭說說安裝程序是如何發現由未完成的重啓的。由於延遲操作是記錄在註冊表特
定鍵值下的,因此只需要檢測特定的鍵值就可以發現有未完成的重啓操作。

大家都知道有些刪除軟件爲什麼說:文件無法刪除,重啓刪除了吧!,還可以用來替換系統文件哦!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章