Usar um arquivo INF de componente

Se você quiser incluir software de modo de usuário para uso com um dispositivo no Windows 10, terá as seguintes opções para criar um driver compatível com DCH:

Método Cenário
Aplicativos de suporte a hardware (HSA) Software complementar de dispositivo empacotado como um aplicativo UWP que é entregue e atualizado pela Microsoft Store. Abordagem recomendada.
Componentes de software O software complementar do dispositivo é um binário MSI ou EXE, um serviço Win32 ou software instalado usando AddReg e CopyFiles. O binário referenciado só é executado em edições da área de trabalho (Home, Pro e Enterprise). O binário referenciado não será executado no Windows 10S.

Um componente de software é um pacote de driver separado e autônomo que pode instalar um ou mais módulos de software. O software instalado aumenta o valor do dispositivo, mas não é necessário para a funcionalidade básica do dispositivo e não requer um serviço de driver de função associado.

Esta página fornece diretrizes para o uso de componentes de software.

Primeiros passos

Para criar componentes, um arquivo de extensão INF especifica a diretiva INF AddComponent uma ou mais vezes na seção INF DDInstall.Components. Para cada componente de software referenciado em um arquivo de extensão INF, o sistema cria um dispositivo filho enumerado por software virtual. Mais de um pacote de driver pode fazer referência ao mesmo componente de software.

Os dispositivos filho virtuais podem ser atualizados de forma independente, assim como qualquer outro dispositivo, desde que o dispositivo pai seja iniciado. Recomendamos separar a funcionalidade em quantos agrupamentos diferentes fizerem sentido do ponto de vista da manutenção e, em seguida, criar um componente de software para cada agrupamento.

Você fornecerá um arquivo INF para cada componente de software.

Se o componente de software INF especifica a diretiva AddSoftware, o componente INF:

  • Deve ser um arquivo INF universal.
  • Deve especificar a classe de instalação SoftwareComponent.

Você pode especificar a diretiva AddSoftware uma ou mais vezes.

Observação

Ao usar o Tipo 2 da diretiva AddSoftware, não é necessário utilizar um Componente INF. A diretiva pode ser usada em qualquer INF com êxito. Uma diretiva AddSoftware do Tipo 1, no entanto, deve ser usada em um arquivo INF de componente.

Além disso, qualquer INF (componente ou não) que corresponda a um dispositivo de componente de software:

  • Pode especificar serviços de usuário Win32 usando a diretiva AddService.
  • Pode instalar software usando a diretiva INF AddReg e a diretiva INF CopyFiles.
  • Não requer um serviço de driver funcional.
  • Pode ser desinstalado pelo usuário independentemente do dispositivo pai.

Você pode encontrar um exemplo de um componente INF no kit de ferramentas de instalação do pacote de driver para drivers universais.

Observação: Para que um dispositivo de componente enumerado por software funcione, o dispositivo pai deve ser iniciado. Se não houver nenhum driver disponível para o dispositivo pai, os desenvolvedores de driver poderão criar seu próprio driver e, opcionalmente, aproveitar o driver de passagem "umpass.sys". Este driver está incluído no Windows e, efetivamente, não faz nada além de iniciar o dispositivo. Para usar o umpass.sys, os desenvolvedores devem usar as diretivas INF Include/Needs na seção DDInstall section em cada possível seção [DDInstall.*] para as correspondentes seções [UmPass.*], conforme mostrado abaixo, independentemente de o INF especificar quaisquer diretivas para essa seção ou não:

[DDInstall]
Include=umpass.inf
Needs=UmPass
; also include any existing DDInstall directives

[DDInstall.HW]
Include=umpass.inf
Needs=UmPass.HW
; also include any existing DDInstall.HW directives

[DDInstall.Interfaces]
Include=umpass.inf
Needs=UmPass.Interfaces
; also include any existing DDInstall.Interfaces directives

[DDInstall.Services]
Include=umpass.inf
Needs=UmPass.Services
; also include any existing any DDInstall.Services directives

Acesso a um dispositivo a partir de um componente de software

Para recuperar o ID da instância do dispositivo de um dispositivo associado a um componente de software, use o valor SoftwareArguments na seção da diretiva INF AddSoftware com a variável de contexto de runtime .

O executável pode então recuperar, de sua lista de argumentos de entrada, o ID da instância do dispositivo do componente de software.

Em seguida, se o componente de software estiver direcionado à plataforma de destino Universal, use o seguinte procedimento:

  1. Chame CM_Locate_DevNode com o ID da instância do dispositivo do componente de software para recuperar um identificador de dispositivo.
  2. Chame CM_Get_Parent para recuperar um identificador para o pai desse dispositivo. Esse pai é o dispositivo que adicionou o componente de software usando a Diretiva AddComponent do INF.
  3. Em seguida, para recuperar o ID da instância do dispositivo pai, chame CM_Get_Device_ID no identificador retornado por CM_Get_Parent.

Se o componente de software estiver direcionado apenas à plataforma de destino para desktop, use o seguinte procedimento:

  1. Chame SetupDiCreateDeviceInfoList para criar um conjunto de informações de dispositivo vazio.
  2. Chame SetupDiOpenDeviceInfo com o ID da instância do dispositivo do componente de software.
  3. Chame SetupDiGetDeviceProperty com para recuperar o ID da instância do dispositivo do pai.

Exemplo

O exemplo a seguir mostra como você pode usar um componente de software para instalar um painel de controle usando um executável para uma placa gráfica.

Arquivo INF do pacote de driver

[Version]
Signature   = "$WINDOWS NT$"
Class       = Extension
ClassGuid   = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
Provider    = %CONTOSO%
DriverVer   = 06/21/2006,1.0.0.0
CatalogFile = ContosoGrfx.cat
PnpLockdown = 1

[Manufacturer]
%CONTOSO%=Contoso,NTx86

[Contoso.NTx86]
%ContosoGrfx.DeviceDesc%=ContosoGrfx, PCI\VEN0001&DEV0001

[ContosoGrfx.NT]
;empty

[ContosoGrfx.NT.Components]
AddComponent = ContosoControlPanel,, Component_Inst

[Component_Inst]
ComponentIDs = VID0001&PID0001&SID0001

[Strings]
CONTOSO = "Contoso Inc."
ContosoGrfx.DeviceDesc = "Contoso Graphics Card Extension"

Arquivo INF do componente de software

[Version]
Signature   = "$WINDOWS NT$"
Class       = SoftwareComponent
ClassGuid   = {5c4c3332-344d-483c-8739-259e934c9cc8}
Provider    = %CONTOSO%
DriverVer   = 06/21/2006,1.0.0.0
CatalogFile = ContosoCtrlPnl.cat
PnpLockdown = 1

[SourceDisksNames]
1 = %Disk%,,,""

[SourceDisksFiles]
ContosoCtrlPnl.exe = 1

[DestinationDirs]
DefaultDestDir = 13

[Manufacturer]
%CONTOSO%=Contoso,NTx86

[Contoso.NTx86]
%ContosoCtrlPnl.DeviceDesc%=ContosoCtrlPnl, SWC\VID0001&PID0001&SID0001

[ContosoCtrlPnl.NT]
CopyFiles=ContosoCtrlPnl.NT.Copy

[ContosoCtrlPnl.NT.Copy]
ContosoCtrlPnl.exe

[ContosoCtrlPNl.NT.Services]
AddService = , %SPSVCINST_ASSOCSERVICE%

[ContosoCtrlPnl.NT.Software]
AddSoftware = ContosoGrfx1CtrlPnl,, Software_Inst

[Software_Inst]
SoftwareType = 1
SoftwareBinary = %13%\ContosoCtrlPnl.exe
SoftwareArguments = <<DeviceInstanceID>>
SoftwareVersion = 1.0.0.0

[Strings]
SPSVCINST_ASSOCSERVICE = 0x00000002
CONTOSO = "Contoso"
ContosoCtrlPnl.DeviceDesc = "Contoso Control Panel"

O processo de validação e envio do driver é o mesmo para INFs de componente e para INFs regulares. Para obter mais informações, consulte Introdução ao Windows HLK.

Para obter mais informações sobre classes de instalação, consulte Classes de Instalação de Dispositivo Definidas pelo Sistema Disponíveis para Fornecedores.

Confira também

Diretiva INF AddComponent

Diretiva INF AddSoftware

Seção INF DDInstall.Components

Seção INF DDInstall.Software