深入探讨WindowsXP系统文件保护功能

window

崩溃的时候,很有可能是因为应用程序改写了关键的Windows系统文件,导致系统崩溃。在文件被修改后,结果往往不可预知。系统可能正常运行,或者出一些错误,或者完全崩溃。幸运的是,Windows2000, XP,和Server 2003应用了一个称作Windows文件保护(WindowsFile Protection, WFP)机制,它可以防止关键的系统文件被改写。在这篇文章中,我将解释何谓WFP和它是如何工作的。我还要告诉你如何修改或忽略WFP的行为。(注释:尽管在Windows2000, XP,和Server 2003上,WFP的运行没什么区别,但这篇文章中的信息,包括注册表相关条目和SFC语法,是针对XP的。)
Windows文件保护是如何工作的

WFP被设计用来保护Windows文件夹的内容。WFP保护特定的文件类型,比如SYS、EXE、DLL、OCX、FON和TTF,而不是阻止对整个文件夹的任何修改。注册表键值决定WFP保护的文件类型。

当一个应用程序试图替换一个受保护的文件,WFP检查替换文件的数字签名,以确定此文件是否是来自微软和是否是正确的版本。如果这两个条件都符合,则允许替换。正常情况下,允许替换系统文件的文件种类包括Windows的服务包,补丁和操作系统升级程序。系统文件还可以由Windows更新程序或Windows设备管理器/类安装程序替换。

如果这两个条件没有同时满足,受保护文件将被新文件替换,但将很快被正确的文件替换回来。当这种情况发生时,Windows会从Windows安装CD或者计算机的DLLCache文件夹中复制正确版本的文件。

Windows文件保护并不仅仅通过拒绝修改来保护文件,它还可以拒绝删除。来看看WFP的做法,打开\WINDOWS\SYSTEM32文件夹并将CALC.EXE文件重命名为CALC.OLD。当你这样做时,一个消息将提示你如果改变这个文件的扩展名可能会导致这个文件不可用。点击Yes按钮确认这个警告。现在,等几分钟后按F5键以刷新文件系统的视图,完成替换可能要花些时间。当文件最终被替换后,Windows会在事件日志中做相应的记录。

关于WFP值得关注的一点是它和Windows安装程序结合的很紧密。无论何时,如果Windows安装程序需要安装一个受保护的文件,它就把这个文件交给WFP,而不是自己试图去安装这个文件。然后由WFP判断是否允许安装。

系统文件检查

虽然自动文件替换会节省时间,但也存在需要手动干预的情况。例如,你可能不愿意空等着WFP去判断受保护的文件是否已经被替换。幸运的是,你可以用一个名为系统文件检查(SFC)的工具手动控制WFP。

SFC是一个命令行工具,需要在命令提示符窗口下运行。它的语法像这样:

SFC [/SCANNOW] [/SCANONCE] [/SCANBOOT] [/REVERT] [/PURGECACHE] [/CACHESIZE=x]

/SCANNOW选项通知SFC立即扫描所有受保护的系统文件。如果在扫描过程中发现一个错误的文件版本,这个错误的版本将被替换为微软正确的版本。当然,这意味着你可能必须有Windows安装CD,最新的服务包或者升级补丁。

/SCANONCE参数通知WFP在系统下次启动的时候扫描受保护的系统文件。在扫描过程中,任何错误的文件将被正确的版本替换。正如这个参数名的意思,这个扫描只进行一次。之后的系统启动将恢复正常,SFC不再运行。

/SCANBOOT参数和/SCANONCE选项类似。区别在于SCANONCE只在Windows下次启动时扫描受保护的文件,而SCANBOOT参数则在Windows每次启动时都扫描系统文件。如果需要,这两个参数将替换错误的系统文件,这可能需要你提供正确文件版本的拷贝。

/REVERT选项用来关闭SFC,例如,假设你使用SCANBOOT选项在每次系统启动的时候扫描所以保护的文件。正如你所能想到的,这确实会增加计算机启动的总时间。最后,你可能厌倦了漫长的启动时间,想关闭SFC。只需要简单的使用SFC /REVERT,就可以在启动的时候关闭SFC。

对/PURGECACHE选项就需要谨慎些。在这之前,我解释说Windows使用一个缓存文件夹来保存各类系统文件正确版本的备份。如果你运行SFC /PURGECACHE命令,那么这个文件缓存将被清空,那些备份文件将被删除。这个命令还会导致Windows开始扫描各类受保护文件,并在扫描的同时重建这个文件缓存。当然,这可能意味着你必须向Windows提供Windows安装CD或系统文件升级的拷贝。

最后一个SFC命令选项是/CACHESIZE=x。对于文件缓存的缺省大小确实存在很多自相矛盾的信息,在写这篇文章的时候,我发现三篇不同的微软知识库文章中指定的文件缓存的缺省大小都不一样。一篇文章中建议文件缓存的大小为50 MB,而另一篇建议的大小却是300 MB。更有甚者,第三篇指出这个大小应该是无限的。其实缺省值的大小并不重要,因为你可以根据你的需要,使用CACHESIZE选项来改变这个文件缓存的大小。

在使用CACHESIZE选项时,你必须键入命令SFC /CACHESIZE=x,这个x是指你想分配给文件缓存的兆字节数。在指定了新的文件缓存大小后,你必须重启系统并运行SFC /PURGECACHE命令。

通过注册表控制WFP和SFC

在这之前,我解释说注册表控制WFP的一般行为。你可以修改几个不同的注册表键值以控制WFP的行为。你可以在每次运行SFC直接操作这些键的一部分,其他一些有更低级别的功能。比如指定文件缓存或者安装文件的位置。

修改注册表可能是危险的。如果你做了一个错误的修改,可能会导致Windows的崩溃或者破坏你的应用程序,所以我强烈建议在尝试这一节中描述的任何技术之前,先对注册表做一个完整的备份。

为了访问SFC的注册表键,在Run命令中键入REFEDIT命令。这将打开注册表编辑器,现在浏览注册表树找到下面这个键:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\WinLogon

通常地,注册表中WinLogon键一般用来控制各种不同的启动选项。虽然许多SFC的选项都可控制SFC是否在启动的的时候运行,但微软已经将SFC相关的注册表键放在这个部分。

    SFCDisabled

这个注册表键控制SFC是激活的还是无效的。实际上你只需通过改变DWORD的值,就可以得到四个不同的选项。缺省的DWORD值是0。这个设置激活SFC。通常你不需要改变这个值。然而,你可以在0到4之间修改这个值使得激活SFC但不让它弹出。

如果将内核调试器挂起,你最好关闭SFC。如果正在使用一个内核调试器,你可以将注册表键的DWORD值修改为1,这会关闭SFC并且会在以后的每次启动时都提示你是否再次激活SFC。

你也可以通过将DWORD值设为2来关闭SFC。这个选项只是在下次启动时关闭SFC。没有再激活SFC的选项,因为SFC将在这之后启动时自动激活。

SFCScan

在这之前,我解释了SFC的SCANONCE, SCANBOOT,和REVERT选项。只要你使用这些选项,实际上SFC是在修改SFCScan注册表键。你可以通过改变它的DWORD赋值来修改这个键。

默认的值是0。这个值的意思是不需要在启动时扫描受保护文件。这个设置相当于运行SFC /REVERT命令。

改变DWORD值为1,意思是在每次启动时都扫描受保护文件。设置SFCScan的值为1相当于运行SFC /SCANBOOT命令。

最后,设DWORD值为2就是告诉SFC在下次启动时扫描受保护文件,但并非以后的所有启动。这相当于运行SFC /SCANONCE命令。

SFCQuota

SFCQuota注册表键用来控制SFC文件缓存的大小。或许你会记得,之前在我谈到SFC /CACHESIZE=x 命令时,我提到关于文件缓存的默认大小,存在许多不一致的信息。然而在我的系统上,注册表键SFCQuota的DWORD值默认为0xffffffff。根据微软知识库,这个值对应文件缓存的大小为300 MB。同一篇知识库的文章指出通过修改这个值为FFFFFFFF,你可以缓冲存储所有受保护的系统文件。

SFCDllCacheDir

在这之前,我解释说Windows将DLLCACHE文件夹作为存储系统文件备份的地方。通常的,这个文件夹位于\WINDOWS\SYSTEM32目录下。不过通过修改SFCDllCacheDir注册表键,你可以修改文件缓存的位置。

文件缓存文件夹一般位于DLLCACHE目录下,但通过修改这个注册表键,你可以修改这个文件夹的位置。唯一需要注意的一点是你必须指定一个已经存在于本地硬盘驱动器上的地址。在Windows2000里,你可以指定一个网络共享作为DLLCACHE的路径,但在WindowsXP中没有这个选项。

SFCShowProgress

另一个与SFC相关的注册表键是SFCShowProgress键。这个注册表键允许你设置它的DWORD值为0,或1。缺省值是0,它将禁止显示SFC的进程情况。设值为1就可以让SFC显示进展情况。

源文件地址

在这之前,我解释了WFP和SFC是如何工作的,我指出在某些条件下你可能必须提供Windows安装CD或者有效源文件的拷贝。然而通过修改注册表,向Windows指明一个源文件目录是完全可能的,而无需Windows再向你询问这些文件。

这个注册表键在注册表的另一部分。你必须找到下面这个键:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup

一旦你找到了这个位置,通过使用一个驱动器符号或者路径或者一个UNC,你可以指定Windows系统文件的位置。

使用这个命令的前提是你必须将文件放在名为I386的目录中。例如,如果你的Windows系统文件位于一个名为C:\I386的目录中,那么你只需在注册表中指定路径为C:\,因为Windows假定I386这个目录是存在的。同样的,如果你打算使用一个UNC共享,I386文件夹必须存在于共享目录下。例如,如果你打算共享的目录名为FILES,你需要将I386文件夹放在FILES目录下。然后你可以告诉Windows在\\server_name\FILES目录下寻找共享文件。

时间: 2024-08-23 20:46:48

深入探讨WindowsXP系统文件保护功能的相关文章

瑞星杀毒系统文件保护怎么设置

  瑞星杀毒软件系统文件保护设置方法: 打开瑞星杀毒软件,在左侧的系统加固树状列表中选择系统文件保护,右侧则显示系统重要文件,瑞星杀毒软件提供用户的选择为系统关键目录和系统文件,可以勾选选项来设置需要保护的文件或文件夹,如图 :   当有程序触发规则时,用户可以选择拒绝.放过和提示三种操作方式中的一种设置未知程序触发此规则所采取的操作方式. 如需设置瑞星杀毒软件关键进程保护功能的朋友可以点击:瑞星杀毒软件怎么设置关键进程保护功能.         注:更多精彩教程请关注三联电脑教程栏目,三联电脑

三星手机无法连接windowsXP系统电脑如何解决

三星手机无法连接windowsXP系统电脑如何解决  具体如下: 1.XP系统电脑下载91手机助手,出现"使用WI-FI无线网络连接电脑"页面,"使用手机扫描二维码以连接手机"功能,则手机会出现"下载百度助手"页面,手机下载; 2.在手机上打开"百度连接助手",点击"连接电脑",出现"立即扫描"页面,使用手机扫描电脑91助手的二维码,出现"连接成功"; 3.使用电脑打

WindowsXP系统无法更新的故障修复

  如何使WindowsXP系统运行速度变快?有一个德国人为此做了一个优化程序,可以有效的使系统运行速度快10倍.可是要想速度变快,停止部分服务变成了必须条件.因此,按照此程序进行优化后,很多有用的服务便不能使用了,其中包括自动更新.安全中心及防火墙等.如果计算机不能自动进行更新,着实会让人心烦.现在系统之家就为大家解决这个问题! 在访问Windows UPDAte或者Microsoft Update网站时,网页提示错误代码0×80070422 (显示在屏幕右上角),大意是提示Windows U

WindowsXP系统如何设置打印机共享

  在为办公用品,打印机在办公室里是必不可少的设备.但是一个办公室里有这么多员工,不可能为每个人都配置一台打印机的的,这时候就要共享打印机了.WindowsXP系统如何设置打印机共享,本文将详细的为大家介绍! 家庭网络环境简单设置一般您家中的几台电脑都用一个交换机(也可能是集线器或路由器)连在一起.现在无线也普及了,许多都用无线路由器连接. 一般家中的路由器或交换机都具有自动设置 ip 地址的功能.所以我们可以把 IP 地址设成自动获取. 开始 -> 右键网上邻居 -> 属性 -> 右键

WindowsXP系统下文件夹选项进行禁用的设置

WindowsXP系统下文件夹选项进行禁用的设置:文件夹选项 是"资源管理器"中的一个重要菜单项,通过它我们可以修改文件的查看方式,编辑文件的打开方式等.一些身边的用户很多对 xp系统中的文件夹选项都比较了解,大家常常都在使用这个功能,但是大家却不了解文件夹选项的具体作用是什么,启示是我们电脑资源管理器里面的一个重要的组成部分,菜单的选项中是可以修改或者是查看文件的,对于编辑文件和打开的方式都是可以更改的,我们有客户就说自己的电脑被别人修改了系统文件,那么如何避免这样的情况呢,我们就可

WindowsXP系统下如何设置QQ皮肤透明效果

  WindowsXP系统下如何设置QQ皮肤透明效果?QQ是一款非常受欢迎的即时通讯软件,其具有非常多强大的功能,皮肤透明功能就是其中一种.不过,它的这个效果似乎只对WIN7系统有效,对于大量使用XP系统的用户来说,这无疑是一件很遗憾的事.这该怎么办呢?这篇教程就教大家在XP系统下怎么实现QQ皮肤透明. 具体方法如下: 1.在电脑左下解,点"开始",然后点"运行"; 2.在出来的"运行"对话框中,输入命令 %appdata%TencentQQSk

WindowsXp系统提示YJT.exe-无法找到组件的故障原因及两种解决方法

故障原因分析: 其实出现这个错误,一般是由于用户误添加或者删除文件导致动态链接库文件丢失起的错误提示或电脑. 解决方法一: 1.从网络下载msvcrtd.dll的系统文件,然后把这个文件复制到C:\WINDOWS\system32目录中.   2.点击"开始--运行",输入"regsvr32 msvcrtd.dll"命令,点击"确定",就会出现已加载msvcrtd.dll的提示. 3.在运行中再输入"msconfig"命令,点

win7系统自动修复功能怎么启动

  win7系统自动修复功能的启动方法:在开机的过程中按F8键即可进入进入win7高级启动选项,对比xp系统中的多了"修复计算机"和"禁用系统失效时自动重启","禁用驱动程序签名强制"三项功能.

笔记本win8.1系统触摸功能反应迟钝怎么办

  笔记本win8.1系统触摸功能反应迟钝怎么办         1.首先单击win8.1开始按钮,然后在然后在快捷菜单中选择"运行"选项,也可以利用快捷组合键"Win+R"调出运行窗口; 2.打开"运行"对话框,在"打开"输入框中输入"regedit",然后单击"确定"; 3.打开"注册表编辑器",依次点击 HKEY_LOCAL_MACHINESOFTWAREMic