深入探討Windows XP系統(tǒng)文件保護(hù)功能
Windows文件保護(hù)是如何工作的
WFP被設(shè)計(jì)用來(lái)保護(hù)Windows文件夾的內(nèi)容。WFP保護(hù)特定的文件類型,比如SYS、EXE、DLL、OCX、FON和TTF,而不是阻止對(duì)整個(gè)文件夾的任何修改。注冊(cè)表鍵值決定WFP保護(hù)的文件類型。
當(dāng)一個(gè)應(yīng)用程序試圖替換一個(gè)受保護(hù)的文件,WFP檢查替換文件的數(shù)字簽名,以確定此文件是否是來(lái)自微軟和是否是正確的版本。如果這兩個(gè)條件都符合,則允許替換。正常情況下,允許替換系統(tǒng)文件的文件種類包括Windows的服務(wù)包,補(bǔ)丁和操作系統(tǒng)升級(jí)程序。系統(tǒng)文件還可以由Windows更新程序或Windows設(shè)備管理器/類安裝程序替換。
如果這兩個(gè)條件沒(méi)有同時(shí)滿足,受保護(hù)文件將被新文件替換,但將很快被正確的文件替換回來(lái)。當(dāng)這種情況發(fā)生時(shí),Windows會(huì)從Windows安裝CD或者計(jì)算機(jī)的DLLCache文件夾中復(fù)制正確版本的文件。
Windows文件保護(hù)并不僅僅通過(guò)拒絕修改來(lái)保護(hù)文件,它還可以拒絕刪除。來(lái)看看WFP的做法,打開(kāi)WINDOWSSYSTEM32文件夾并將CALC.EXE文件重命名為CALC.OLD。當(dāng)你這樣做時(shí),一個(gè)消息將提示你如果改變這個(gè)文件的擴(kuò)展名可能會(huì)導(dǎo)致這個(gè)文件不可用。點(diǎn)擊Yes按鈕確認(rèn)這個(gè)警告。現(xiàn)在,等幾分鐘后按F5鍵以刷新文件系統(tǒng)的視圖,完成替換可能要花些時(shí)間。當(dāng)文件最終被替換后,Windows會(huì)在事件日志中做相應(yīng)的記錄。
關(guān)于WFP值得關(guān)注的一點(diǎn)是它和Windows安裝程序結(jié)合的很緊密。無(wú)論何時(shí),如果Windows安裝程序需要安裝一個(gè)受保護(hù)的文件,它就把這個(gè)文件交給WFP,而不是自己試圖去安裝這個(gè)文件。然后由WFP判斷是否允許安裝。
系統(tǒng)文件檢查
雖然自動(dòng)文件替換會(huì)節(jié)省時(shí)間,但也存在需要手動(dòng)干預(yù)的情況。例如,你可能不愿意空等著WFP去判斷受保護(hù)的文件是否已經(jīng)被替換。幸運(yùn)的是,你可以用一個(gè)名為系統(tǒng)文件檢查(SFC)的工具手動(dòng)控制WFP。
SFC是一個(gè)命令行工具,需要在命令提示符窗口下運(yùn)行。它的語(yǔ)法像這樣:
SFC [/SCANNOW] [/SCANONCE] [/SCANBOOT] [/REVERT] [/PURGECACHE] [/CACHESIZE=x]
/SCANNOW選項(xiàng)通知SFC立即掃描所有受保護(hù)的系統(tǒng)文件。如果在掃描過(guò)程中發(fā)現(xiàn)一個(gè)錯(cuò)誤的文件版本,這個(gè)錯(cuò)誤的版本將被替換為微軟正確的版本。當(dāng)然,這意味著你可能必須有Windows安裝CD,最新的服務(wù)包或者升級(jí)補(bǔ)丁。
/SCANONCE參數(shù)通知WFP在系統(tǒng)下次啟動(dòng)的時(shí)候掃描受保護(hù)的系統(tǒng)文件。在掃描過(guò)程中,任何錯(cuò)誤的文件將被正確的版本替換。正如這個(gè)參數(shù)名的意思,這個(gè)掃描只進(jìn)行一次。之后的系統(tǒng)啟動(dòng)將恢復(fù)正常,SFC不再運(yùn)行。
/SCANBOOT參數(shù)和/SCANONCE選項(xiàng)類似。區(qū)別在于SCANONCE只在Windows下次啟動(dòng)時(shí)掃描受保護(hù)的文件,而SCANBOOT參數(shù)則在Windows每次啟動(dòng)時(shí)都掃描系統(tǒng)文件。如果需要,這兩個(gè)參數(shù)將替換錯(cuò)誤的系統(tǒng)文件,這可能需要你提供正確文件版本的拷貝。
/REVERT選項(xiàng)用來(lái)關(guān)閉SFC,例如,假設(shè)你使用SCANBOOT選項(xiàng)在每次系統(tǒng)啟動(dòng)的時(shí)候掃描所以保護(hù)的文件。正如你所能想到的,這確實(shí)會(huì)增加計(jì)算機(jī)啟動(dòng)的總時(shí)間。最后,你可能厭倦了漫長(zhǎng)的啟動(dòng)時(shí)間,想關(guān)閉SFC。只需要簡(jiǎn)單的使用SFC /REVERT,就可以在啟動(dòng)的時(shí)候關(guān)閉SFC。
對(duì)/PURGECACHE選項(xiàng)就需要謹(jǐn)慎些。在這之前,我解釋說(shuō)Windows使用一個(gè)緩存文件夾來(lái)保存各類系統(tǒng)文件正確版本的備份。如果你運(yùn)行SFC /PURGECACHE命令,那么這個(gè)文件緩存將被清空,那些備份文件將被刪除。這個(gè)命令還會(huì)導(dǎo)致Windows開(kāi)始掃描各類受保護(hù)文件,并在掃描的同時(shí)重建這個(gè)文件緩存。當(dāng)然,這可能意味著你必須向Windows提供Windows安裝CD或系統(tǒng)文件升級(jí)的拷貝。
最后一個(gè)SFC命令選項(xiàng)是/CACHESIZE=x。對(duì)于文件緩存的缺省大小確實(shí)存在很多自相矛盾的信息,在寫這篇文章的時(shí)候,我發(fā)現(xiàn)三篇不同的微軟知識(shí)庫(kù)文章中指定的文件緩存的缺省大小都不一樣。一篇文章中建議文件緩存的大小為50 MB,而另一篇建議的大小卻是300 MB。更有甚者,第三篇指出這個(gè)大小應(yīng)該是無(wú)限的。其實(shí)缺省值的大小并不重要,因?yàn)槟憧梢愿鶕?jù)你的需要,使用CACHESIZE選項(xiàng)來(lái)改變這個(gè)文件緩存的大小。
在使用CACHESIZE選項(xiàng)時(shí),你必須鍵入命令SFC /CACHESIZE=x,這個(gè)x是指你想分配給文件緩存的兆字節(jié)數(shù)。在指定了新的文件緩存大小后,你必須重啟系統(tǒng)并運(yùn)行SFC /PURGECACHE命令。
