文章詳情頁
深入探討WinXP系統文件保護功能
瀏覽:2日期:2023-07-18 11:43:16
當你安裝一個應用程序卻不料引起Windows崩潰的時候,很有可能是因為應用程序改寫了關鍵的Windows系統文件,導致系統崩潰。在文件被修改后,結果往往不可預知。系統可能正常運行,或者出一些錯誤,或者完全崩潰。幸運的是,Windows 2000, XP,和Server 2003應用了一個稱作Windows文件保護(Windows File Protection, WFP)機制,它可以防止關鍵的系統文件被改寫。在這篇文章中,我將解釋何謂WFP和它是如何工作的。我還要告訴你如何修改或忽略WFP的行為。(注釋:盡管在Windows 2000, XP,和Server 2003上,WFP的運行沒什么區別,但這篇文章中的信息,包括注冊表相關條目和SFC語法,是針對XP的。) Windows文件保護是如何工作的 WFP被設計用來保護Windows文件夾的內容。WFP保護特定的文件類型,比如SYS、EXE、DLL、OCX、FON和TTF,而不是阻止對整個文件夾的任何修改。注冊表鍵值決定WFP保護的文件類型。 當一個應用程序試圖替換一個受保護的文件,WFP檢查替換文件的數字簽名,以確定此文件是否是來自微軟和是否是正確的版本。如果這兩個條件都符合,則允許替換。正常情況下,允許替換系統文件的文件種類包括Windows的服務包,補丁和操作系統升級程序。系統文件還可以由Windows更新程序或Windows設備管理器/類安裝程序替換。 如果這兩個條件沒有同時滿足,受保護文件將被新文件替換,但將很快被正確的文件替換回來。當這種情況發生時,Windows會從Windows安裝CD或者計算機的DLLCache文件夾中復制正確版本的文件。 Windows文件保護并不僅僅通過拒絕修改來保護文件,它還可以拒絕刪除。來看看WFP的做法,打開WINDOWSSYSTEM32文件夾并將CALC.EXE文件重命名為CALC.OLD。當你這樣做時,一個消息將提示你如果改變這個文件的擴展名可能會導致這個文件不可用。點擊Yes按鈕確認這個警告。現在,等幾分鐘后按F5鍵以刷新文件系統的視圖,完成替換可能要花些時間。當文件最終被替換后,Windows會在事件日志中做相應的記錄。 關于WFP值得關注的一點是它和Windows安裝程序結合的很緊密。無論何時,如果Windows安裝程序需要安裝一個受保護的文件,它就把這個文件交給WFP,而不是自己試圖去安裝這個文件。然后由WFP判斷是否允許安裝。 系統文件檢查 雖然自動文件替換會節省時間,但也存在需要手動干預的情況。例如,你可能不愿意空等著WFP去判斷受保護的文件是否已經被替換。幸運的是,你可以用一個名為系統文件檢查(SFC)的工具手動控制WFP。 SFC是一個命令行工具,需要在命令提示符窗口下運行。它的語法像這樣: SFC [/SCANNOW] [/SCANONCE] [/SCANBOOT] [/REVERT] [/PURGECACHE] [/CACHESIZE=x] /SCANNOW選項通知SFC立即掃描所有受保護的系統文件。如果在掃描過程中發現一個錯誤的文件版本,這個錯誤的版本將被替換為微軟正確的版本。當然,這意味著你可能必須有Windows安裝CD,最新的服務包或者升級補丁。 /SCANONCE參數通知WFP在系統下次啟動的時候掃描受保護的系統文件。在掃描過程中,任何錯誤的文件將被正確的版本替換。正如這個參數名的意思,這個掃描只進行一次。之后的系統啟動將恢復正常,SFC不再運行。 /SCANBOOT參數和/SCANONCE選項類似。區別在于SCANONCE只在Windows下次啟動時掃描受保護的文件,而SCANBOOT參數則在Windows每次啟動時都掃描系統文件。如果需要,這兩個參數將替換錯誤的系統文件,這可能需要你提供正確文件版本的拷貝。 /REVERT選項用來關閉SFC,例如,假設你使用SCANBOOT選項在每次系統啟動的時候掃描所以保護的文件。正如你所能想到的,這確實會增加計算機啟動的總時間。最后,你可能厭倦了漫長的啟動時間,想關閉SFC。只需要簡單的使用SFC /REVERT,就可以在啟動的時候關閉SFC。 對/PURGECACHE選項就需要謹慎些。在這之前,我解釋說Windows使用一個緩存文件夾來保存各類系統文件正確版本的備份。如果你運行SFC /PURGECACHE命令,那么這個文件緩存將被清空,那些備份文件將被刪除。這個命令還會導致Windows開始掃描各類受保護文件,并在掃描的同時重建這個文件緩存。當然,這可能意味著你必須向Windows提供Windows安裝CD或系統文件升級的拷貝。 最后一個SFC命令選項是/CACHESIZE=x。對于文件緩存的缺省大小確實存在很多自相矛盾的信息,在寫這篇文章的時候,我發現三篇不同的微軟知識庫文章中指定的文件緩存的缺省大小都不一樣。一篇文章中建議文件緩存的大小為50 MB,而另一篇建議的大小卻是300 MB。更有甚者,第三篇指出這個大小應該是無限的。其實缺省值的大小并不重要,因為你可以根據你的需要,使用CACHESIZE選項來改變這個文件緩存的大小。 在使用CACHESIZE選項時,你必須鍵入命令SFC /CACHESIZE=x,這個x是指你想分配給文件緩存的兆字節數。在指定了新的文件緩存大小后,你必須重啟系統并運行SFC /PURGECACHE命令。 通過注冊表控制WFP和SFC 在這之前,我解釋說注冊表控制WFP的一般行為。你可以修改幾個不同的注冊表鍵值以控制WFP的行為。你可以在每次運行SFC直接操作這些鍵的一部分,其他一些有更低級別的功能。比如指定文件緩存或者安裝文件的位置。 修改注冊表可能是危險的。如果你做了一個錯誤的修改,可能會導致Windows的崩潰或者破壞你的應用程序,所以我強烈建議在嘗試這一節中描述的任何技術之前,先對注冊表做一個完整的備份。 為了訪問SFC的注冊表鍵,在Run命令中鍵入REFEDIT命令。這將打開注冊表編輯器,現在瀏覽注冊表樹找到下面這個鍵: HKEY_LOCAL_MacHINESOFTWAREMicrosoftWindows NTCurrentVersionWinLogon 通常地,注冊表中WinLogon鍵一般用來控制各種不同的啟動選項。雖然許多SFC的選項都可控制SFC是否在啟動的的時候運行,但微軟已經將SFC相關的注冊表鍵放在這個部分。
排行榜
