WFP 介紹
WFP 可保護作為 Windows 的一部分安裝的重要
系統檔案(例如,帶有 .dll、.exe、.ocx 和 .sys 擴展名的檔案及某些 True Type
字型)。WFP是使用
檔案簽名和
代碼簽名所生成的編錄檔案,來驗證受保護的
系統檔案是正確的 Microsoft 版本。僅支持通過下列機制替換受保護的
系統檔案:
使用 Update.exe 安裝 Windows Service Pack
使用 Hotfix.exe 或 Update.exe 安裝修補程式
Windows Update
如果程式使用其他方法替換受保護的檔案,則 WFP 會還原原始檔案。Windows 安裝程式在安裝重要
系統檔案時支持 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 檔案保護
無法使用應該從中複製這些檔案的
網路位置 \\server\share。請與系統
管理員聯繫或現在插入 productCD-ROM。
注意:如果
管理員沒有登錄,則 WFP 無法顯示上述任何一個對話框。在這種情況下,WFP 會在
管理員登錄之後顯示對話框。在下列情況中,WFP 可能會等待
管理員登錄:
SFCShowProgress
註冊表項丟失或設定為 1,且伺服器設定為在計算機每次啟動時進行掃描。在這種情況下,WFP 會等待控制台登錄。因此,在執行掃描前,RPC 伺服器不會啟動。在此期間,計算機不具備保護功能。
WFP 必須從網路共享還原檔案。如果檔案不在 Dllcache 資料夾中或已損壞,則可能發生此情況。在這種情況下,WFP 可能不具有從基於網路的安裝媒體訪問共享所需的正確憑據。
WFP 功能提供的第二種保護機制是
系統檔案檢查器 (Sfc.exe) 工具。GUI 模式安裝結束時,
系統檔案檢查器工具對所有受保護的檔案進行掃描,確保使用無人參與安裝過程安裝的程式沒有對它們進行修改。
系統檔案檢查器工具還對用來跟蹤正確
檔案版本的所有編錄檔案進行檢查。如果任何編錄檔案丟失或損壞,WFP 將
重命名受影響的編錄檔案,並在
高速快取檔案夾中檢索該檔案的高速快取版本。如果
高速快取檔案夾中沒有該編錄檔案的高速快取副本,則 WFP 功能請求相應的介質以檢索該編錄檔案的新副本。
管理員可以使用
系統檔案檢查器工具來掃描所有受保護的檔案,以驗證它們的版本。系統檔案檢查器工具還可用於檢查並重新填充
高速快取檔案夾(默認位置是 %SystemRoot%\System32\Dllcache)。如果
高速快取檔案夾損壞或無法使用,您可以在
命令提示符下使用
sfc /scanonce或
sfc /scanboot命令來修復此資料夾的內容。
下面的註冊表項中的
SfcScan
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 找不到安裝源,它將提示
管理員插入相應的介質以替換檔案或快取的
檔案版本。
值 (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
子項中的相同值。