Метаданные контейнера пакета драйверов

Метаданные контейнера пакета драйверов предоставляют OEM и IHV решение на основе пакета драйвера для настройки и улучшения информации о физическом устройстве, представленной контейнером устройства. Физическое устройство может быть периферийным устройством, подключенным к компьютеру или самому компьютеру. В следующем списке показан тип сведений, которые могут предоставлять метаданные контейнера пакета драйверов:

  • Имя OEM/IHV.
  • Имя модели контейнера устройства.
  • Одна или несколько функциональных категорий, поддерживаемых контейнером устройства.
  • Фотореалистичный значок, представляющий контейнер устройства.

Без метаданных контейнера операционная система создает сведения в предыдущем списке, просматривая все узлы устройств (devnodes), принадлежащие контейнеру устройства, а затем выполняя эвристики на основе сведений о devnodes. Этот процесс может не привести к значениям, требуемым изготовителям оборудования или IHV для отображения физических устройств. Метаданные контейнера можно использовать изготовителем оборудования или IHV для непосредственного управления этими значениями.

Метаданные контейнера пакета драйверов поддерживаются начиная с Windows 11 24H2 KB5052093 (сборка ОС 26100.3323). Если пакет драйвера, включающий метаданные контейнера, установлен в более старой системе Windows, установка будет успешно выполнена, но метаданные контейнера не будут обработаны и применены.

Использование базового INF-файла или INF расширения

Директива INF AddProperty в INF-файле пакета драйвера указывает метаданные контейнера пакета драйвера. Наши рекомендации по использованию INF-файла для метаданных контейнера:

  1. Если у изготовителей оборудования или IHV уже есть пакет драйвера, который является базовым INF-файлом для devnode, который является частью контейнера устройства, необходимо обновить пакет драйвера, чтобы включить метаданные контейнера.
  2. Если у производителей оригинального оборудования (OEM) или независимых поставщиков аппаратного обеспечения (IHV) нет пакета драйверов, являющегося базовым файлом INF для devnode, который входит в состав контейнера устройства, рекомендуется создать INF-пакет драйвера расширения. По сравнению с базовым INF расширение INF является более легким способом включения метаданных контейнера.

Дополнительные сведения о основных INF-файлах и INF-файлах расширения см. в разделе Использование INF-файла расширения.

Чтобы сертифицировать INF-файл, указывающий метаданные контейнера, требуется обновленный InfVerif, который доступен начиная с комплекта драйверов Windows версии 10.0.26100.3323 и Windows HLK 24H2 (обновлено за январь 2025 г.).

Ориентирование контейнера устройств

Пакеты драйверов нацелены на отдельные «devnodes», используя информацию, относящуюся к устройству. Эти сведения включают идентификаторы оборудования и совместимые идентификаторы. Чтобы предоставить метаданные контейнера соответствующему контейнеру устройства, пакет драйвера должен ориентироваться на один из "devnodes", принадлежащих контейнеру устройства. Существует несколько способов просмотра всех devnodes, принадлежащих контейнеру устройств:

  1. PnPUtil /enum-containers /devices (команда доступна начиная с Windows 11 версии 24H2)
  2. Диспетчер устройств: просмотр -> Устройства по контейнерам (параметр просмотра доступен, начиная с версии 1703 Windows 10)

Чтобы предоставить метаданные контейнера для контейнера компьютера, необходимо нацелить расширение INF на специальное devnode, называемое устройством компьютера OEM. Устройство компьютера OEM доступно начиная с версии Windows 11 22H2.

Устройство компьютера OEM можно определить по классам устройств и аппаратным идентификаторам, таким как в следующем примере:

  1. Перечислите все devnodes, принадлежащие классу Computer:

    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 позволяет использовать в качестве расширений INF только пакеты драйверов, которые соответствуют идентификаторам, предоставляемым компьютерным устройством OEM. Во время отправки важно указать встроенный Windows-драйвер для устройства в поле "Бизнес-обоснование" на странице метки доставки: ExtendsInboxDriver=compdev.inf. Дополнительные сведения о отправке и публикации расширений INFs см. в статье "Работа с 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>