Windows文件保護是如何工作的?
WFP旨在保護Windows文件夾的內容。WFP保護特定的文件類型,如SYS,EXE,DLL,OCX,FON和TTF,而不是防止整個文件夾的任何修改。註冊表鍵值決定了受WFP保護的文件類型。
當應用程序試圖替換受保護的文件時,WFP會檢查被替換文件的數字簽名,以確定該文件是否來自微軟以及版本是否正確。如果滿足這兩個條件,就允許替換。在正常情況下,允許替換系統文件的文件類型包括Windows服務包、補丁和操作系統升級。系統文件也可以被Windows更新或Windows設備管理器/類安裝程序替換。
如果這兩個條件不同時滿足,受保護的文件將被新文件替換,但很快會被正確的文件替換。發生這種情況時,Windows將從Windows安裝CD或計算機的DLLCache文件夾中復制該文件的正確版本。
Windows文件保護不僅通過拒絕修改文件來保護文件,還可以拒絕刪除文件。讓我們來看看WFP的做法。打開\WINDOWS\SYSTEM32文件夾,並將CALC.EXE文件重命名為CALC。舊當您這樣做時,會有壹條消息提示您,如果您更改此文件的擴展名,可能會使此文件不可用。單擊“是”按鈕確認該警告。現在,等待幾分鐘,然後按F5刷新文件系統的視圖。完成替換可能需要壹些時間。當文件最終被替換時,Windows會將其記錄在事件日誌中。
關於WFP值得註意的壹點是,它與Windows installer緊密集成。每當壹個Windows installer需要安裝壹個受保護的文件,它給WFP,而不是試圖安裝它。然後WFP判斷是否允許安裝。
系統文件檢查
雖然自動文件替換會節省時間,但也有需要手動幹預的情況。例如,您可能不想等待WFP來確定受保護的文件是否已被替換。幸運的是,您可以使用名為系統文件檢查(SFC)的工具手動控制WFP。
SFC是壹個命令行工具,需要在命令提示符窗口中運行。其語法是這樣的:
SFC[/SCANNOW][/SCANONCE][/SCANBOOT][/REVERT][/purge cache][/CACHESIZE = x]
/SCANNOW選項告訴SFC立即掃描所有受保護的系統文件。如果在掃描過程中發現不正確的文件版本,不正確的版本將被正確的Microsoft版本所替換。當然,這意味著您可能需要Windows安裝光盤、最新的服務包或升級補丁。
/SCANONCE參數告訴WFP在下次啟動系統時掃描受保護的系統文件。在掃描過程中,任何錯誤的文件都將被正確的版本替換。顧名思義,這種掃描只執行壹次。系統啟動後會恢復正常,SFC不再運行。
/SCANBOOT參數類似於/SCANONCE選項。不同之處在於,SCANONCE僅在下次Windows啟動時掃描受保護的文件,而SCANBOOT參數在每次Windows啟動時掃描系統文件。如有必要,這兩個參數將替換錯誤的系統文件,這可能需要您提供正確文件版本的副本。
/REVERT選項用於關閉SFC。例如,假設您使用SCANBOOT選項在每次系統啟動時掃描所有受保護的文件。可以想象,這真的會增加電腦的總啟動時間。最後,妳可能厭倦了漫長的啟動時間,想關閉SFC,只需在啟動時使用SFC /REVERT關閉SFC即可。
您需要小心使用/PURGECACHE選項。在此之前,我解釋了Windows使用緩存文件夾來保存各種系統文件的正確版本的備份。如果運行SFC /PURGECACHE命令,文件緩存將被清空,這些備份文件將被刪除。此命令還將導致Windows開始掃描所有類型的受保護文件,同時重建文件緩存。當然,這可能意味著您必須向Windows提供Windows安裝光盤或系統文件升級的副本。
最後壹個SFC命令選項是/cachesize = x,關於文件緩存的默認大小確實有很多相互矛盾的信息。在撰寫本文時,我發現三篇不同的Microsoft知識庫文章中指定的文件緩存的默認大小是不同的。壹篇文章建議文件緩存的大小應該是50 MB,而另壹篇文章建議應該是300 MB。更何況第三條指出這個大小應該是無限的。事實上,默認值的大小並不重要,因為您可以根據需要使用CACHESIZE選項來更改此文件緩存的大小。
使用CACHESIZE選項時,必須鍵入命令SFC /CACHESIZE=x,這是指要分配給文件緩存的兆字節數。指定新的文件緩存大小後,必須重新啟動系統並運行SFC /PURGECACHE命令。
通過註冊表控制WFP和證監會。
在此之前,我解釋了註冊表控制WFP的壹般行為。您可以修改幾個不同的註冊表項來控制WFP的行為。妳可以在每次運行SFC的時候直接操作這些鍵中的壹部分,而另壹部分則有更低級的功能。例如指定文件緩存或安裝文件的位置。
修改註冊表可能很危險。如果您進行了錯誤的修改,可能會導致Windows崩潰或破壞您的應用程序,因此我強烈建議在嘗試本節描述的任何技術之前,對註冊表進行完整的備份。
要訪問SFC的註冊表項,請在Run命令中鍵入REFEDIT命令。這將打開註冊表編輯器。現在瀏覽註冊表樹並找到以下註冊表項:
HKEY _ LOCAL _ MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ current version \ WinLogon
通常,註冊表中的WinLogon項通常用於控制各種啟動選項。雖然許多SFC選項可以控制SFC是否在啟動時運行,但微軟已經將SFC相關的註冊表項放在了這壹部分。
該註冊表項控制SFC是活動的還是無效的。事實上,只需更改DWORD的值,就可以獲得四種不同的選項。默認的DWORD值是0。這個設置激活sfc。通常妳不需要改變這個值。但是,您可以在0到4之間修改該值來激活SFC,而不會導致它彈出。
如果掛起內核調試器,最好關閉sfc,如果使用的是內核調試器,可以將註冊表項的DWORD值改為1,這樣會關閉SFC,並在每次啟動時提示是否再次激活SFC。
還可以通過將DWORD值設置為2來關閉SFC。該選項僅在下次啟動時關閉SFC。沒有重新激活SFC的選項,因為SFC將在以後啟動時自動激活。
SFCScan
在此之前,我解釋了SFC的SCANONCE、SCANBOOT和REVERT選項。只要使用這些選項,SFC實際上就是在修改SFCScan註冊表項。您可以通過更改其DWORD賦值來修改該鍵。
默認值為0。該值意味著啟動時不需要掃描受保護的文件。該設置相當於運行SFC /REVERT命令。
將DWORD值更改為1,這意味著受保護的文件每次啟動時都會被掃描。將SFCScan的值設置為1相當於運行SFC /SCANBOOT命令。
最後,將DWORD設置為2會告訴SFC在下次啟動時掃描受保護的文件,但不是所有後續的啟動。這相當於運行SFC /SCANONCE命令。
sfc配額
SFCQuota註冊表項用於控制SFC文件緩存的大小。也許您還記得,當我談到SFC /CACHESIZE=x命令時,我提到關於文件緩存的默認大小有許多不壹致的信息。但是,在我的系統上,註冊表項SFCQuota的DWORD值默認為0xffffffff。根據Microsoft知識庫,該值對應於300 MB的文件緩存大小。同壹知識庫中的壹篇文章指出,通過將該值更改為FFFFFFFF,可以緩存所有受保護的系統文件。
SFCDllCacheDir
在此之前,我解釋了Windows使用DLLCACHE文件夾作為存儲系統文件的備份位置。通常,該文件夾位於\WINDOWS\SYSTEM32目錄中。但是,通過修改SFCDllCacheDir註冊表項,可以修改文件緩存的位置。
文件緩存文件夾通常位於DLLCACHE目錄中,但是您可以通過修改該註冊表項來修改該文件夾的位置。唯壹需要註意的是,您必須指定壹個在本地硬盤上已經存在的地址。在Windows 2000中,可以指定壹個網絡* * *作為DLLCACHE的路徑,但是在Windows XP中沒有這樣的選項。
SFCShowProgress
與SFC相關的另壹個註冊表項是SFCShowProgress項。該註冊表項允許您將其DWORD值設置為0或1。默認值為0,這將禁止顯示SFC的進度。將該值設置為1允許SFC顯示進度。
源文件地址
在此之前,我解釋了WFP和證監會的工作方式。我指出,在某些情況下,您可能必須提供Windows安裝CD的副本或有效的源文件。但是,通過修改註冊表,完全可以向Windows指示源文件目錄,而無需Windows詢問您這些文件。
該註冊表項在註冊表的另壹部分。您必須找到以下密鑰:
HKEY _ LOCAL _ MACHINE \ Software \ Microsoft \ Windows \ current version \ Setup
找到該位置後,可以使用驅動器符號、路徑或UNC來指定Windows系統文件的位置。
使用此命令的前提是,您必須將文件放在名為I386的目錄中。例如,如果您的Windows系統文件位於名為C:\I386的目錄中,那麽您只需在註冊表中將路徑指定為C:\即可,因為Windows假定I386目錄存在。同樣,如果您計劃使用UNC***文件夾,I386文件夾必須存在於***文件夾中。例如,如果您計劃共享的目錄名為FILES,您需要將I386文件夾放在FILES目錄中。然後,您可以告訴Windows在\\server_name\FILES目錄中查找* * *文件。