Fornecendo um arquivo INF UVC

Importante

O conteúdo e o código de exemplo neste tópico estão desatualizados e não têm suporte no momento. Ele pode não funcionar com a cadeia de ferramentas de desenvolvimento de driver atual.

Esta seção ilustra várias partes de um arquivo INF específico do dispositivo.

Um arquivo INF como este pode ser usado para fornecer um nome específico do dispositivo ou para registrar o plug-in da Unidade de Extensão.

Em geral, os fornecedores que fornecem um pacote de instalação podem registrar a DLL do plug-in usando o pacote de instalação; nesse caso, o fornecedor não fornece um arquivo INF. Para a assinatura de driver, pode ser mais fácil fornecer um pacote de instalação em vez de um arquivo INF específico do dispositivo.

No entanto, lembre-se de que você deve instalar esse exemplo específico usando um arquivo INF.

Para fazer isso, inclua o seguinte código no arquivo INF, aqui chamado arbitrariamente 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$

O arquivo INF específico do dispositivo é correspondido ao dispositivo com base no identificador VID/PID. Nesse caso, o arquivo INF específico do dispositivo tem precedência sobre 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

Seções adicionais de Usbvideo.inf precisam ser incluídas para integridade.

[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

O INF também precisa de uma seção CopyFiles para copiar o plug-in para a pasta do sistema.

[MyDevice.CopyList]
MyPlugin.ax

A primeira parte da seção AddReg inf a seguir registra o plug-in. O restante desta seção mostra as entradas do Registro para um plug-in de Unidade de Extensão baseado em nó. Consulte Usbvideo.inf para obter exemplos semelhantes.

[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

A seção INF a seguir mostra como preencher entradas de registro específicas da interface.

[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

Para câmeras USB, se o local da chave do Registro da interface do dispositivo contiver uma entrada do Registro DWORD EnableDependentStillPinCapture com um valor diferente de zero, o pino dependente nessas câmeras será usado para captura de fotos. Se a entrada do Registro não estiver presente ou definida como zero, o pino dependente não será usado. Em vez disso, a captura de fotos será feita usando um quadro tirado do pino de visualização. O seguinte habilita a captura de pin ainda dependente:

HKR,,EnableDependentStillPinCapture,0x00010001,1

Você também pode definir um valor opcional do Registro chamado UvcFlags. UvcFlags deve ser um valor DWORD. Quando o dispositivo está conectado, o driver UVC recebe uma solicitação de início de Plug and Play (PnP). Em seguida, o driver procura UvcFlags na chave do Registro do dispositivo. O valor DWORD é uma máscara de bits e pode conter os valores na tabela a seguir.

Nome da máscara de bits Valor Descrição
WORKAROUNDS_DV_INTERLEAVED_DEFAULT_MASK 0x00000001 O UVC dá suporte a intervalos de dados somente vídeo e intervalos de dados DV intercalados. Defina essa máscara de bits para DV intercalado.
WORKAROUNDS_SUPPRESS_CLOCK_MASK 0x00000002 Não usado no momento.
WORKAROUNDS_MPEG2TS_SUPPORT_FID 0x00000004 A máscara FID indica que o cabeçalho do fluxo contém um bit FID.
WORKAROUNDS_MPEG2TS_SUPPORT_EOF 0x00000008 A máscara EOF indica que os cabeçalhos de conteúdo contêm um bit de fim de quadro.
WORKAROUNDS_VARIABLE_FRAME_RATE_MASK 0x00000010 Defina essa máscara se o dispositivo puder variar a taxa de quadros. Os dispositivos DV de taxa fixa não devem definir essa máscara.

Inclua uma linha semelhante ao exemplo a seguir para especificar a máscara de bits a ser aplicada:

HKR,,UvcFlags,0x00010001,0x00000010

Se você estiver usando o driver UVC no Windows Server 2003 e no Windows Vista ou versões posteriores do sistema operacional, as máscaras FID e EOF poderão ser usadas com formatos baseados em fluxo, como MPEG-2 TS.

Em condições de baixa taxa de quadros, o bit EOF pode relatar a conclusão mais rapidamente do que o bit FID do quadro a seguir. O bit EOF pode ser usado para reduzir a latência na entrega de quadros MPEG-2.

Para obter mais informações sobre a sintaxe posicional das diretivas AddReg, consulte Diretiva AddReg inf.

Esta seção final fornece definições ausentes para o 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"