Share via


Usando um arquivo INF de componente

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

Método Cenário
HSA (aplicativos de suporte a hardware) Software de complemento de dispositivo empacotado como um aplicativo UWP que é entregue e atendido da Microsoft Store. Abordagem recomendada.
Componentes de software O software de complemento 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 autônomo separado que pode instalar um ou mais módulos de software. O software instalado aprimora 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.

Introdução

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

Os filhos de dispositivos virtuais podem ser atualizados de forma independente, assim como qualquer outro dispositivo, desde que o dispositivo pai seja iniciado. É recomendável separar a funcionalidade em tantos agrupamentos diferentes quanto faz sentido de uma perspectiva de 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 especificar a diretiva AddSoftware, o componente INF:

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 INF de componente. A diretiva pode ser usada em qualquer INF com êxito. No entanto, uma diretiva AddSoftware do Tipo 1 deve ser usada de um INF de componente.

Além disso, qualquer correspondência INF (componente ou não) em um dispositivo de componente de software:

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

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

Acessando um dispositivo de um componente de software

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

Em seguida, o executável pode recuperar a ID da instância do dispositivo do componente de software de sua lista de argumentos de entrada.

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

  1. Chame CM_Locate_DevNode com a 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 a ID da instância do dispositivo do pai, chame CM_Get_Device_ID no identificador de CM_Get_Parent.

Se o componente de software estiver direcionando apenas a plataforma de destino da área de trabalho, use o seguinte procedimento:

  1. Chame SetupDiCreateDeviceInfoList para criar um conjunto de informações de dispositivo vazio.
  2. Chame SetupDiOpenDeviceInfo com a ID da instância do dispositivo do dispositivo do componente de software.
  3. Chame SetupDiGetDeviceProperty com DEVPKEY_Device_Parent para recuperar a 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 um cartão gráfico.

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 de driver é o mesmo para INFs de componente que para INFs regulares. Para obter mais informações, consulte Windows HLK Introdução.

Para obter mais informações sobre classes de instalação, consulte Classes de instalação de dispositivo definidas pelo sistema disponíveis para fornecedores.

Consulte Também

Diretiva AddComponent do INF

Diretiva InF AddSoftware

Seção INF DDInstall.Components

Seção INF DDInstall.Software