Предоставление 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 Directive.
В последнем разделе содержатся отсутствующие определения для 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"