Windows Vista里面延遲刪除技術(shù)的變更
在 Windows 2000/XP/Server 2003 里面,包括Microsoft在內(nèi)的各個(gè)軟件廠商在碰到文件被占用無法馬上替換問題的時(shí)候,都會(huì)使用MoveFileEx API函數(shù)讓系統(tǒng)在注冊表
Key:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerValue:PendingFileRenameOperations
鍵值下面建立一個(gè)延遲刪除列表,系統(tǒng)在下次啟動(dòng)的時(shí)候,CSRSS.EXE進(jìn)程將根據(jù)這個(gè)列表對文件進(jìn)行延遲更新或者延遲刪除操作。
注:PendingFileRenameOperations是一個(gè)REG_MULTI_SZ類型的注冊表鍵值,不能直接通過注冊表編輯器編輯,否則會(huì)造成延遲刪除列表被破壞。要查看這個(gè)鍵值的內(nèi)容,可以使用注冊表編輯器或者使用我以前開發(fā)的 PendMove 工具,
對于Windows XP和Windows Vista兩個(gè)操作系統(tǒng)在安裝完需要重啟的補(bǔ)丁以后的PendingFileRenameOperations鍵值數(shù)據(jù)以后會(huì)發(fā)現(xiàn),Windows XP是利用PendingFileRenameOperations控制被占用文件進(jìn)行被占用文件的升級(jí)和刪除操作的。而Windows Vista并沒有使用這個(gè)鍵值控制被占用文件的升級(jí)和刪除操作。那么Windows Vista 補(bǔ)丁程序是怎么實(shí)現(xiàn)的延遲刪除呢?
首先,需要明確的一點(diǎn)就是Windows Vista 新增的 Restart Manager 機(jī)制并沒有完全被使用如果按照以前的說法,Windows Vista 在安裝完補(bǔ)丁程序以后基本上是不需要重啟的,但是現(xiàn)在看來每次打補(bǔ)丁都必須重啟系統(tǒng),至少進(jìn)幾個(gè)月的補(bǔ)丁都是這樣的。
那么Windows Vista是如何得知被占用文件的目標(biāo)文件和源文件信息,如何進(jìn)行升級(jí)的呢?
在進(jìn)行一番搜索以后,發(fā)現(xiàn)Windows Vista是利用一個(gè)/多個(gè)XML文件記錄數(shù)據(jù)信息,在一個(gè)特別的目錄里面存放臨時(shí)文件和升級(jí)文件的。我們知道,以前打完Windows 補(bǔ)丁,都會(huì)在Windows目錄下出現(xiàn)在$KB目錄,但是Windows Vista好像沒有這個(gè)內(nèi)容,看不見嗎?不是看不見,是因?yàn)楦揪蜎]有生成。
實(shí)際上,Windows Vista 是利用 %SystemRoot%WinSxS 目錄來存放臨時(shí)文件、備份文件和配置信息的,Windows 會(huì)在適當(dāng)?shù)臅r(shí)候根據(jù)配置文件來完成文件的更新操作。
打開 %SystemRoot%WinSxS 目錄,會(huì)看到兩個(gè)XML文件,pending.xml 和 cleanup.xml。前者記錄了文件的新版本信息和舊版本信息,后者用途好像是用于清理環(huán)境的。
根據(jù)XML文件的描述,很容易得知:
%SystemRoot%WinSxSBackup 目錄存放舊版本的文件 %SystemRoot%WinSxSTemp 目錄存放需要升級(jí)到的新版本文件 注意:Windows Vista 的升級(jí)機(jī)制又不同于以前版本的Windows,是增量升級(jí)哦。也就是只需要下載不同的片段內(nèi)容,Windows Vista 會(huì)根據(jù)片段內(nèi)容和原始文件進(jìn)行拼接以后,生成新的文件。最后留一個(gè)問題給大家:Windows Vista 之前的操作系統(tǒng)是利用 CSRSS.EXE 實(shí)現(xiàn)文件更新的,那么Windows Vista呢?
本文轉(zhuǎn)自:http://blogs.itecn.net/,作者:smallfrogs
