提供 UVC INF 文件

重要

本主题中的内容和示例代码已过时,目前不受支持。 它可能不适用于当前的驱动程序开发工具链。

本部分说明了特定于设备的 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 驱动程序将收到即插即用 (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

如果在 Windows Server 2003 和 Windows Vista 或更高版本的操作系统上使用 UVC 驱动程序,则 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"