你目前正处于脱机状态,正在等待 Internet 重新连接

Windows 如何在安装过程中确定最适合的设备驱动程序进行安装

针对 Windows XP 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Windows XP 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

针对 Windows Server 2003 的支持已于 2015 年 7 月 14 日终止。

Microsoft 已于 2015 年 7 月 14 日终止了对于 Windows Server 2003 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

概要
本文介绍的过程用于 在安装期间为设备选择最适合的设备驱动程序。

当您运行 Windows 安装程序时,用于某个特定设备的设备驱动程序或 .inf 文件可能有多组。安装程序和即插即用功能都试图为要安装的设备选择最适合的设备驱动程序,以解决这些冲突。

注意:本文介绍的过程仅用于在安装程序的图形用户界面 (GUI) 阶段或安装程序运行完毕后所安装的设备。在安装程序的文本模式部分执行的大容量存储控制器检测和设备驱动程序选择使用的是另一个过程。
更多信息
有关大容量存储控制器检测过程的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
220845在 Windows 安装期间添加第三方或更新的驱动程序

即插即用功能将尝试对硬件的即插即用标识 (ID)(在对设备进行枚举以后由设备固件或系统 BIOS 返回)与 .inf 文件中任何匹配的即插即用 ID 进行比较,以找到兼容的设备驱动程序。

即插即用功能可以搜索所有 .inf 文件,以便为特定设备找到最适合的设备驱动程序进行安装。该功能在找到第一个匹配项后并不停止搜索,而是继续搜索即插即用搜索路径中列出的所有 .inf 文件,搜索路径在以下注册表项中定义:
HKEY-LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
DevicePath:Reg_Expand_SZ:%Systemroot%\Inf

注意:默认情况下,上述注册表位置仅包含这一个项,但如果您执行无人参与安装并在无人参与应答文件中使用了 OemPnpDriversPath = 参数,则可能会向此注册表项附加其他路径。

安装程序会为在 .inf 文件中包含匹配项的兼容设备驱动程序生成一个列表,并对找到的每个驱动程序都指定一个“等级”。等级范围为从“0”到“0xFFFF”,其中 0 代表最适合的可能匹配项,而 0xFFFF 代表最不适合的可能匹配项。等级最低的设备驱动程序将被视为最适合的可能匹配项,并且是要安装的设备驱动程序。

设备驱动程序的等级分为以下范围:
  • 0x0 到 0xfff:设备硬件 ID 与 .inf 文件中列出的硬件 ID 匹配。
  • 0x1000 到 0x1fff:设备硬件 ID 与 .inf 文件中的一个兼容 ID 匹配。
  • 0x2000 到 0x2fff:一个设备兼容 ID 与 .inf 文件中的硬件 ID 匹配。
  • 0x3000 到 0x3fff:一个设备兼容 ID 与 .inf 文件中的兼容 ID 匹配。
  • 0xFFFF:最不适合的匹配项。
在 Windows XP 和 Windows Server 2003 中,还存在其他设备驱动程序等级范围:
  • 0x8000 到 0x8FFF:不受信任的硬件 ID 匹配项
  • 0x9000 到 0x9FFF:不受信任的兼容 ID 匹配项
如果 .inf 文件未经过数字签名,或者 Model 节名称未包含 Windows NT 特定的修饰(设备可安装在 Windows NT、Windows 95 或 Windows 98 上,但它在这些操作系统上不具有特定的项),则这些 .inf 文件将处于不受信任的范围。

如果安装程序确定某一设备驱动程序是不受信任的,它可以将该设备驱动程序的等级更改为前面所提到的适当范围。
处于 0x0 到 0xfff 范围的设备驱动程序等级称为“硬件 ID 匹配”,因为它们在硬件 ID 之间匹配。这些等级还被视为最适合的匹配项,而任何其他等级都将被列为“兼容”,这是因为在生成设备驱动程序等级时至少有一个兼容 ID。类别安装程序和辅助安装程序也会影响设备驱动程序的选择。如果这些安装程序确定设备驱动程序无法支持设备,或更改了设备驱动程序的等级,则它们会将该设备驱动程序标记为“无效”。

但是,如果两个设备驱动程序都具有最低的等级,安装程序将使用最新的设备驱动程序。如果一个设备驱动程序已经过签名,而另一个未经过签名,则将向未签名的设备驱动程序的日期赋予 0xFFFFFFFF 值,同时选择并安装已签名的设备驱动程序。

可能还会提供 OEM 提供的设备驱动程序,但可能不会选择和使用该程序。即使制造商提供了更新后的设备驱动程序,它也可能只是作为兼容的设备驱动程序编写的,因而会获得较高的等级并产生较差的匹配结果。安装程序在选择设备驱动程序匹配项时,不会考虑 OEM 提供的设备是否已经过数字签名。如果未经签名的设备驱动程序具有较低的等级,且匹配度优于任何其他内置设备驱动程序,则安装程序会选择并安装该设备驱动程序。

运行安装程序时,如果在任何 .inf 文件中均未找到匹配项,则会推迟设备安装,且该设备可能会在设备管理器中成为未知设备。引入新设备(安装过程之外)后,如果未在计算机中的任何 .inf 文件中找到匹配项,您可能会收到“找到了新的硬件”提示,并会被要求提供设备驱动程序。

例如,您在计算机上安装了 PCI 视频适配器,其即插即用 ID 显示在两个不同的 .inf 文件(Nv3_disp.inf 和 Nv4_disp.inf)中。这两个设备驱动程序文件均未经过数字签名,因此它们的日期都将被赋值为 0xFFFFFFFF。在此示例中,这两个文件位于以下 D:\Drivers\Video1 和 D:\Drivers\Video2 文件夹中。

注册表中的当前 Devicepath= 具有 %Systemroot%\Inf、%Systemdrive%\Drivers\Video1 和 %Systemdrive%\Drivers\Video2 项。

注意:%Systemroot% 为 D:\Winnt,%Systemdrive% 为 D:

安装程序和即插即用功能将搜索在上述路径中找到的所有 .inf 文件,并记录找到的任何匹配项。如果安装程序或即插即用功能找到了多个匹配项,则将使用最适合的匹配项。

以下摘自 Setupapi.log 文件的内容详细介绍了上述过程。在此示例中,安装程序的日志记录模式已设置为详细模式。有关进行此项设置的方法,请参见以下文章:
243996 如何在 Windows 2000 GUI 模式安装期间启用详细日志记录

如果安装程序运行正常,您将不会在 Setupapi.log 文件中看到如此多的详细信息。

当设备受到查询时,它将返回硬件 ID 和兼容 ID 的列表。并非所有设备都会返回多个 ID,但在多数情况下,它们确实如此。在此示例中,视频卡将返回以下 ID:
Searching for hardware IDs:Pci\Ven_10de&dev_0028&subsys_5a001092&rev_11,Pci\Ven_10de&dev_0028&subsys_5a001092,Pci\Ven_10de&dev_0028&cc_030000,Pci\Ven_10de&dev_0028&cc_0300Searching for compatible IDs:Pci\Ven_10de&dev_0028&rev_11,Pci\Ven_10de&dev_0028,Pci\Ven_10de&cc_030000,Pci\Ven_10de&cc_0300,Pci\Ven_10de,pci\cc_030000,Pci\Cc_0300Enumerating files D:\Winnt\Inf\*.inf@ 07:11:59.191 : Opened PNF of "D:\Winnt\Inf\1394.inf".@ 07:11:59.191 : Opened PNF of "D:\Winnt\Inf\accessor.inf".@ 07:11:59.191 : Opened PNF of "D:\Winnt\Inf\acpi.inf".@ 07:11:59.191 : Opened PNF of "D:\Winnt\Inf\adm_mult.inf".@ 07:11:59.191 : Opened PNF of "D:\Winnt\Inf\adm_port.inf".@ 07:11:59.207 : Opened PNF of "D:\Winnt\Inf\agtinst.inf"....Enumerating files D:\Drivers\Video1\*.inf@ 07:12:00.660 : Opened PNF of "D:\Drivers\Video1\NV4_DISP.inf".@ 07:12:00.660 : The file (D:\Drivers\Video1\NV4_DISP.inf) is not digitallysigned, ignoring driver date.@ 07:12:00.660 :Found Pci\VEN_10DE&DEV_0028 in D:\Drivers\Video1\NV4_DISP.inf; Device: NVIDIA RIVA TNT2; Driver: NVIDIA RIVA TNT2; Provider: NVIDIA; Mfg: NVIDIA; Section: nv4@ 07:12:00.660 : Decorated section name: nv4Enumerating files D:\Drivers\Video2\*.inf@ 07:12:00.660 : Opened PNF of "D:\Drivers\Video2\NV3_DISP.inf".@ 07:12:00.675 : The file (D:\Drivers\Video2\NV3_DISP.inf) is not digitallysigned, ignoring driver date.@ 07:12:00.675 : Found PCI\VEN_10DE&DEV_0028 inD:\Drivers\Video2\NV3_DISP.inf; Device: NVIDIA RIVA TNT2; Driver: NVIDIARIVA TNT2; Provider: NVIDIA; Mfg: NVIDIA; Section: nv4@ 07:12:00.675 : Decorated section name: nv4@ 07:12:01.706 : Device install function: DIF_SELECTBESTCOMPATDRV.@ 07:12:01.706 : Executing class installer.@ 07:12:01.894 : Completed class installer.@ 07:12:01.894 : Executing default installer.@ 07:12:01.894 : Selected driver installs from section nv4 in D:\Drivers\Video1\Nv4_disp.inf.@ 07:12:01.894 : Changed class GUID of device to {4D36E968-E325-11CE-BFC1-08002BE10318}.@ 07:12:01.894 : Set selected driver.@ 07:12:01.894 : Selected best compatible driver.@ 07:12:01.894 : Completed default installer.@ 07:12:06.565 : Device install function: DIF_ALLOW_INSTALL.@ 07:12:06.565 : Executing class installer.@ 07:12:06.565 : Completed class installer.@ 07:12:06.581 : Device install function:DIF_INSTALLDEVICEFILES.@ 07:12:06.581 : Executing class installer.@ 07:12:06.581 : Completed class installer.@ 07:12:06.581 : Executing default installer.				
在该示例输出中,安装程序使用 D:\Drivers\Video1\Nv4_disp.inf 文件选择设备驱动程序并加以安装,因为安装程序发现该设备驱动程序是最适合的匹配项。

若要轻易找到已安装的设备及安装该设备时使用的 .inf 文件,请在 Windows 记事本中打开 %Systemroot%\Setupapi.log 文件,对即插即用安装的设备搜索 DIF_SelectBestCompatDrv,而对手动安装的设备搜索 DIF_SelectDevice。
属性

文章 ID:279112 - 上次审阅时间:12/03/2007 07:44:00 - 修订版本: 6.2

Microsoft Windows Server 2003 Standard Edition, Microsoft Windows Server 2003 Enterprise Edition, Microsoft Windows XP Professional Edition, Microsoft Windows XP Home Edition, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Professional Edition, Microsoft Windows Small Business Server 2003 Premium Edition, Microsoft Windows Small Business Server 2003 Standard Edition

  • kbinfo kbenv kbsetup KB279112
反馈