提供 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"