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
中使用立即扫描开关时,“系统文件检查器”不接受包含安装光盘的网络位置。
症状:在
Microsoft Windows XP Service Pack 2 (SP2) 中使用立即扫描开关运行系统文件检查器
(Sfc.exe) 时,将提示您提供 Windows XP (SP2)
光盘,但 Sfc.exe 却不接受包含 Windows XP SP2
光盘的网络位置。
注意:这个问题也适用于 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
文件夹的文件夹,然后单击“确定”。