System File Checker
(sfc)系統檔案檢查程式指令
在重新啟動計算機後掃描和驗證所有受保護的系統檔案。
文法sfc [/scannow] [/scanonce] [/scanboot]
[/revert] [/purgecache] [/cachesize=x]
參數
/scannow
立即掃描所有受保護的系統檔案,并用正确的 Microsoft
版本替換錯誤的版本。此指令可能需要通路 Windows 安裝源檔案。
/scanonce
一次掃描所有受保護的系統檔案(在重新啟動計算機時一次性掃描所有受保護的系統檔案)此指令可能需要在重新啟動計算機後通路 Windows
安裝源檔案。運作此指令時,下面系統資料庫項中 SfcScan 的 DWORD 值被設定為 2:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon
/scanboot
每次重新啟動計算機時掃描所有受保護的系統檔案。此指令可能需要在每次啟動計算機後通路 Windows
安裝源檔案。運作此指令時,下面系統資料庫項中 SfcScan 的 DWORD 值被設定為 1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon
/revert
将掃描傳回到預設操作(啟動計算機時不掃描受保護的檔案)。運作此指令時,不會重置預設的緩存大小。此指令相當于 Windows 2000
中的 /Enable 開關。
/purgecache
立即清空檔案緩存并掃描所有受保護的系統檔案。此指令可能需要通路 Windows
安裝源檔案。
/cachesize=x設定“Windows
檔案保護”檔案高速緩存的大小,以 MB 為機關。緩存的預設大小為 50 MB。運作此指令需要重新啟動計算機,然後運作
/purgecache 指令以調整磁盤上的緩存大小。此指令會将下面系統資料庫項中 SfcQuota 的 DWORD 值設定為
x:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon
/?
在指令提示符顯示幫助。
1,Windows
檔案保護功能的說明
概要資訊:
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 功能的工作方式:
1.
高速緩存檔案夾(預設位置是
%systemroot%\system32\dllcache)。
2.
網絡安裝路徑(如果系統是通過網絡安裝的)。
3.
Windows CD-ROM(如果系統是從 CD-ROM 安裝的)。
如果 WFP 在高速緩存檔案夾中找到此檔案,或者自動找到安裝源,WFP 就會替換檔案而不給出提示。如果 WFP
在所有這些位置均無法自動找到此檔案,将會出現以下消息之一。其中 file_name
是被替換的檔案的名稱,product 是您所使用的 Windows 産品:
•
Windows 檔案保護
正常運作 Windows 所需的檔案已被替換成無法識别的版本。要保持系統的穩定性,Windows
必須還原這些檔案的原始版本。請現在插入 product CD-ROM。
•
Windows 檔案保護
正常運作 Windows 所需的檔案已被替換成無法識别的版本。要保持系統的穩定性,Windows
必須還原這些檔案的原始版本。無法使用應該從中複制這些檔案的網絡位置
\\server\share。請與系統管理者聯系或現在插入
product CD-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 值設定為多少,高速緩存檔案夾都不可能包含所有受保護檔案的副本:
1.
磁盤空間不足。
在 Windows XP 下,當硬碟上的可用空間比 600 MB 與最大頁面檔案大小之和少時,WFP 停止填充 Dllcache
檔案夾。
在 Windows 2000 下,當硬碟上的可用空間少于 600 MB 時,WFP 停止填充 Dllcache 檔案夾。
2.
網絡安裝。
通過網絡安裝 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 子項中的相同值。
2,Windows
檔案保護的系統資料庫設定。
以下系統資料庫項是 Windows
檔案保護/系統檔案檢查器的系統資料庫設定的主要位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon另外,Windows 檔案保護/系統檔案檢查器設定還可能位于以下系統資料庫項中:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows
NT\Windows File Protection
在 Windows 啟動時,Windows 檔案保護服務将 WFP
設定從以下系統資料庫項
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows
NT\Windows File Protection
同步(複制)到以下系統資料庫項:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows
NT\CurrentVersion\Winlogon
是以,如果以下任何一個值顯示在 HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows
NT\Windows File Protection 項中,它們将優先于 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows
NT\CurrentVersion\Winlogon 項下的相同值。(預設情況下,隻有擁有管理者權限或系統權限的使用者才能修改這些設定。)
系統資料庫值
SFCDisable
(REG_DWORD)0 = 啟用(預設)
1 = 禁用,啟動時提示是否重新啟用
2 = 隻在下次啟動時禁用,不提示是否重新啟用
4 = 啟用,禁用彈出
注意:對于選項 1 和 2:需要挂接核心調試器才能使用。如果未挂接核心調試器,就不會禁用“Windows
檔案保護”。
SFCScan
(REG_DWORD)0 = 啟動時不掃描保護的檔案(預設)
1 = 每次啟動均掃描保護的檔案
2 = 掃描保護的檔案一次
SFCQuota
(REG_DWORD)n = Dllcache 配額的大小(以兆位元組計)(預設值為
0xffffffff 或大約 300 MB)
FFFFFFFF = 高速快取區域硬碟上的所有保護的系統檔案
SFCDllCacheDir
(REG_EXPAND_SZ)Path = Dllcache
檔案夾的本地或網絡位置(預設值為 %SystemRoot%\System32)
注意:不再支援 Dllcache 目錄的網絡共享。
SFCShowProgress
(REG_DWORD)0 = 不顯示系統檔案檢查器過程表(預設)
1 = 顯示系統檔案檢查器過程表
注意:Windows 2000
源檔案位置資訊存儲在以下系統資料庫位置,并可以修改為指向含有安裝檔案的 I386 平面檔案夾卷的 drive letter,或将系統資料庫中的
SourcePath 值更改為指向通用命名約定 (UNC) 路徑而不指向映射的網絡驅動器。
SourcePath 值位于下面的系統資料庫項中:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup
示例:
如果 I386 目錄為 C:\I386,則 SourcePath 值将為 C:\。
重新啟動計算機後,WFP 和 SFC /SCANNOW 使用新的源路徑而不提示插入 Windows 2000 安裝
CD-ROM。
2,在 Windows XP SP2
或 Windows Server 2003
中使用立即掃描開關時,“系統檔案檢查器”不接受包含安裝CD光牒的網絡位置。
症狀:在
Microsoft Windows XP Service Pack 2 (SP2) 中使用立即掃描開關運作系統檔案檢查器
(Sfc.exe) 時,将提示您提供 Windows XP (SP2)
CD光牒,但 Sfc.exe 卻不接受包含 Windows XP SP2
CD光牒的網絡位置。
注意:這個問題也适用于 Microsoft Windows Server 2003 Service Pack
1。
原因:如果從内部網絡伺服器部署了 Service Pack,并且已将
ServicePackSourcePath 系統資料庫子項修改為指向包含
Windows XP SP2 提取檔案的網絡位置,就會出現此問題。ServicePackSourcePath 系統資料庫子項位于 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup。
解決方案:警告:系統資料庫編輯器使用不當可能導緻嚴重問題,可能需要重新安裝作業系統。Microsoft
不能保證您可以解決因系統資料庫編輯器使用不當而導緻的問題。使用系統資料庫編輯器需要您自擔風險。
要解決此問題,請将系統資料庫修改為指向 %windir%\ServicePackFiles 檔案夾。為此,請按照下列步驟操作:
如果安裝了 Service
Pack1. 單擊“開始”,單擊“運作”,鍵入
regedit,然後單擊“确定”。
2. 找到以下子項:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup
3. 右鍵單擊“ServicePackSourcePath”,單擊“修改”,鍵入 %windir%\ServicePackFiles,然後單擊“确定”。
如果未安裝 Service
Pack1. 将内部二進制 (i386) 檔案夾複制到任一位置。例如,将 i386 檔案夾複制到 %windir%\Options。
2. 單擊“開始”,單擊“運作”,鍵入 regedit,然後單擊“确定”。
3. 找到以下子項:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup4. 右鍵單擊“SourcePath”,單擊“修改”,鍵入
%windir%\Options\i386,其中 Options 是包含 i386
檔案夾的檔案夾,然後單擊“确定”。