昨天一个同事说他电脑不识别新插入的U盘了,只能插以前插过的U盘,今天拿过来给我看。
我开着设备管理器看,发现插上新的U盘,“其它”里会出现比如 USB Mass Storage Device 之类的设备
。说明这个设备还是被识别出来了,只不过没有自动安装驱动。为了正式这个说法,我用“重新安装驱动
程序”手动安装了一遍驱动,很顺利,因为U盘驱动是 M$ 原厂的嘛。
我又把所有的 USB OHCI/ECHI 设备全部删除,让设备管理器“扫描硬件改动”,结果全都列在“其它”
下面了,还是不自动安装。
有一个可能性,完全可以排除:数字签名。因为这些设备的驱动都是随 XP 发行的原厂驱动。可是为什么
要手动安装呢?难道系统不应该自动安装驱动程序吗?
然后我看了 setupapi.log 没有发现任何异常,只不过就是除了我手动的卸载和安装操作,没有任何其它
的设备安装操作。
那一定还有某些其它的触发设备安装的机制。我想起来有一个 newdev.dll,好像是设备安装向导,就查
它怎么调用,但是执行了却没有反应。下面再搜 xp automatically install driver,结果全是别人问如
何 stop 它,解答里也没有什么实质内容。
这里要补充一下,其实刚才还有一个疑点,就是设备管理器里本来就有一个没识别的设备,我查出是
Intel 2200 一类的无线网卡,他给我找出驱动盘来,可是安装驱动的时候却报错,说“设备管理器属性
页或者添加新硬件向导已经打开”云云,而当时都没打开。
我重启到安全模式,问题现象依旧。
找出事件日志来分析,发现系统事件里有一个,事件源是 PlugPlayManager, ID 是 270,描述是“
Plug and Play user-interface dialogs have been suppressed in Factory Mode.”(中文版描述不像
人话)。咦?工厂模式?把上面这句英文描述放到 Google 里搜,结果发现了这么一个同主题的页面,里
面提到了“添加新硬件”向导也会出错。我跑到控制面板里一试,果然报错“一次只能安装一个设备”云
云。看来我遇到的问题和他的差不多了,不过我可不想像他一样“sysprep -reseal”。
那么再搜“一次只能安装一个设备”吧,唉,中文网页还是没什么答案。然后借助 Google 蒙出了英文的
错误信息“You can only install one device at a time.”,搜之,终于找到了正确答案[1][2]。简言
之如下:
将 HKLM\SYSTEM\Setup 键下面的 FactoryPreInstallInProgress 和 AuditInProgress 这两个
REG_DWORD 值全部设置为 0x0,或者删除这两个值。
将 HKLM\SOFTWARE\Microsoft\Factory 键删除。
这样就把系统从工厂模式中“救”出来啦。然后重新启动系统,设备驱动就都开始自动安装啦。
 
另外也有可能是Shell Hardware Detection和Logical Disk manager服务的问题