古詩詞大全網 - 藝術簽名 - 如何保護系統文件不被軟件誤修改或誤刪除?

如何保護系統文件不被軟件誤修改或誤刪除?

當您安裝應用程序並意外導致Windows崩潰時,該應用程序很可能會重寫關鍵的Windows系統文件,從而導致系統崩潰。文件被修改後,結果往往是不可預知的。系統可能正常運行,或者出現壹些錯誤,或者完全崩潰。幸運的是,Windows 2000、XP和Server 2003應用了壹種稱為Windows文件保護(WFP)的機制,可以防止關鍵系統文件被重寫。在這篇文章中,我將解釋什麽是WFP以及它是如何工作的。我還會告訴妳如何改變或忽略WFP的行為。(註意:雖然WFP在Windows 2000、XP和Server 2003上的操作沒有區別,但本文中的信息(包括與註冊表相關的條目和SFC語法)是針對XP的。)

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目錄中查找* * *文件。