原帖地址
blog.d onews.com/jackqq/archive/2008/04/02/1272404.aspx

昨天一个同事说他电脑不识别新插入的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]。简言之如下:
  1. 将 HKLM\SYSTEM\Setup 键下面的 FactoryPreInstallInProgress 和 AuditInProgress 这两个 REG_DWORD 值全部设置为 0x0,或者删除这两个值。
  2. 将 HKLM\SOFTWARE\Microsoft\Factory 键删除。
这样就把系统从工厂模式中“救”出来啦。然后重新启动系统,设备驱动就都开始自动安装啦。
P.S. 回来之后又通过上述两个注册表值反向查找,发现了 M$ 新闻组里原来也曾经提到过 这个解法,只不过是在一个不太对题的主题下。另外再附上刚刚找到的一篇 XP的U盘除错合集 [中文翻译]。