QQ导致Windows Vista死机的初步分析_操作系统

内容摘要
自从笔者用VISTA以来一直备受Tencent QQ(以下简称QQ)的折磨!此话怎讲呢?在笔者的记忆中,从自己最早用的Windows Vista Beta1到Windows Vista Beta
文章正文
    自从笔者用VISTA以来一直备受Tencent QQ(以下简称QQ)的折磨!此话怎讲呢?在笔者的记忆中,从自己最早用的Windows Vista Beta1到Windows Vista Beta2,乃至Windows Vista 5472都不能顺利的运行最新版QQ,即Tencent QQ 2006。对于一个学生来说的笔者,大多同学和朋友都只使用QQ来交流,可想而知QQ在自己网络生活有多么重要的地位。但是在自己最心爱的Windows Vista中却不能用QQ与朋友共享Windows Vista带给我的无限快乐与忧愁很是郁闷。虽然java平台的luma qq可以模拟QQ的部分功能,但始终不及Tencent QQ……

  终于在Windows Vista Pre-RC1 5536中得到了一些启示,随即初探出了QQ在Windows Vista死机的几个原因,在此与大家共享。同时,也增加了自己对Windows Vista安全性的信心。

  奇怪的死机经过

  自从笔者从前喜好用Administrator账户登陆Windows Vista受到了各种不安全的因素影响,导致系统崩溃数次,安装数次,其中感慨颇多!当拿到最新测试版Windows Vista Pre-RC1 5536,笔者决定“听从”Microsoft的安全建议:用普通用户账号登陆,开启UAC……在这个最新版中,笔者感受到了更加人性化的UAC设计,因此也不再“惧怕”UAC带来的麻烦,其实准确的说这已经不算麻烦了,因为现在对UAC的改进已经让用户感受不到它的存在,但安全性丝毫没有减弱。

  废话也说了一堆,下面来说说自己遇到的这个奇怪的问题:在vistafans论坛上听很多坛友说Windows Vista Pre-RC1 5536中运行QQ,往往输入到第四位密码,系统就蓝屏……正好最新版QQ 2006B3推出了,笔者也抱着试一试的态度安装并运行了,但是神奇的事发生了,不仅没有在输入第四位密码时死机,而且QQ运行状态良好,没有死机症状!当时很是庆幸,不知道是不是自己人品好的原因才这样。但是其中也出现了几个问题:1.键盘加密无法启动;2.无法在QQ目录下找到以自己号码命名的用户信息的文件夹。自己凭直觉觉得是否应该用Administrator身份来运行QQ才能解决一下问题(因为自己此时已经习惯了普通用户帐号使用,而且人性化的UAC设计也并没有给自己带来多少不便,从而不再用Administrator账户来登陆系统了)。于是就通过Windows Vista一个方便的程序运行权限管理选项进行了QQ(如图)

  哈哈,方法果真奏效,键盘加密已经可以启动了。怀着兴奋的心情填好了号码,输好了密码。但是“回车”以后没有反应,定睛一看,怎么密码输入到第四位就不能继续输入了,再试试看……不幸的事真的发生了,Windows Vista蓝屏了,DUMP了后就重启了……

    键盘加密在作怪

 

  重启以后,再次进行试验,仍然是用Administrator权限来运行,结果依然蓝屏,死机……第二次重启后,决定不用Administrator权限来运行,恢复普通权限试试,这次终于又成功突破密码的第四位封锁,成功地登陆到了QQ。问题可真就奇怪了,在大家心目中,一般用Administrator权限来运行程序可以达到“完美”的效果,但是这次可就怪了,用Administrator权限来运行程序反而会死机。此时笔者突然注意到键盘加密这个问题。如图为键盘加密未启动的提示

  既然怀疑是它就不能放过它!然后笔者到论坛上查看了一些死机的案例,还有一些网友总结的不死机的规律,从中可以发现:大多用户还是习惯以Administrator账户登陆计算机,从而可以启动键盘加密导致蓝屏;而且有些大胆的用户也怀疑是键盘加密的问题,从而删除了QQ目录下两个键盘加密程序的SYS文件(如下图),因此没有了死机现象!

  难道真是键盘加密在作怪?

    假设的理论分析

 

  我们都知道,如果用Administrator账户登陆可以获得计算机的最高权限(此账户默认关闭UAC),因此安全性也相当的高,所以Microsoft才不建议启用该账户。假设我们现在以Administrator账户登陆,运行QQ程序,此时QQ程序可以获得最高的运行权限来执行其所需要的其他服务或程序,当然键盘加密就是这样一个它所需要的程序,所以这是键盘加密可以顺利的启动。反观普通账户,当我们运行QQ时,Windows Vista只允许其自身允许,而没有其他权限来执行其他所需要的程序,因此键盘加密就被关在了权限大门以外,从而无法正常允许,从而出现了错误提示。当然如果我们此时选中了QQ的“Run as Administrator”这个选项,QQ这个进程就具备了最高权限,从而可以运行键盘加密。值得注意的是,Windows Vista为了防止“Run as Administrator”这个选项的恶意选中而致使一个不安全的程序获得最高权限,当我们以Administrator权限允许它是UAC就会启动,提示我们是否允许这个未知的可能带来安全隐患的程序获得最高权限允许,这就是UAC人性化和安全性的完美体现。

  从上面的分析我们不难也可以找到第2个问题(无法在QQ目录下找到以自己号码命名的用户信息的文件夹)的答案。因为此时我们使用普通用户账户运行,只允许其向指定位置(QQ用户信息文件夹的指定位置被设在 X:Users[用户名]AppDataLocalVirtualStoreProgram FilesTencentQQ X指Windows Vista系统盘)写入数据。当然,不能正常地向常规文件夹(X:Program FilesTencentQQ X指QQ所在盘符)写入数据的问题,也可以从中得以解释!

  虚拟重定向的“威力”

  虚拟重定向主要用于UAC兼容场景,当一个老的软件在标准用户环境运行时,如果需要访问一个系统目录并且被拒绝,UAC就会自动将其重定向到其他位置,而该应用程序以为自己能够有权限访问该目录。这样,上面笔者奇特的遭遇就不难解释了:标准用户下的QQ无法写入其安装目录,所以其他的QQ号码目录会被重定向,以便QQ能够正常运行在UAC环境。虚拟重定向的威力在此体现得淋漓尽致,因此Windows Vista的安全性得以进一步地提高。

  巧妙的解决方法

  这里介绍两种常规的解决办法:

  第一种很简单,以普通用户帐号登陆,这时QQ得不到足够的权限不能运行键盘加密程序从而不会导致系统崩溃

  第二种方法更加彻底,那就是直接删除X:Program FilesTencentQQ(X指QQ所在盘符)下的npkcrypt.sys和npkcusb.sys这两个文件。

代码注释
[!--zhushi--]

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!