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 按下面的顺序在下列位置搜索正确的文件:

   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 子项中的相同值。

有关 WFP 功能的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
222473  (http://support.microsoft.com/kb/222473/ ) Windows 文件保护的注册表设置
有关 Windows XP 和 Windows Server 2003 中的系统文件检查器工具的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
310747  (http://support.microsoft.com/kb/310747/ ) Windows XP 和 Windows Server 2003 系统文件检查器 (Sfc.exe) 的说明
有关 Windows 2000 中的系统文件检查器工具的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
222471  (http://support.microsoft.com/kb/222471/ ) Windows 2000 系统文件检查器 (Sfc.exe) 说明

参考
有关 WFP 功能的更多信息,请访问以下 Microsoft 网站:
http://msdn2.microsoft.com/en-us/library/aa382551.aspx (http://msdn2.microsoft.com/en-us/library/aa382551.aspx)
有关 Windows Installer 和 WFP 的更多信息,请访问以下 Microsoft 网站:
http://msdn2.microsoft.com/en-us/library/aa372820.aspx (http://msdn2.microsoft.com/en-us/library/aa372820.aspx)