概述
Windows 檔案保護 (WFP) 可防止程式替換重要的 Windows 系統檔案。程式絕不能覆蓋這些檔案,因為作業系統及其他程式都要使用它們。通過保護這些檔案,可以防止程式和作業系統出現問題。
WFP 可保護作為 Windows 的一部分安裝的重要系統檔案(例如,帶有 .dll、.exe、.ocx 和 .sys 擴展名的檔案及某些 True Type 字型)。WFP 使用檔案簽名和代碼簽名所生成的編錄檔案,來驗證受保護的系統檔案是不是正確的 Microsoft 版本。僅支持通過下列機制替換受保護的系統檔案:
使用 update.exe 安裝 Windows Service Pack
使用 Hotfix.exe 或 Update.exe 安裝修補程式
使用 Winnt32.exe 升級作業系統
Windows Update
如果程式使用其他方法替換受保護的檔案,則 WFP 會還原原始檔案。Windows 安裝程式在安裝重要系統檔案時支持 WFP 功能,它使用請求來調用 WFP 以安裝或替換受保護的檔案,而不是親自安裝或替換受保護的檔案。
WFP 功能的工作方式
WFP 功能使用兩種機制為系統檔案提供保護。第一種機制在後台運行。在 WFP 收到受保護目錄中的檔案的目錄更改通知後,就會觸發這種保護機制。WFP 收到這一通知後,就會確定更改了哪個檔案。如果此檔案是受保護的檔案,WFP 將在編錄檔案中查找檔案簽名,以確定新檔案的版本是否正確。如果此檔案的版本不正確,WFP 將使用高速快取檔案夾(如果檔案位於高速快取資料夾中)或安裝源中的檔案替換新檔案。WFP 按下面的順序在下列位置搜尋正確的檔案:
高速快取資料夾(默認位置是 %systemroot%\system32\dllcache)。
網路安裝路徑(如果系統是通過網路安裝的)。
Windows CD-ROM(如果系統是從 CD-ROM 安裝的)。
如果 WFP 在高速快取資料夾中找到此檔案,或者自動找到安裝源,WFP 就會替換檔案而不給出提示。如果 WFP 在所有這些位置均無法自動找到此檔案,將會出現以下訊息之一。其中 file_name是被替換的檔案的名稱,product是您所使用的 Windows 產品:Windows 檔案保護
正常運行 Windows 所需的檔案已被替換成無法識別的版本。要保持系統的穩定性,Windows 必須還原這些檔案的原始版本。請現在插入 productCD-ROM。
Windows 檔案保護
正常運行 Windows 所需的檔案已被替換成無法識別的版本。要保持系統的穩定性,Windows 必須還原這些檔案的原始版本。無法使用應該從中複製這些檔案的網路位置 \\server\share。請與系統管理員聯繫或現在插入 productCD-ROM。
注意:如果管理員沒有登錄,則 WFP 無法顯示上述任何一個對話框。在這種情況下,WFP 會在管理員登錄之後顯示對話框。在下列情況中,WFP 可能會等待管理員登錄:
SFCShowProgress 註冊表項丟失或設定為 1,且伺服器設定為在計算機每次啟動時進行掃描。在這種情況下,WFP 會等待控制台登錄。因此,在執行掃描前,RPC 伺服器不會啟動。在此期間,計算機不具備保護功能。
注意:您仍可以映射網路驅動器、使用系統檔案以及使用終端服務登錄到伺服器。WFP 不會將這些操作視為控制台登錄,並且會無限期地等待。
WFP 必須從網路共享還原檔案。如果檔案不在 Dllcache 資料夾中或已損壞,則可能發生此情況。在這種情況下,WFP 可能不具有從基於網路的安裝媒體訪問共享所需的正確憑據。
WFP 功能提供的第二種保護機制是系統檔案檢查器 (sfc.exe) 工具。GUI 模式安裝結束時,系統檔案檢查器工具對所有受保護的檔案進行掃描,確保使用無人參與安裝過程安裝的程式沒有對它們進行修改。系統檔案檢查器工具還對用來跟蹤正確檔案版本的所有編錄檔案進行檢查。如果任何編錄檔案丟失或損壞,WFP 將重命名受影響的編錄檔案,並在高速快取資料夾中檢索該檔案的高速快取版本。如果高速快取資料夾中沒有該編錄檔案的高速快取副本,則 WFP 功能請求相應的介質以檢索該編錄檔案的新副本。
管理員可以使用系統檔案檢查器工具來掃描所有受保護的檔案,以驗證它們的版本。系統檔案檢查器工具還可用於檢查並重新填充高速快取資料夾(默認位置是 %SystemRoot%\System32\Dllcache)。如果高速快取資料夾損壞或無法使用,您可以在命令提示符下使用 sfc /scanonce或 sfc /scanboot命令來修復此資料夾的內容。
下面的註冊表項中的
SfcScan
值有三種可能的設定:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\winlogon
SfcScan
值的設定是:0x0
= 在重新啟動後不掃描受保護的檔案。(默認值)0x1
= 在每次重新啟動後掃描所有受保護的檔案(如果運行 sfc /scanboot,則設定此值)。0x2
= 在重新啟動後掃描一次所有受保護的檔案(如果運行 sfc /scanonce,則設定此值)。默認情況下,將所有系統檔案快取到高速快取資料夾中,高速快取的默認大小為 400 MB。考慮到磁碟空間有限,最好不要在高速快取資料夾中保存所有系統檔案的高速快取版本。要更改高速快取的大小,請在下面的註冊表項中更改 SFCQuota
值的設定:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
WFP 將驗證過的檔案版本存儲在硬碟上的 Dllcache 資料夾中。高速快取檔案的數量取決於 SFCQuota
值的設定(默認大小是 0xFFFFFFFF 或 400 MB)。管理員可以根據需要來設定 SFCQuota
值。注意,如果將 SFCQuota
值設定為 0xFFFFFFFF
,則 WFP 功能快取所有受保護的系統檔案(大約為 2700 個檔案)。
在以下兩種情況下,不管將 SFCQuota 值設定為多少,高速快取資料夾都不可能包含所有受保護檔案的副本:磁碟空間不足。
在 Windows XP 下,當硬碟上的可用空間比 600 MB 與最大頁面檔案大小之和少時,WFP 停止填充 Dllcache 資料夾。
在 Windows 2000 下,當硬碟上的可用空間少於 600 MB 時,WFP 停止填充 Dllcache 資料夾。
網路安裝。
通過網路安裝 Windows 2000 或 Windows XP 時,在 Dllcache 資料夾中不會填充 i386\lang 目錄檔案。
此外,還會保護 Driver.cab 檔案中的所有驅動程式,但是,不會將它們填充到 Dllcache 資料夾中。WFP 可直接從 Driver.cab 檔案還原這些檔案,而無須提示用戶指定源介質。但是,如果運行 sfc /scannow命令,就會將 Driver.cab 檔案中的這些檔案填充到 Dllcache 資料夾中。
如果 WFP 檢測到發生了檔案更改,並且受影響的檔案不在高速快取資料夾中,則 WFP 檢查作業系統正在使用的已更改檔案的版本。如果目前正在使用的檔案是正確版本,則 WFP 將此檔案版本複製到高速快取資料夾中。如果目前正在使用的檔案不是正確版本,或者沒有在高速快取資料夾中快取此檔案,則 WFP 試圖查找安裝源。如果 WFP 找不到安裝源,它將提示管理員插入相應的介質以替換檔案或快取的檔案版本。
以下註冊表項中的 SFCDllCacheDir
值 (REG_EXPAND_SZ
) 指定 Dllcache 資料夾的位置。HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
SFCDllCacheDir值的默認值數據是 %SystemRoot%\System32
。SFCDllCacheDir
值可以是本地路徑。默認情況下,HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
註冊表項中未列出 SFCDllCacheDir
值。要修改高速快取位置,您必須添加該值。
在 Windows 啟動時,WFP 將註冊表項HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Windows File Protection
中的 WFP 設定同步(複製)到以下註冊表項:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
因此,如果 HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Windows File Protection
子項中包含 SfcScan
、SFCQuota
或 SFCDllCacheDir
值,則這些值優先於 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
子項中的相同值。