驱动程序包容器元数据

驱动程序包容器元数据为 OEM 和 IHV 提供了基于 驱动程序包的解决方案,以自定义和增强其物理设备(由 设备容器表示)的面向用户的信息。 物理设备可以是连接到计算机或计算机本身的外围设备。 以下列表显示了驱动程序包容器元数据可以提供的信息类型:

  • OEM/IHV 的名称。
  • 设备容器的模型名称。
  • 设备容器支持的一个或多个功能类别。
  • 代表设备容器的逼真图标。

如果没有容器元数据,操作系统会通过查看属于设备容器的所有 设备节点(devnodes),然后基于设备节点的信息运行启发式计算,从而生成前面的列表中的信息。 此过程可能不会导致 OEM 或 IHV 所需的值来显示其物理设备。 OEM 或 IHV 可以使用容器元数据直接控制这些值。

从 Windows 11 24H2 KB5052093(OS 内部版本 26100.3323)开始,驱动程序包容器的元数据得到了支持。 如果在较旧的 Windows 系统上安装了包含容器元数据的驱动程序包,则安装将成功,但不会处理和应用容器元数据。

使用基础 INF 或扩展 INF

驱动程序包 INF 文件中INF AddProperty 指令指定驱动程序包容器元数据。 我们的建议是选择哪个 INF 文件用于容器元数据:

  1. 如果 OEM/IHV 已有作为设备容器一部分的开发节点的基本 INF 的驱动程序包,则应更新该驱动程序包以包含容器元数据。
  2. 如果 OEM/IHV 没有设备容器中设备节点的基本 INF 驱动程序包,建议创建扩展 INF 驱动程序包。 与基本 INF 相比,扩展 INF 是包括容器元数据的更轻量方法。

有关基本 INF 和扩展 INF 的详细信息,请参阅 使用扩展 INF 文件

若要认证指定容器元数据的 INF 文件,需要更新的 InfVerif (从 Windows 驱动程序工具包版本 10.0.26100.3323Windows HLK 24H2(2025 年 1 月更新)开始提供。

设备容器定位

驱动程序包根据特定的设备信息对单个设备节点进行定位。 此信息包括 硬件 ID兼容的 ID。 若要向正确的设备容器提供容器元数据,驱动程序包必须面向某个属于设备容器的设备节点。 可通过多种方式查看属于设备容器的所有节点:

  1. PnPUtil /enum-containers /devices (从 Windows 11 版本 24H2 开始可用的命令)
  2. 设备管理器:查看 -> 按容器列出的设备(从 Windows 10 版本 1703 开始可用的视图选项)

若要为计算机容器提供容器元数据,必须在名为 OEM 计算机设备的特殊开发节点上以扩展 INF 为目标。 从 Windows 11 版本 22H2 开始, OEM 计算机设备 可用。

OEM 计算机设备可以通过设备类和硬件 ID 进行标识,如以下示例所示:

  1. 枚举属于 Computer 类的所有 devnode:

    PnPUtil /enum-devices /class Computer /deviceids
    
  2. OEM 计算机设备如下所示:

    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>