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 disponibilizado na 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.
Introdução
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 filhos do dispositivo virtual 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 especificar 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 a partir de um Componente INF.
Além disso, qualquer INF (componente ou não) correspondente em 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 de função.
- 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, seu ativo principal 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 a unidade umpass.sys, os desenvolvedores devem usar as diretivas INF Include/Needs na seção DDInstall para cada seção possível [DDInstall.*] para as seções [UmPass.*] correspondentes , conforme mostrado aqui, 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
Acessar 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 de diretiva INF AddSoftware com a variável de contexto de runtime <<DeviceInstanceID>>
.
O executável pode recuperar o 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:
- Chame CM_Locate_DevNode com o ID da instância do dispositivo do componente de software para recuperar um identificador de dispositivo.
- 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 INF AddComponent.
- Em seguida, para recuperar o ID da instância do dispositivo pai, chame CM_Get_Device_ID no identificador de CM_Get_Parent.
Se o componente de software estiver direcionando apenas a plataforma de destino de desktop, use o seguinte procedimento:
- Chame SetupDiCreateDeviceInfoList para criar um conjunto de informações de dispositivo vazio.
- Chame SetupDiOpenDeviceInfo com ID da instância do dispositivo do componente de software.
- Chame SetupDiGetDeviceProperty com
DEVPKEY_Device_Parent
para recuperar 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 configuração, consulte Classes de Instalação de Dispositivo Definidas pelo Sistema Disponíveis para Fornecedores.