驱动程序包容器元数据为 OEM 和 IHV 提供了基于 驱动程序包的解决方案,以自定义和增强其物理设备(由 设备容器表示)的面向用户的信息。 物理设备可以是连接到计算机或计算机本身的外围设备。 以下列表显示了驱动程序包容器元数据可以提供的信息类型:
- OEM/IHV 的名称。
- 设备容器的模型名称。
- 设备容器支持的一个或多个功能类别。
- 代表设备容器的逼真图标。
如果没有容器元数据,操作系统会通过查看属于设备容器的所有 设备节点(devnodes),然后基于设备节点的信息运行启发式计算,从而生成前面的列表中的信息。 此过程可能不会导致 OEM 或 IHV 所需的值来显示其物理设备。 OEM 或 IHV 可以使用容器元数据直接控制这些值。
从 Windows 11 24H2 KB5052093(OS 内部版本 26100.3323)开始,驱动程序包容器的元数据得到了支持。 如果在较旧的 Windows 系统上安装了包含容器元数据的驱动程序包,则安装将成功,但不会处理和应用容器元数据。
使用基础 INF 或扩展 INF
驱动程序包 INF 文件中的 INF AddProperty 指令指定驱动程序包容器元数据。 我们的建议是选择哪个 INF 文件用于容器元数据:
- 如果 OEM/IHV 已有作为设备容器一部分的开发节点的基本 INF 的驱动程序包,则应更新该驱动程序包以包含容器元数据。
- 如果 OEM/IHV 没有设备容器中设备节点的基本 INF 驱动程序包,建议创建扩展 INF 驱动程序包。 与基本 INF 相比,扩展 INF 是包括容器元数据的更轻量方法。
有关基本 INF 和扩展 INF 的详细信息,请参阅 使用扩展 INF 文件。
若要认证指定容器元数据的 INF 文件,需要更新的 InfVerif (从 Windows 驱动程序工具包版本 10.0.26100.3323 和 Windows HLK 24H2(2025 年 1 月更新)开始提供。
设备容器定位
驱动程序包根据特定的设备信息对单个设备节点进行定位。 此信息包括 硬件 ID 和 兼容的 ID。 若要向正确的设备容器提供容器元数据,驱动程序包必须面向某个属于设备容器的设备节点。 可通过多种方式查看属于设备容器的所有节点:
- PnPUtil /enum-containers /devices (从 Windows 11 版本 24H2 开始可用的命令)
- 设备管理器:查看 -> 按容器列出的设备(从 Windows 10 版本 1703 开始可用的视图选项)
若要为计算机容器提供容器元数据,必须在名为 OEM 计算机设备的特殊开发节点上以扩展 INF 为目标。 从 Windows 11 版本 22H2 开始, OEM 计算机设备 可用。
OEM 计算机设备可以通过设备类和硬件 ID 进行标识,如以下示例所示:
枚举属于 Computer 类的所有 devnode:
PnPUtil /enum-devices /class Computer /deviceidsOEM 计算机设备如下所示:
Instance ID: SWD\COMPUTER\... Status: Started Driver Name: compdev.inf Hardware IDs: COMPUTER\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} COMPUTER\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} COMPUTER\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} COMPUTER\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} ...
Windows 硬件开发人员中心仅允许驱动程序包与OEM 计算机设备公开的 ID 匹配,作为扩展 INF。 在提交过程中,请务必在发货标签页的“业务理由”框中为设备指定内置 Windows 驱动程序:ExtendsInboxDriver=compdev.inf。 有关提交和发布扩展 INF 的详细信息,请参阅合作伙伴中心中的扩展 INF 文件使用和扩展 INF 目标规则。
例子
以下示例演示如何通过针对特定模型系统上的 OEM 计算机设备向计算机容器提供容器元数据:
[Standard.NTamd64]
%Device.ExtensionDesc% = DeviceInstall, Computer\{417c41d7-1d11-5b78-ab26-00b745dfac94}
%Device.ExtensionDesc% = DeviceInstall, Computer\{70127e8f-991f-505a-b966-fc08b6f74f94}
%Device.ExtensionDesc% = DeviceInstall, Computer\{ff26d547-8d7f-5069-bbcb-0c50756b691a}
%Device.ExtensionDesc% = DeviceInstall, Computer\{770bbdbb-bbf5-5d39-ae1a-25f41b7bbcfd}
[DeviceInstall]
AddProperty = ComputerMetadata_Properties
[ComputerMetadata_Properties]
ContainerModelName,,,, %ModelName%
ContainerManufacturer,,,, %Manufacturer%
ContainerCategories,,,, Computer.Tablet
ContainerIcon,,,, %13%\CustomComputer.ico
[Strings]
Device.ExtensionDesc = "Custom Computer Metadata Extension"
ModelName = "Custom Computer"
Manufacturer = "Custom Manufacturer"
; en-us
[Strings.0409]
Device.ExtensionDesc = "Custom Computer Metadata Extension"
ModelName = "Custom Computer"
Manufacturer = "Custom Manufacturer"
; zh-cn
[Strings.0804]
Device.ExtensionDesc = "自定义电脑元数据拓展"
ModelName = "自定义电脑型号"
Manufacturer = "自定义制造商"
以下示例演示如何为表示多函数打印机的容器提供容器元数据,包括 打印支持应用关联 :
[Standard.NTamd64]
%Device.ExtensionDesc% = DeviceInstall, MF\CustomPrinter&WSD&IP_PRINT
%Device.ExtensionDesc% = DeviceInstall, WSDPRINT\CustomPrinter
%Device.ExtensionDesc% = DeviceInstall, USBPRINT\CustomPrinter
%Device.ExtensionDesc% = DeviceInstall, CustomPrinter
[DeviceInstall]
AddProperty = Container_Metadata_Properties
AddProperty = PSA_Association_Property
[Container_Metadata_Properties]
ContainerModelName,,,, %ModelName%
ContainerManufacturer,,,, %Manufacturer%
ContainerCategories,,,, PrintFax.Printer, Imaging.Scanner
ContainerIcon,,,, %13%\CustomPrinter.ico
[PSA_Association_Property]
{A925764B-88E0-426D-AFC5-B39768BE59EB}, 1, 0x12,, CustomPrinterAUMID
[DeviceInstall.Software]
AddSoftware = Printer Control App,, Print_SoftwareInstall
[Print_SoftwareInstall]
SoftwareType = 2
SoftwareID = pfn://CustomPrinterControlAppId
[Strings]
Device.ExtensionDesc = "Container Property Extension"
ModelName = "Custom Printer"
Manufacturer = "Custom Manufacturer"
对于从 设备元数据包转换的用户,下面显示了设备元数据包在多函数打印机上面的示例中的外观:
PackageInfo.xml
<?xml version="1.0" encoding="utf-8"?> <PackageInfo xmlns="http://schemas.microsoft.com/windows/DeviceMetadata/PackageInfo/2007/11/"> <MetadataKey> <HardwareIDList> <HardwareID>DOID:MF\CustomPrinter&WSD&IP_PRINT</HardwareID> <HardwareID>DOID:WSDPRINT\CustomPrinter</HardwareID> <HardwareID>DOID:USBPRINT\CustomPrinter</HardwareID> <HardwareID>DOID:CustomPrinter</HardwareID> </HardwareIDList> <Locale default="true">en-US</Locale> <LastModifiedDate>2014-04-08T07:19:14Z</LastModifiedDate> </MetadataKey> ... </PackageInfo>DeviceInfo.xml
<?xml version="1.0" encoding="utf-8"?> <DeviceInfo xmlns="http://schemas.microsoft.com/windows/DeviceMetadata/DeviceInfo/2007/11/"> <DeviceCategoryList> <DeviceCategory>PrintFax.Printer</DeviceCategory> <DeviceCategory>Imaging.Scanner</DeviceCategory> </DeviceCategoryList> <ModelName>Custom Printer</ModelName> <Manufacturer>Custom Manufacturer</Manufacturer> <DeviceIconFile>CustomPrinter.ico</DeviceIconFile> </DeviceInfo>SoftwareInfo.xml
<?xml version="1.0" encoding="utf-8"?> <SoftwareInfo xmlns="http://schemas.microsoft.com/windows/2010/08/DeviceMetadata/SoftwareInfo"> <DeviceCompanionApplications> <Package> <Identity Name="CustomPrinterControlAppName" Publisher="CustomPrinterControlAppPublisher" /> ... </Package> </DeviceCompanionApplications> ... </SoftwareInfo>