Предоставление INF-файла для UVC

Это важно

Содержимое и пример кода в этом разделе устарели и в настоящее время не поддерживаются. Она может не работать с текущей цепочкой инструментов разработки драйверов.

В этом разделе показаны различные части INF-файла для конкретного устройства.

INF-файл, подобный этому, можно использовать для предоставления имени устройства или регистрации плагина блока расширения.

Как правило, поставщики, предоставляющие пакет установки, могут зарегистрировать библиотеку DLL подключаемого модуля с помощью пакета установки, в этом случае поставщик не предоставляет INF-файл. Для подписывания драйвера может быть проще предоставить пакет установки вместо INF-файла для конкретного устройства.

Однако следует учитывать, что этот конкретный пример необходимо установить с помощью INF-файла.

Для этого добавьте следующий код в INF-файл, здесь произвольно именованный Xuplgin.inf:

; Copyright (c) CompanyName. All rights reserved.

[Version]
...
Class=Camera
ClassGuid={ca3e7ab9-b4c3-4ae6-8251-579ef933890f}
...

[SourceDisksNames]
1=%Package%

[SourceDisksFiles]
MyPlugin.ax=1

[ControlFlags]
ExcludeFromSelect=*

[DestinationDirs]
MyDevice.CopyList=11    ; %systemroot%\system32 on NT-based systems

[Manufacturer]
%CompanyName%=CompanyName,NT$ARCH$

INF-файл для конкретного устройства сопоставляется с устройством на основе идентификатора VID/PID. В этом случае INF-файл для конкретного устройства имеет приоритет над Usbvideo.inf.

[CompanyName.NT$ARCH$]
%MyDevice.DeviceDesc%=MyDevice,USB\Vid_XXXX&Pid_XXXX&MI_XX

[MyDevice]
Include=usbvideo.inf, ks.inf, kscaptur.inf
Needs=USBVideo.NT, KS.Registration, KSCAPTUR.Registration.NT
AddReg=MyDevice.Plugins
CopyFiles=MyDevice.CopyList

Для полноты необходимо включить дополнительные разделы Usbvideo.inf.

[MyDevice.SERVICES]
Include=usbvideo.inf
Needs=USBVideo.NT.SERVICES

[MyDevice.HW]
Include=usbvideo.inf
Needs=USBVideo.NT.HW

[MyDevice.WDF]
Include=usbvideo.inf
Needs=USBVideo.NT.WDF

[WdmCompanionFilter_CompanionSect]
CompanionServices = SecureUSBVideo

[WdmCompanionFilter_KmdfSvcSect]
KmdfLibraryVersion = %KMDF_VERSION%

[SecureUSBVideo_UmdfSvcSect]
UmdfLibraryVersion = %UMDF_VERSION%
ServiceBinary = %12%\UMDF\SecureUSBVideo.dll
ServiceType = SecureCompanion ; allowed options are: Driver (default), SecureCompanion, NonSecureCompanion
TrustletIdentity = 4096          ; required if it is SecureCompanion

INF также требуется раздел CopyFiles для копирования подключаемого модуля в системную папку.

[MyDevice.CopyList]
MyPlugin.ax

Первая часть следующего раздела INF AddReg регистрирует подключаемый модуль. Оставшаяся часть этого раздела содержит записи реестра для плагина на основе узлов, модуля расширения. См. Usbvideo.inf для аналогичных примеров.

[MyDevice.PlugIns]
HKCR,CLSID\%Plugin.CLSID%,,,%PlugIn_IExtensionUnit%
HKCR,CLSID\%Plugin.CLSID%\InprocServer32,,,MyPlugin.ax
HKCR,CLSID\%Plugin.CLSID%\InprocServer32,ThreadingModel,,Both

; The IID is aggregated onto the node given the GUID of the property set
HKLM,System\CurrentControlSet\Control\NodeInterfaces\%XU_GUID%,,,
   %PlugIn_IExtensionUnit%
; IID in Little-Endian form
HKLM,System\CurrentControlSet\Control\NodeInterfaces\%XU_GUID%,IID,
   1,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy
;CLSID in Little-Endian form
HKLM,System\CurrentControlSet\Control\NodeInterfaces\%XU_GUID%,
   CLSID,1,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz

В следующем разделе INF показано, как заполнить записи реестра, относящиеся к интерфейсу.

[MyDevice.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,<Custom GUID/Global>,MyDevice.Interface
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,<Custom GUID/Global>,MyDevice.Interface
AddInterface=%KSCATEGORY_VIDEO%,<Custom GUID/Global>,MyDevice.Interface

[MyDevice.Interface]
AddReg=MyDevice.Interface.AddReg

[MyDevice.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%MyDevice.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010

Для USB-камер, если расположение ключа реестра интерфейса устройства содержит запись реестра DWORD EnableDependentStillPinCapture с ненулевым значением, зависимый контакт на таких камерах будет использоваться для съемки фотографий. Если запись реестра отсутствует или имеет значение нулю, зависимый пин-код не будет использоваться. Вместо этого фотозапечать будет выполнена с помощью кадра, взятого из предварительного значка предварительного просмотра. Следующее обеспечивает возможность захвата зависимых неподвижных кадров.

HKR,,EnableDependentStillPinCapture,0x00010001,1

Можно также определить необязательное значение реестра, называемое UvcFlags. UvcFlags должна быть значением DWORD. Когда устройство подключено, драйвер UVC получает запрос на запуск Plug and Play (PnP). Затем драйвер ищет UvcFlags в разделе реестра устройств. Значение DWORD представляет собой битовую маску и может содержать значения в следующей таблице.

Имя битовой маски Ценность Описание
WORKAROUNDS_DV_INTERLEAVED_DEFAULT_MASK 0x00000001 UVC поддерживает диапазоны данных, доступные только для видео, и диапазоны данных DV с чередованием. Задайте эту битовую маску для чередуемого DV.
WORKAROUNDS_SUPPRESS_CLOCK_MASK 0x00000002 Сейчас не используется.
WORKAROUNDS_MPEG2TS_SUPPORT_FID 0x00000004 Маска FID указывает, что заголовок потока содержит бит FID.
WORKAROUNDS_MPEG2TS_SUPPORT_EOF 0x00000008 Маска EOF указывает, что заголовки полезных данных содержат бит конца кадра.
WORKAROUNDS_VARIABLE_FRAME_RATE_MASK 0x00000010 Установите эту маску, если устройство может изменить частоту кадров. Устройства DV с фиксированной частотой не должны устанавливать эту маску.

Включите строку, аналогичную следующему примеру, чтобы указать применяемую битовую маску:

HKR,,UvcFlags,0x00010001,0x00000010

Если вы используете драйвер UVC в Windows Server 2003 и Windows Vista или более поздних версиях операционной системы, маски FID и EOF можно использовать с форматами на основе потоков, такими как MPEG-2 TS.

В условиях низкой частоты кадров бит EOF может сообщать о завершении быстрее, чем бит FID следующего кадра. Бит EOF можно использовать для уменьшения задержки при доставке кадров MPEG-2.

Дополнительные сведения о позиционном синтаксисе директив AddReg см. в директива INF AddReg.

В этом заключительном разделе содержатся отсутствующие определения для INF.

[Strings]
; Non-localizable
Plugin.CLSID="{zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz}"
ProxyVCap.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
XU_GUID="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"
KSCATEGORY_VIDEO_CAMERA="{E5323777-F976-4f5b-9B55-B94699C46E44}"
KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_VIDEO="{6994AD05-93EF-11D0-A3CC-00A0C9223196}"

; Localizable
CompanyName="CompanyName"
Package="Installation Package"
MyDevice.DeviceDesc="CompanyName Camera"

PlugIn_IMyExtensionUnit="CompanyName Extension Unit Interface"