64 位系统的 INF 需求
Windows Server 2003 Service Pack 1 操作系统的 INF 需求更改
Windows Server 2003 SP1 和更高的 Windows 版本不会在 x64 系统上安装带有未修饰 INF 节的驱动程序包。为了与 Intel Itanium 系统兼容,Windows Server 2003 SP1 将会安装带有未修饰 INF 节的驱动程序软件包;但是,INF 修饰是 Windows 硬件徽标计划的要求,因此带有未修饰 INF 节的驱动程序包没有资格获得该徽标。
本文描述影响 64 位非 x86 系统(Intel Itanium 和 AMD64)上的设备安装的 INF 需求变化。在本文中,"x64" 指在 AMD64 和 Intel 扩展内存 64 技术系统中使用的 64 位体系结构。
本页内容
简介 | |
INF 修饰如何影响驱动程序包的安装 | |
多平台 INF 文件 | |
在基于 x64 的平台上安装未修饰 INF | |
清单:驱动程序开发人员操作总结 |
简介
Windows XP 引入了为 INF [Models] 节名称指定 TargetOsVersion 修饰的能力,但是该修饰不是必需的。Windows XP 引入了对 Intel Itanium 平台的 INF 修饰的支持,以支持在 32 位和 64 位系统上安装设备驱动程序。
在 Windows Server 2003 和早期 Windows 版本中,当用户尝试在基于 Itanium 的系统上安装带有未修饰 INF 文件的驱动程序包时,PnP 会允许此操作,因为当前的 INF 语法规则允许在所有平台上安装未修饰的 INF 节。在服务二进制文件上检测到平台不匹配时,安装会以一种非直观的方式失败,因而用户难以发现失败的原因。
消费者无需了解 32 位和 64 位 Windows 操作系统的区别,或者基于 x64、基于 Itanium 与基于 x86 的体系结构之间的区别。
为了防止用户将基于 INF 的设备驱动程序包安装到错误的系统上,并帮助制造商避免相关联的支持成本,对 Windows Server 2003 SP1 的 INF 语法要求进行了如下修改:
Windows Server 2003 SP1 和更高 Windows 版本上的驱动程序 INF 文件必须使用 .ntia64 或 .ntamd64 正确修饰 [Manufacturer] 节和 [Models] 节名称中的条目,以指定非 x86 系统上的操作系统版本。此更改不会影响基于 x86 的系统的 INF 文件或非 PnP 驱动程序的 INF 文件(包括基于 x64 的体系结构的文件系统驱动程序 INF 文件)。 |
重要事项:操作系统将会对 x64 版 Windows Server 2003 SP1 强制执行此更改(从发布版备选 1 开始)。制造商应该对本文描述的所有 64 位平台(x64 和 Intel Itanium)的未修饰 INF 文件进行更新。
INF 修饰如何影响驱动程序包的安装
当 INF 节名称包含标识特定平台和操作系统的 TargetOSVersion 后缀时,认为 INF 节是有修饰的。修饰节包含仅与 TargetOSVersion 指定的平台和操作系统相关的安装信息。
Windows Server 2003 和早期版本的安装行为
本节描述在安装过程中,操作系统如何处理原始发布版 Microsoft Windows Server 2003 和早期 Windows 版本的修饰和未修饰 INF。下面的示例展示了典型的未修饰 [Manufacturer]节和 [Models] 节名称在设备驱动程序包 INF 文件中可能的外观:
[Manufacturer] %mycompany% = MyCompanyModels [MyCompanyModels] %MyDev% = mydevInstall,mydevHwid
此示例未使用 TargetOsVersion 修饰。Windows Server 2003 和早期 Windows 版本的设备匹配语法规则允许将这些语句解析为安装到任意平台。理想情况下,用户无法选择安装此设备包,除非确信该包拥有正确的二进制文件,但是此 INF 文件不会阻止这类安装。
下面的例子给出了相同的 [Manufacturer] 节和 [Models] 节名称,这些节名称都带有 TargetOSVersion 修饰,该修饰指定基于 x64 的平台。其中,"x64" 指 AMD64 和 Intel 扩展内存 64 技术系统使用的 64 位体系结构。INF 中的 .ntamd64 修饰用于所有基于 x64 的系统。
[Manufacturer] %mycompany% = MyCompanyModels,NTamd64 [MyCompanyModels.NTamd64] %MyDev% = mydevInstall,mydevHwid
安装此驱动程序包时,INF 解析器生成一个包含该修饰的节名称,然后检查该节名称是否适用于目标平台。如果适用,INF 解析器在 INF 文件中查找该节名称并使用该节(如果存在)。
在 Windows Server 2003 和早期的 Windows 版本上,如果没有修饰节,INF 解析器会检查所有未修饰节,以找到一个匹配的节。因为这些修饰并不常用,所以如果有一个匹配的设备,PnP 会尝试将驱动程序安装到错误的平台上。
Windows Server 2003 SP1 及更高版本的 64 位非 x86 平台的安装行为
在 Windows XP 和原始发布版的 Windows Server 2003 上,如果指定了修饰节名称,INF 解析器将使用该修饰节名称;否则使用未修饰节。但是,在 Windows Server 2003 SP1 和更高版本中,INF 解析器不会在基于 x64 的平台上查找未修饰节名称。
在运行 Windows Server 2003 SP1 及更高版本的非 x86 平台上,INF 解析器需要 [Models] 节名称的 TargetOsVersion 修饰。例如,如果用户试图在基于 x64 的系统上安装未修饰的驱动程序包,PnP 将不会找到有修饰的 [Models] 名称,因此不会尝试匹配任何设备 ID。
注意: 使用未修饰 INF 的存储驱动程序最初会使用 F6 加载,但是当系统在最后一次设置 GUI 模式之后重新启动时,会生成检测错误 7B。因为 F6 运行机制未使用 SetupAPI 逻辑加载存储驱动程序。要安装这类驱动程序,可以获取使用 64 位 INF 修饰的更新版本的驱动程序,或者手动修饰 INF(本文稍后的“在基于 x64 的系统上安装未修饰 INF”一节将会描述)。检测错误 7B 无法恢复;必须按照描述的方法更新存储驱动程序,并使用 F6 重新启动安装过程。
Windows 平台安装行为总结
下表总结了修饰和未修饰 INF 在各种平台和 Windows 版本上的行为。
表 1:各种平台和操作系统版本上的 INF 修饰与安装行为
未修饰 | x86 修饰 | Itanium 修饰 | x64 修饰 | |
Windows 2000 | • | X | n/a | n/a |
Windows XP | • | • | X | n/a |
Windows Server 2003 SP1 | • | • | X | X |
Windows Server 2003 SP1 | •/X* | X | • | X |
Windows Server 2003 SP1 | X | X | X | • |
• 找到相应 INF 中的设备模型并与潜在安装匹配。
X 未找到相应 INF 中的设备模型;无法安装。
* 允许基于 Itanium 的平台的未修饰 INF,以避免与已发布的驱动程序包发生冲突。基于 Itanium 的平台的新驱动程序包必须使用修饰节,以获得 "Designed for Windows" 徽标资格。
多平台 INF 文件
可以使 INF 文件包含基于 x64 和 Itanium 系统的修饰节,也可以包含未修饰节或基于 x86 的系统的 ntx86 修饰节,这样可以创建多平台 INF 文件。
注意: 带有修饰 INF 的驱动程序包不会安装在 Windows 2000 上。修饰是在 Windows XP 上首次实现的。
可以采用两种方法来支持多平台驱动程序包:
• | 方法 1:为每个平台提供一个单独的 INF |
• | 方法 2:为所有支持的平台提供一个多平台 INF |
优先采用方法 1,因为该方法的 [Models] 节名称上最少仅需一个修饰。如果采用方法 2,INF 解析器将提供可用的语法来修饰不同的节并创建一个 INF。但是,生成的 INF 比较复杂并且可能难以维护。
下面的示例给出一个多平台 INF。
[Manufacturer] %mycompany% = MyCompanyModels,NTx86,NTia64 [MyCompanyModels.NTx86] %MyDev% = mydevInstallx86,mydevHwid [MyCompanyModels.NTia64] %MyDev% = mydevInstallia64,mydevHwid
INF 还可以在 [Version] 节中包含修饰的 CatalogFile 条目。有关最新信息,请参阅 WDK 文档中的“为多个平台和操作系统创建 INF 文件”。
在基于 x64 的平台上安装未修饰 INF
以下方法可用于在 x64 系统上安装未修饰 INF。这些解决方法只适用于测试系统,不建议用于产品驱动程序。
方法1. 关闭 AMD64 的未修饰模型检测。 想要仅关闭针对 AMD64 系统的未修饰模型检测,可以创建下面的注册表非零数字值。
HKLM\Software\Microsoft\Windows\CurrentVersion\Setup:REG_DWORD:DisableDecoratedModelsRequirement
将该键设为非零值(例如 1)并重新启动系统,然后安装驱动程序。
方法 2:编辑 INF 以添加修饰。可以按照本文所述的方法手动向 INF 添加修饰,或者仿照其他 64 位驱动程序包的修饰 INF 手动向 INF 添加修饰。这将破坏签名驱动程序的签名,但是允许安装驱动程序(取决于本地机器上的签名驱动程序策略)。
清单:驱动程序开发人员操作总结
INF 的 [Manufacturer] 节条目和 [Models] 节名称必须针对将要安装在基于 x64 的系统上的驱动程序包添加修饰,而且应该针对基于 Intel Itanium 的系统添加修饰。原始发布版 Windows XP 之后的所有 Windows 版本都支持这些修饰;因此,通过这种方式修饰的非 x86 系统 INF 将适用于所有已发布的基于 NT 的 Windows 操作系统。
如果要求兼容 Windows 2000,那么 INF 节应当保持未修饰;但是如果驱动程序安装包定位于 WIndows XP 及更高版本,那么可以修饰 INF 节。
调用 64 位 Windows 的 INF 文件操作
• | 通过实现有修饰的 [Manufacturer] 节条目和[Models] 节名称,尽快更新基于 x64 和 Itanium 平台驱动程序包的 INF。 |
• | 如本文和 WDK 中所述,确保为基于 x64 和 Itanium 的系统开发的驱动程序和安装例程包含 64 位内核模式驱动程序和 64 位类别安装程序和共同安装程序。 |