瑞星 2007 与某些系统启动前预加载任务的冲突原因分析
Windows 可以设置一种在启动系统前进行的预加载任务。比如说,当我们使用 CHKNTFS /C 命令设置在启动 Windows 之前进行磁盘扫描的话,在下一次启动 Windows 时,在启动画面过后、欢迎屏幕出现之前,就会出现一个如附件的截图所示的画面,并开始执行我们之前设置的磁盘扫描任务。直到任务完成之后,才会进一步完成系统启动,进入 Windows 桌面。由于在这个画面出现时,Windows 还没有完成启动,所以可以避免因为系统文件被占用而带来的影响。除了使用 CHKNTFS /C 对系统分区进行全面检测外,再比如使用 CONVERT 命令将系统分区由 FAT 转换为 NTFS,或者使用 PQMAGIC 软件对系统分区进行容量调整等,由于这些任务都涉及对系统分区数据的修改,所以它们都不能在 Windows 正在运行的时候进行,都需要在启动 Windows 之前,以预加载任务的形式进行,才可以顺利完成。
最近遇到不少使用瑞星杀毒软件的朋友,在将瑞星杀毒软件由 2006 版升级到 2007 版后,发现所有的预加载任务都不能进行了。例如微软新闻组里有一位仁兄,在将硬盘分区从 FAT 文件系统转换为 NTFS 时,转换其它的分区时都很顺利,唯独在转换系统分区时,由于转换系统分区需要设置预加载任务,但他却无论如何也不能设置启动之前自动转换系统分区的预加载任务,所以一直无法转换系统分区。那么瑞星为什么在升级到 2007 版本后会对 Windows 的预加载任务功能做了限制呢?这还得从预加载任务的实现步骤上说起。
原来,在 Windows 注册表的 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 中有一个多字符串值(REG_MULTI_SZ)叫做 BootExecute,正是这个注册表项定义了 Windows 在启动前执行的预加载任务。我们希望在 Windows 启动之前执行什么样的预加载任务,只要修改 BootExecute 的值,添加上相应的命令就可以了。例如,当我们执行 CHKNTFS /C 设置了启动之前的自动磁盘扫描、或者执行 CONVERT 对系统分区进行文件系统转换、或者使用 PQMAGIC 对系统分区进行容量调整时,由于 Windows 不能在运行的时候对系统分区进行操作,所以 Windows 就会在 BootExecute 中自动添加上我们希望执行的命令,以便在下一次启动 Windows 时,在启动完成之前自动执行。
BootExecute 的默认值为 autocheck autochk *,当我们把瑞星杀毒软件从 2006 版升级到 2007 版后,瑞星自动将 BootExecute 修改为了 autocheck autochk * bsmain,添加了一个 bsmain 命令。经过搜索,在瑞星杀毒软件的程序安装文件夹中找到了这个 bsmain 程序,原来这是一个在系统启动前预先进行病毒检测的组件,通过 BootExecute 在 Windows 启动之前进行加载,可以实现在 Windows 启动之前预先扫描病毒的功能。看来这是瑞星 2007 版强化病毒查杀能力提供的新功能。
可是,自从瑞星 2007 将 BootExecute 修改为 autocheck autochk * bsmain 后,BootExecute 竟然被瑞星的后台服务锁定了!原本可以在注册表编辑器中直接进行修改的 BootExecute,已经无法直接修改了。当我们试图修改 BootExecute 的值时,注册表编辑器会报错:无法编辑 BootExecute:写入该键值的新内容时出错。除非我们强行关闭瑞星自己添加的后台服务,或者干脆以安全模式启动 Windows,禁止瑞星随系统启动一起运行,否则就别打算再修改 BootExecute 的内容。正是因为这个原因,所以在计算机上安装并运行有瑞星 2007 时,所有正常的预加载任务,例如 CHKNTFS /C、CONVERT、PQMAGIC 等就全部失效了,原因就在于它们统统无法在 BootExecute 中添加命令。
瑞星之所以这样设计,恐怕是为了保护自己的 bsmain 组件,以防有病毒随意修改了 BootExecute,删除了 BootExecute 中的 bsmain,使瑞星的 bsmain 检测功能失效。 但是这样一来不仅阻止了病毒对 BootExecute 的非法修改,就连 CHKNTFS /C、CONVERT 等正常的预加载任务也被阻止了。我们不可能每次需要执行这些预加载任务时都先把瑞星关闭掉,或者切换到 Windows 安全模式吧,正所谓“鱼和熊掌不可兼得”。其实说到底,这个问题还是瑞星 2007 版的开发人员思虑不周引起的结果,可以算是程序 BUG 了,希望瑞星杀毒软件能够修改一下这个设定。