存档

文章标签 ‘hardware’

都是Intel无线网卡驱动惹得祸

2007年10月27日 2 条评论

连续一段时间在公司使用无线网络上网,一直非常不爽的就是其不稳定——非常不稳定,时断时续。后来仔细研究之后发现,每次经过十几分钟,无线网卡的指示灯就灭掉了,紧接着就是无线网络断掉。过了几秒钟,无线网卡指示灯重新亮起,然后无线网络重新连接——就这样,无限网络不断的通断。

既然已经发现了问题的症结,接下来就是看看为什么会造成这种情况。我的无线网卡是ipw2200 (Intel PRO/Wireless 2200BG),应该是非常常见和通用的一款无线网卡,至少在Linux下面一直以来驱动不成问题。但是看了一下驱动程序里面的选项,发现驱动程序的时间比较久远了,所以首先还是来更新一下驱动程序吧。

于是到Google上搜索,顺利的找到了Intel的驱动官方站点。从上面的列表当中看,有两个版本的驱动程序可供选择:11.1.1.11/9.0.4.36 版本的Driver Only包,和11.1.1.0 版本的Network Connection Software。我一直觉得硬件这个东西还是有个硬件厂商提供的软件来协助管理比较好,于是没有多想,就把两个都下载了下来。之后运行安装Network Connection Software,安装过程当中笔记本的喇叭(喇叭,不是音箱)突然连续响了N声,直觉告诉我有点问题,但是也没多考虑,安装完毕之后就重新启动了。

不想重新启动之后,先是登录界面上面输入账户密码之后,登录界面好像死掉了一样,等待了大约两分钟才启动到桌面,而且登录进去之后也马上发现不对劲:任务栏上面的快速启动无法显示。虽然之前也出现过类似的问题,但是都是把快速启动删除然后再重新添加就好了。但这次直接报错:无法添加工具栏。

当然我知道,任务栏当中的图标是一组快捷方式,存放在C:\Documents and Settings\<Your User Name>\Application Data\Internet Exploerer\Quick Lunch下面。于是转过去找,竟然发现Application Data下面根本没有Internet Explorer的目录!再试图打开FireFox,竟然直接跳出首次运行的配置导入向导——一切迹象都表明:Application Data目录失踪了!

幸好我知道sysinternal有一个工具叫做Junction,用来建立目录软链接。所谓的目录软链接好像快捷方式一样,可以让你从一个位置指向另一个位置。但是目录软链接对于上面的应用程序是透明的,只要软链接已经建立好了,比如把C:\test重定向到D:\test,在应用程序看来这两个目录就是完全一样的了,对于C:\test下面的文件访问,也都会被操作系统直接重定向到D:\test下面的相应文件。

幸好我知道这个东西,而且是之前就知道。当年当我发现你根本无法阻止很多程序往我狭窄的C盘上写文件的时候,我就不得不想办法把尽可能多的东西迁移到别的盘上去。最早被我看上的就是Documents and Settings下面的目录:无数的程序把配置文件放在这里(也应该放在这里)。所以我就用软链接把C:\Documents and Settings\<My user name>\Application Data目录重定向到了另一个磁盘分区上,顺便一起被重定向的还有几个同级的目录。这种解决方案的一个坏处就是,如果某个软件作了什么不该做的事情,删掉这个软链接如同删掉一个空目录一样简单:一个RemoveDirectory的系统API调用足以。

那么是不是谁把这个软链接给删掉了呢?用资源管理器是没有办法区分的,但是用命令提示符可以。所以我立即用命令行转到这个目录去看,果然, Application Data已经变成了<DIR>,而不是软链接(<JUNCTION>)了(可惜这里忘记截图留下现场了)。

那么实际的目录内容呢?我立即转到软链接指向的目录观察,万幸的事情:所有的配置文件都还在。

接下来的事情就很简单了,换用另外一个账户登录,使用命令提示符移动到C:\Documents and Settings\<my user name>下面,删除原来的Application Data目录,然后执行junction "Application Data" "E:\path\to\Application Data",建立了一个新的目录软链接。

重新用自己的账户登录,所有的配置文件都回来了,打开FireFox看到布满插件的状态栏,放心许多。

回顾一下我之前作过的事情,只能让我相信,确实是Intel的安装程序把这个目录删掉了:计算机喇叭的响声也许就是因为有程序发现自己的 Application Data目录被删掉了。而当时在做的事情,就是在安装Intel的应用程序而已。

一个问题已经解决了,但是还有另外一个问题:登录仍然非常的慢,为什么呢?

你看到的登录界面其实是叫做WinLogon的进程所显示的。而这个WinLogon当中是可以加入许多的自定义模块的。但是这些模块分布在各处,查找起来非常不便。幸运的是sysinternal仍然有一个工具替我们做了这些事情:Autoruns。这个工具运行之后,会有一个WinLogon标签页,当中显示了所有WinLogon注册的组件。请注意图中用红线圈出的部分,这些就是Intel安插在 WinLogon当中的。而登录的时候,WinLogon使用GINA DLL来进行身份认证。从图中显然可以看出,Intel的无线网卡程序使用它自己的GINA DLL替换掉了Windows自己的GINA DLL。

那么Windows自己的GINA DLL是什么呢?我们在system32目录下面运行dir *GINA.DLL,得到一个列表,如图中右下角所示。从名字上面看,msgina.dll应该就是微软的GINA DLL了。所以在IWPDGINA上面双击,Autoruns自动打开注册表编辑器,并定位到该注册表项。将它改成msgina.dll。然后把剩下的两个和Intel相关的项目前面的勾去掉。之后重启系统,输入密码之后,登录立即完成,并且很快的看到桌面,一切恢复正常。

而这个时候回头看看我最初想要做的事情:我的无线网卡的驱动正确更新了:

更新之后的无线网卡驱动确实提高了电源管理的能力:在我写这篇文章的整个1个小时当中,无线网络没有再断。

但是,仅仅是一个无线网卡,为什么要去修改GINA,而且是这么敏感的组件:我的登录用户名和密码与无线网络有关系么?而且,为什么会毁掉我的 Application Data目录?如果不是我之前知道一点Windowsçš
„东西,也许只能重装系统了,于是两年多的用户习惯,首选配置,甚至邮件都可能丢失。

而我,本来只是为了更新一下驱动程序罢了。