从驱动程序包中删除共同安装程序
注意
从 2023 年 1 月开始,硬件开发人员中心门户不再签署包含共同安装程序的驱动程序包。 有关要求的详细信息,请参阅 Windows 硬件兼容性计划规范和策略,特别是版本 22H2 策略,第 Device.DevFund.INF.Declarative 部分。
本页介绍了共同安装程序在驱动程序包中存在的常见原因,并提供在没有共同安装程序的情况下执行相同任务的机制。
WDF 和 WinUSB 共同安装程序
任何运行 Windows 10 及更高版本的系统都不需要 WDF 共同安装程序和 WinUSB 共同安装程序。 可以删除 WDF 共同安装程序引用,而无需执行任何其他工作。 可以删除 WinUSB 共同安装程序引用,并且应使用 Include 和 Needs 指令从驱动程序包 INF 引用 WinUSB。
安装显示用户界面的软件
与在安装过程中启动应用程序相比,请提供使用驱动程序包 INF 的 DDInstall.Software 部分中的 AddSoftware 指令安装的通用 Windows 平台应用程序。
有关详细信息,请参阅 将驱动程序与通用 Windows 平台 (UWP) 应用配对。 Windows 10 版本 1703 和更高版本的 Windows 支持 AddSoftware 指令。
有关其他详细信息,请参阅 下面的“安装关联软件 ”。
设置设备友好名称
INF 文件
驱动程序包 INF 可以设置设备友好名称,如下所示:
[DDInstall.HW]
AddReg = FriendlyName_AddReg
[FriendlyName_AddReg]
HKR,,FriendlyName,, "Device Friendly Name"
运行时
可以在启动 IRP 或 PrepareHardware 阶段由驱动程序设置友好名称,方法是使用以下 API 之一设置DEVPKEY_Device_FriendlyName属性:
其他设备设置/配置:
如果可能,驱动程序可以在驱动程序启动 IRP 或 PrepareHardware 阶段中更改设备设置和配置。 在运行时修改状态时,驱动程序应遵循 驱动程序包隔离要求。 这些要求包含有关驱动程序配置和状态布局的指南,并通过使驱动程序能够更灵活地应对外部更改、更易于更新以及更易于安装,从而帮助将来证明驱动程序。
对于无法在驱动程序本身中设置的设置和配置,驱动程序包还可能包括更改设置和配置的用户模式运行时组件。 这可以是面向用户的应用或更新配置的 Win32 服务。 有关如何包含用于设备的用户模式软件的信息,请参阅 “使用组件 INF 文件”。
如果使用持久性组件(如服务),请确保其功能是必需的,并且不能以资源密集型的方式执行,例如在驱动程序包 INF 或驱动程序本身中执行。 有关如何确保服务仅在相关设备连接时运行的信息,请参阅 服务触发器、 Win32 服务与设备交互以及 注册设备接口通知。 该服务还必须满足最新要求,例如传递 API 验证程序。
安装关联的软件
DCH 驱动程序要求的“组件化”部分引入了一个名为 SoftwareComponent 的概念,这是将设备驱动程序的安装与其关联软件分离的机制。 当 INF 创建软件组件时,它将自动创建映射到软件组件的子设备。 此子设备将用于安装与父设备关联的软件。 可以独立于主设备和驱动程序安装和更新此软件。
在 SoftwareComponent 驱动程序包 INF 中,安装软件的建议机制是使用 AddSoftware 指令。 这将触发从 Windows 应用商店下载和安装软件。
驱动程序和设备之间的依赖关系
设备启动/枚举排序依赖项
在可能的情况下,应避免设备间依赖项或启动排序要求。
对于 ACPI 枚举的设备,依赖项对象(_DEP)可用于 ACPI 固件,以强制设备启动排序。 有关详细信息,请参阅设备管理命名空间。
驱动程序可以响应 IRP_MN_QUERY_DEVICE_RELATIONS IRP 来定义设备之间的关系,例如删除关系。 有关详细信息,请参阅 IRP_MN_QUERY_DEVICE_RELATIONS。
驱动程序包安装依赖项
CopyInf 指令可用于在与另一个驱动程序相同的安装 API 调用期间安装其他驱动程序包。 传递到安装 API 的驱动程序包将安装在任何 CopyInf 引用的驱动程序包之前,但无法保证 CopyInf 引用的驱动程序包按任何特定顺序安装。
从捆绑在单个驱动程序包中的多个供应商配置组件
驱动程序包支持称为扩展 INF 的驱动程序包 INF 类型。 这是一个 INF 文件,专门用于增强和扩展“基本”驱动程序包 INF 的功能。 扩展可能不提供设备的函数驱动程序,但可能使用任何其他指令或为设备编写其他设置。 在驱动程序安装过程中,使用 驱动程序排名 选择单个基本驱动程序包 INF 来提供设备的功能,然后为设备选择任何扩展 INF。 有关详细信息,请参阅 使用扩展 INF 文件。
使用扩展驱动程序包 INF 的常见范例是硬件制造商提供基础驱动程序包 INF,以及系统内部件的 OEM 寄送,以创建扩展驱动程序包 INF,用于为该系统自定义它。
安装/协调固件更新
建议使用不同的固件更新机制,具体取决于要更新的设备的性质。 以下每一项都可用于通过Windows 更新交付和安装固件更新。
不可移动
UEFI 固件更新平台旨在更新无法删除的系统组件,例如系统固件。 有关详细信息,请参阅 UEFI 固件更新平台。
可移动
对于 HID 或 USB 设备等可移动设备,CFU 模型允许安全固件更新。 有关详细信息,请参阅 组件固件更新。
自定义实现
或者,可以编写自定义驱动程序,以根据驱动程序的判断来更新设备的固件。 有关详细信息,请参阅 自定义固件更新驱动程序。