Chinaunix首页 | 论坛 | 博客
  • 博客访问: 821158
  • 博文数量: 754
  • 博客积分: 7000
  • 博客等级: 少将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-12 12:54
文章分类

全部博文(754)

文章存档

2011年(1)

2008年(753)

我的朋友
最近访客

分类:

2008-09-12 13:00:30


   追求稳定是任何操作系统的目标, Me自然也不例外。可惜本身却是一个系统文件的配置与安排显得有些混乱的操作系统:系统文件与一般应用软件的文件没有适当的区分(不像Unix那样,把用户区和系统区分得很清楚),而且大部分的应用软件必须搭配某些系统文件才能正常执行,因此某些应用软件的安装程序就不得不将搭配的系统文件一起安装到用户的电脑中,而系统不稳定的问题就产生了……
   举个例子来说。假如你目前的Windows使用了一个版本号为5.1的系统文件System.dll,它放在Windows系统目录下的System目录中。你现在安装一个名为Winkiller的应用软件(呵呵,举例而已),但这个软件却要使用版本为3.0的System.dll系统文件,Winkiller的安装程序会把旧版本的System.dll拷贝到Windows系统目录下的System目录中,更有甚者安装程序根本就不理会新旧版本的系统文件而直接覆盖(很多游戏和不负责的应用软件都会这样做)。
   系统文件被覆盖会有什么后果呢?很难说,如果够幸运,也许什么问题也不会出现;但大多数情况是在一些特定的时候让你的系统不稳定或干脆死机。这种情况用微软工程师的术语来说就是DLL Hell——Windows系统是以Dynamic Link Library(动态链接库)的方式让系统和应用软件共用所有的系统文件的,DLL Hell的意思就是因为系统文件被覆盖而让整个系统像是掉进了地狱一样,万劫不复。
   OK,在你诅咒完微软之后,我们还是来看看微软在其新版的Windows Me中对这一情况的改进(或是补救)措施——System File Protection。
   严格说来,System File Protection(系统文件保护,简称SFP)应该是System File Checker的加强版本。微软曾经在Windows 98 SE版中加入了自动检查系统文件状况的功能——System File Checker,但实际上,System File Checker并没有太大作用——如果真的有效,大概现在也就不会出现SFP了^_^。
   SFP自Windows Me启动之后就实时检测系统文件,只要SFP发现系统文件将被覆盖或删除,它会“假装”准许用户或应用程序覆盖或删除系统文件,但实际上SFP会立即备份将被覆盖或删除的系统文件。只要用户或应用程序完成覆盖或删除的过程,SFP就会马上还原先前所备份下来的系统文件。
   要达到上述的保护效果,SFP保存了两份清单。一份记录了所有被SFP保护的系统文件的名称,这份清单存放在C:\WINDOWS\SYSTEM\sfp\sfpdb.sfp中(假设Windows Me的安装目录为C:\WINDOWS)。sfpdb.sfp是一个可读的文本文件,你可以使用“记事本”等工具打开;在sfpdb.sfp中,一整行记录就是一笔被保护的系统文件资料(见图1)。
   但是,只有sfpdb.sfp还是不够的——如果只有文本文件格式的sfpdb.sfp,任何人都可以自行篡改sfpdb.sfp的内容,如此的保护就等于没有保护了。因此微软又以“目录”的文件(后缀名为.cat)来存放这些被保护的数字签名,目前这些被保护的系统文件的数字签名都存放在C:\WINDOWS\SYSTEM\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\SYSTEM.CAT中。你可以用鼠标双击SYSTEM.CAT文件,系统会弹出如图2的“目录”窗口,如果按下窗口右下角的“查看签名”按钮,就会出现如图3的“数字签名详细信息”窗口。
   我们可以自行测试SFP的保护功能:首先浏览sfpdb.sfp的内容,找一个被SFP保护的系统文件,然后到存放该文件的目录去直接删除或者以其它文件覆盖。如果你还是对SFP功能有些不放心,那么可以将受保护的系统文件移到其它地方。
   来看看一个试验的例子吧。我将C:\WINDOWS\SYSTEM\ MSRATING.DLL删除,结果在短短几秒之内,SFP便自动将它恢复了。整个过程中,你除了可以在“资源管理器”中直接观察测试结果外,也可以通过SFP的系统记录文件C:\WINDOWS\SYSTEM\sfp\sfplog.txt来查看SFP的运作过程(见图4)。
   SFP是否真的可以万无一失地保护用户不会掉进DLL Hell?这个问题其实应该从两个方面来说:首先,光靠SFP是无法完全解决DLL Hell的,SFP只是被动地防止系统文件被删除或覆盖(如同Windows 2000用Wondows File Protection来提供类似的功能);程序开发人员只有注意运用系统文件时所带来的问题,进而在开发软件时避免覆盖系统文件的操作,才能取得解决整个DLL Hell问题的双重保障。另外,在一些情况下,某些受保护的系统文件是SFP无法还原的,所以大家还是不能高枕无忧……
【责编:admin】

--------------------next---------------------

阅读(286) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~