Usando um ficheiro INF de componente

Se quiser incluir software em modo utilizador para uso com um dispositivo no Windows 10, tem as seguintes opções para criar um driver compatível com DCH:

Method Scenario
Aplicações de suporte de hardware (HSA) Software adicional para dispositivos empacotado como uma aplicação UWP que é entregue e mantida a partir da Microsoft Store. Abordagem recomendada.
Componentes de software O software adicional de dispositivo é um binário MSI ou EXE, um serviço Win32 ou software instalado usando AddReg e CopyFiles. O binário referenciado só funciona em edições desktop (Home, Pro e Enterprise). O binário referenciado não corre no Windows 10S.

Um componente de software é um pacote de drivers 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 orientações para a utilização de componentes de software.

Introdução

Para criar componentes, um ficheiro INF de extensão especifica a diretiva INF AddComponent uma ou mais vezes na secção INF DDInstall.Components . Para cada componente de software referenciado num ficheiro INF de extensão, o sistema cria um dispositivo filho virtual enumerado por software. Mais do que um pacote de drivers pode referenciar o mesmo componente de software.

Os filhos dos dispositivos virtuais podem ser atualizados de forma independente, tal como qualquer outro dispositivo, desde que o dispositivo principal seja iniciado. Recomendamos separar a funcionalidade em tantos agrupamentos diferentes quanto fizer sentido do ponto de vista da manutenção, e depois criar um componente de software para cada agrupamento.

Vais fornecer um ficheiro INF para cada componente de software.

Se o seu componente de software INF especificar a diretiva AddSoftware, o componente INF:

Pode especificar a diretiva AddSoftware uma ou mais vezes.

Note

Ao utilizar o Tipo 2 da diretiva AddSoftware, não é obrigatório utilizar um INF de Componente. A diretiva pode ser usada em qualquer INF com sucesso. Uma diretiva AddSoftware do tipo 1, no entanto, deve ser usada num ficheiro INF de componente.

Adicionalmente, qualquer INF (componente ou não) que corresponda a um dispositivo de componente de software:

Pode encontrar um exemplo de um componente INF no kit de ferramentas de instalação de pacotes de drivers para drivers universais.

Nota: Para que um dispositivo componente enumerado por software funcione, o respetivo dispositivo principal deve ser iniciado. Se não houver driver disponível para o dispositivo pai, os desenvolvedores podem criar o seu próprio e, opcionalmente, aproveitar o driver pass-through "umpass.sys". Este driver está incluído no Windows e, na prática, não faz mais do que ligar o dispositivo. Para usar umpass.sys, os programadores devem usar as diretivas Include/Needs INF na secção DDInstall, em cada secção [DDInstall.*] possível, para as secções [UmPass.*] correspondentes, conforme mostrado abaixo, independentemente de o INF especificar ou não diretivas para essa secçã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

Aceder a um dispositivo a partir de um componente de software

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

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

De seguida, se o componente de software for destinado à plataforma de destino Universal, utilize o seguinte procedimento:

  1. Invoque CM_Locate_DevNode com o ID de instância do dispositivo do componente de software para recuperar um identificador de dispositivo.
  2. Chame CM_Get_Parent para obter um handle do pai desse dispositivo. Este dispositivo principal é o que adicionou o componente de software usando a Diretiva INF AddComponent.
  3. Depois, para recuperar o ID da instância do dispositivo principal, chame CM_Get_Device_ID no identificador devolvido por CM_Get_Parent.

Se o componente de software estiver apenas direcionado para a plataforma alvo do ambiente de trabalho, utilize o seguinte procedimento:

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

Example

O exemplo seguinte mostra como pode usar um componente de software para instalar um painel de controlo usando um executável para uma placa gráfica.

Ficheiro INF do pacote de controladores

[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"

Ficheiro INF de 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 os INFs de componente e para os INFs regulares. Para mais informações, consulte Windows HLK Getting Started.

Para mais informações sobre classes de configuração, consulte System-Defined Device Setup Classes Available to Vendors.

Ver também

Diretiva INF AddComponent

Diretiva INF AddSoftware

Secção INF DDInstall.Components

Secção DDInstall.Software do INF