Asp.NET Tutorials
Home > 其他 > 浅析Windows2000系统文件保护功能
浅析Windows2000系统文件保护功能
  作者:不详 出处:不详

wfp概述:
从Windows 98se开始,微软开始将系统文件的保护功能引入了Windows系统。这项功能在Windows 98中称为System File Checker(系统文件检查,即常说的SFC)。而在Windows2000中这项功能称为Windows File Protection(Windows文件保护,即WFP)。随着新版本Windows操作系统的陆续推出,这个系统文件保护功能也随之不断得到修正和功能加强。下面对Windows2000的文件保护功能(WFP)作简要的分析。

在Windows2000中,WFP的保护功能由位于WINNTSystem32系统文件夹中的Sfc.dll文件来负责实现。
WFP以Windows2000系统服务的方式执行,并且由Winlogon(系统登录管理服务)自动加载,这就意味着只要启动了Windows2000,WFP便开始执行保护Windows2000系统文件的任务。

wfp建立:
WFP保护的文件包括:在Windows2000安装过程中,所有通过安装程序复制到计算机中硬盘上的*.dll、*.exe、*.sys和*.ocx这4种类型的文件,以及Micross.ttf、Tahoma.ttf和Tahomabd.ttf这3个文件,它们是Windows2000系统显示文字所必需的TrueType字体文件。

安装Windows 2000过程中,安装程序会在即将完成安装时执行Sfc.exe程序来检查所有受到WFP保护的文件是否正确无误。一旦遇到受保护文件受损或丢失的情况,Sfc.exe程序会从Windows2000的安装光盘或者源安装文件位置重新将文件复制到计算机中替换受损文件。如果确认所有保护文件均正确,Sfc.exe程序就会在系统文件夹System32下建立名为dllcache的文件夹,并将所有受保护的文件的副本复制该文件夹下,这也是我们在使用过中执行系统文件修复时提取系统文件的一个来源。顺便说一句,在NFTS格式的系统分区中,Sfc.exe还能利用NTFS文件系统的压缩功能压缩dllcache文件夹中的文件,以节省磁盘空间。
至此,WFP确定了系统保护文件范围,也就是让系统记住了哪些文件是受保护的,并且如果其中有文件需要修复,首先该从哪里来提取这些文件。

wfp运行:
Windows运行时,WFP就会监控系统文件夹(这些文件夹下包含了受到保护的系统文件)。如果发现系统文件夹内的文件发生改变,Sfc.dll就会进一步查询被改动的文件是不是属于受保护的系统文件。一旦确认受保护的系统文件被改动,Sfc.dll就会确认新文件的版本,而如果文件版本正确,Sfc.dll还会根据文件的数字签名来判断新文件是否正确。最后若是确认保护文件是被非法替换或修改,Sfc.dll就会从dllcache文件夹中复制正确的源文件还原受损文件。

如果Sfc.dll无法从dllcache文件夹还原文件(例如:在有些精简Windows2000的方法中提到了删除dllcache文件夹以节省空间。),而需要通过Windows2000安装光盘或源安装文件才能还原受损文件时,Windows就会出现弹出“系统文件保护”的对话框,要求用户将Windows2000的安装光盘放入光驱或者由用户来指定安装文件的位置。

同时,当WFP执行系统文件还原时,这个过程事件还将被记录在系统的事件查看器中。

有兴趣的朋友可以做个小试验:
将修改过的NotePad.exe文件替换原文件(比如修改一下程序图标),随即在事件查看器的系统日志中就会出现来源为:“Windows File Protection”的事件信息,事件描述为:
“试图在被保护的系统文件 c:winntotepad.exe 上进行文件替换。 为了维护系统稳定,这个文件被还原成原始版本。 不正确文件的版本是 5.0.2140.1,系统文件的版本是 5.0.2140.1。”

可以看到,修改前后文件版本虽然相同,但在修改后,NotePad.exe程序原先的数字签名已失效。因此WFP认为NotePad.exe被非法替换,于是自动还原了源文件。

WFP虽然对系统文件进行了全面的保护,但它还是允许对受保护的文件进行替换和修改,只是对拥有这种操作权限的执行者有非常严格的限定。只有通过:
1.Windows Service Pack(升级服务包);
2.以微软的Hotfix.exe程序安装的Hotfixes(系统补丁);
3.通过Windows Update更新的程序;
4.Windows2000的安装程序(在覆盖安装时会用到)

这4种方式实现的对受保护系统文件的操作才会被WFP认定为合法,并同时对保护文件的信息作出及时更新。而除此以外对受保护文件的一切操作都将被视为非法并被WFP阻挡。

wfp操作:
Windows系统提供了SFC命令来对文件系统进行操作。

请以管理员或管理员组的成员身份登录,单击“开始”,点击“运行”,输入sfc,回车或单击“确定”。

sfc命令格式为:sfc [/scannow] [/scanonce] [/scanboot] [/cancel] [/quiet] [/enable] [/purgecache] [/cachesize=x],“[ ]”代表可选。
/scannow:立即扫描所有受保护系统文件;
/scanonce:一次扫描所有受保护系统文件;
/scanboot:每次重新启动计算机时扫描所有受保护系统文件;
/cancel:取消对受保护系统文件的所有未完成扫描;
/quiet:不作任何替换提示而替换所有不正确的文件版本;
/enable:还原为SFC默认操作,如果检测到不正确的版本则提示用户还原受保护系统文件;
/purgecache:清除SFC文件缓存并立即扫描所有受保护系统文件;
/cachesize=x:以MB为单位设置SFC文件缓存的大小;

(如果dllcache文件夹无法使用,可以使用Sfc /scannow、Sfc /scanonce或Sfc /scanboot修复dllcache文件夹的内容。)

wfp设置:

注意:下面所提到的内容将直接影响到系统稳定性和安全性,请务必谨慎操作!

和其他程序一样,WFP功能也在注册表中对应相应的键值,这些键值位于注册表的:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon

相关的键值为:SFCDllCacheDir、SfcQuota和SFCDisable。

1.sfcdllcachedir(字符型键值)
该键值指明dllcache文件夹在硬盘上的路径,它的值当然是dllcache的默认路径。如果需要修改该文件夹的位置,将键值的数据改为文件夹新位置的路径即可。但是默认初始状态下,注册表中不会存在该键值,因此要修改该键值的话,还需要用户自行创建键值并输入数据。由此也可看出该键值和dllcache文件夹的重要性。

2.sfcquota(双字节性键值)
该键值指明dllcache文件夹的最大上限值。默认情况下,dllcache文件夹的大小是不受限制的。如果需要调整的话,需要采用16进制的数值。

3.sfcdisable(双字节性键值)
该键值是WFP的核心键值,直接决定WFP的运行状态。
键值的默认值为0,即启用WFP功能,对系统文件实现保护功能。
如果遇到特殊情况需要暂停WFP的保护功能,将此键值的的值设定为:FFFFFF9D(16进制)。从此时开始,系统核心文件将不再受到WFP的保护,对这些文件的操作将不会受到保护功能的限制,系统处于完全开放的状态,这是对核心文件的误操作或受到病毒攻击,都无法被系统识别和还原,由此可能造成系统的严重问题。

此外,组策略也提供了部分WFP的设置选项:

开始→运行→输入:gpedit.msc→“本地计算机”策略→管理模板→系统→Windows文件保护,其中提供了:

  • 设置Windows文件保护扫描;
  • 隐藏文件扫描进度窗口;
  • 限制WindowsW文件保护缓存大小;
  • 指定Windows文件保护缓存位置;
  • 设置的结果和修改注册表是相同的,也请谨慎修改。
Add by : Huobazi (2005-10-17:08:02)