2005-07-13

pcAnywhere和显卡驱动的冲突一例

硬件环境:
主机:   DELL Inspiron 4150 笔记本
显卡:   ATI MOBILITY RADEON 7500

软件环境:
操作系统: Microsoft Windows 2000 Professional
DirectX:  9.0 for NT
其他:   pcAnywhere 10.0.1 Build 370

经过描述:
  昨天下午打算玩一个老游戏。安装之后运行时报错,错误函数是InitRenderToSurface。既然是和“渲染”、“表面”有关,显然是DirectDraw的部分出了问题。由于没有办法把DirectX 9.0降版本,所以我试了试修改一下显卡驱动的设置,看看是不是某些特效带来的问题。打开ATI显示控制面板的Direct3D部分,进入兼容性设置,点击“默认”,应用之后,问题来了。显示方式变为了640×480的16色模式,即最基本的显示模式。我手动修改分辨率和色深无效,考虑到已经好几天没有重启过了,于是打算重启之后看看情况会不会有改善。
  重启之后,分辨率和色深还是依旧。于是在桌面点击右键准备打开显示控制面板进行调整,没想到等来的却是蓝屏。蓝屏之后就是自动重启,速度太快,我只是隐约看见有“VGA.DLL”的字样闪过。再次启动之后,又试验了几次,发现只要是打开显示控制面板,就一定会蓝屏,而其他操作则一切正常。而且这个蓝屏一定会导致自动重启,即使已经把“启动和故障恢复”中的“自动重新启动”给屏蔽掉,依然是如此。由于我的电脑内安装了较多自动运行的软件与服务,每次重启的速度相当难以忍受,所以我不敢一再试下去,只好先搜集一下情报,分析一下原因,试验一下其它不会导致蓝屏的方案。
  很明显,故障就是由于我调整了ATI显卡的D3D中的那些设置造成的。只要能恢复那些设置,就可以修复故障。首先想到的,莫过于重装显卡驱动。在设备管理器中卸载当前驱动,然后重新安装,重启之后,故障依旧。而进入安全模式,或采用VGA模式启动,则可以打开显示控制面板而不会导致蓝屏。然而此时由于ATI的驱动未被加载,所以也无法调整那些导致故障的设置。我尝试在注册表中清除掉ATI相关的键值,并完全删除掉ATI显卡控制面板的整个安装目录后再重新安装驱动,但是问题始终无法解决。
  看来,还得从蓝屏时给出的信息着手。根据以前处理Windows2000蓝屏故障的经验,在蓝屏时系统给出的错误信息是极具参考价值的。但我现在由于无法抑制系统在蓝屏后的自动重启,而不能仔细地阅读其中的信息(PAUSE键无法暂停)。每次重启都只能阅读一个单词,而重启速度又很慢,显然这样不是办法。
  好在突然想到自己有一台数码相机,于是用摄像模式把蓝屏过程拍了下来,读出AVI片段后传送到别的电脑上仔细研读。640×480的摄像分辨率虽然不高,但还是可以勉强分辨出其中的信息了。经过研读后,发现其中有价值的信息有三:
● 错误代码:0x000000CE
● 错误说明:DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATION
● 错误发生在:VGA.DLL
  很遗憾,没有找到中文网页能够解决这个问题。但是微软的技术支持站点给出了一个解释。它说这个错误是由于主机上安装的pcAnywhere的显示模拟程序与显卡驱动程序冲突所致。这么说来,我的电脑上确实是有装pcAnywhere,而且是主控端和被控端都有装。按照微软的文章提供的解决办法,我卸载了pcAnywhere,重启后再次打开显示控制面板。这次不会蓝屏了!
  然而好景不长,在我试图调整分辨率,点击“应用”后,它又蓝屏了。这次的蓝屏不会自动重启了,我猜测之前的蓝屏会不顾系统设置而强行重启,和pcAnywhere也有关系。这次的错误信息和之前只有一点点差别,即错误位置变成了ati2dvag.dll,这是ATI的显卡驱动中和DirectDraw有关的部分。
  由于pcAnywhere已经卸载,罪魁已经不在,我只能尝试卸载显卡驱动程序后重新安装。还好,重装显卡驱动之后,就一切正常了。看来,显卡驱动在安装的时候,就和pcAnywhere发生了关系。我迅速把导致故障的那几个设置调回了原来的值。这之后,我重新安装了pcAnywhere的仅含主控端的部分,相信以后再也不会发生类似情况了。至于那个老游戏,就只有放弃了。

后记:
  本来没有什么好写的,我所做的一切都是按照别人的文档进行尝试而已。然而我觉得遗憾的是,当我在google上用“VGA.DLL”做关键词在中文网站中进行查找时,居然只有一篇无关的信息被找到。而当我把范围扩大到所有网站时,出现的第一篇就是解决问题的文章。同样地,当我在搜索ati2vag.dll的相关内容的时候,国内网站出现的都是讨论这个驱动文件的版本号以及和游戏相关的内容,而且都是互相抄来抄去,提到发生错误或蓝屏的几乎没有。而国外网站用ati2vag.dll加上blue就可以搜出一大堆的讨论我这次遇到的问题的文章。由此可见我们的IT媒体,IT网站,包括IT人,都是浮在表面,比起国外的网站来,我们真的是缺乏对技术的追求。所以我把这问题写出来,希望能够被google搜到,免得国内不懂英文的人会因为这种问题把系统给格式化重装掉。