Uso di un file INF componente

Se vuoi includere software in modalità utente da usare con un dispositivo in Windows 10, hai le opzioni seguenti per creare un driver conforme a DCH:

Metodo Scenario
App di supporto hardware (HSA) Software aggiuntivo del dispositivo pacchettizzato come app UWP fornita e gestita da Microsoft Store. Approccio consigliato.
Componenti software Il software del componente aggiuntivo del dispositivo è un file binario MSI o EXE, un servizio Win32 o un software installato tramite AddReg e CopyFiles. Il file binario a cui si fa riferimento viene eseguito solo nelle edizioni desktop (Home, Pro ed Enterprise). Il file binario a cui si fa riferimento non funzionerà in Windows 10S.

Un componente software è un pacchetto driver autonomo separato che può installare uno o più moduli software. Il software installato migliora il valore del dispositivo, ma non è necessario per la funzionalità di base del dispositivo e non richiede un servizio driver di funzione associato.

Questa pagina fornisce linee guida per l'uso dei componenti software.

Per iniziare

Per creare componenti, un file INF di estensione specifica la direttiva INF AddComponent una o più volte nella sezione INF DDInstall.Components . Per ogni componente software a cui si fa riferimento in un file INF di estensione, il sistema crea un dispositivo figlio virtuale enumerato dal software. Più pacchetti driver possono fare riferimento allo stesso componente software.

Gli elementi figlio del dispositivo virtuale possono essere aggiornati in modo indipendente esattamente come qualsiasi altro dispositivo, purché il dispositivo padre venga avviato. È consigliabile separare le funzionalità in più raggruppamenti diversi, per quanto abbia senso dal punto di vista della manutenzione, e quindi creare un componente software per ogni raggruppamento.

Verrà fornito un file INF per ogni componente software.

Se il componente software INF specifica la direttiva AddSoftware, il componente INF:

  • Deve essere un file INF universale.
  • È necessario specificare la classe di installazione SoftwareComponent.

È possibile specificare la direttiva AddSoftware una o più volte.

Nota

Quando si usa il tipo 2 della direttiva AddSoftware, non è necessario utilizzare un INF di componente. La direttiva può essere usata correttamente in qualsiasi INF. Una direttiva AddSoftware di tipo 1, tuttavia, deve essere usata da un Component INF.

Inoltre, qualsiasi INF (componente o meno) che corrisponde a un dispositivo componente software:

  • Può specificare i servizi utente Win32 usando la direttiva AddService.
  • Può installare software usando la direttiva INF AddReg e la direttiva INF CopyFiles.
  • Non richiede un driver di funzione.
  • Può essere disinstallato dall'utente indipendentemente dal dispositivo padre.

È possibile trovare un esempio di componente INF nel toolkit di installazione del pacchetto driver per i driver universali.

Nota: per il funzionamento di un dispositivo componente enumerato dal software, è necessario avviare il relativo elemento padre. Se non è disponibile alcun driver per il dispositivo padre, gli sviluppatori di driver possono creare i propri driver e, facoltativamente, sfruttare il driver pass-through "umpass.sys". Questo driver è incluso in Windows e, in modo efficace, non fa altro che avviare il dispositivo. Per usare umpass.sys, gli sviluppatori devono usare le direttive INF Include/Needs nella sezione DDInstall e, per ogni possibile sezione [DDInstall.*], nelle corrispondenti sezioni [UmPass.*], come illustrato di seguito, indipendentemente dal fatto che il file INF specifichi o meno direttive per tale sezione:

[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

Accesso a un dispositivo da un componente software

Per recuperare l'ID istanza del dispositivo di un dispositivo associato a un componente software, usare il valore SoftwareArguments nella sezione direttiva INF AddSoftware con la variabile di <<DeviceInstanceID>> contesto di runtime.

Il file eseguibile può quindi recuperare l'ID istanza dispositivo del componente software dal relativo elenco di argomenti in ingresso.

Successivamente, se il componente software è destinato alla piattaforma target universale, seguire questa procedura:

  1. Chiamare CM_Locate_DevNode con l'ID istanza del dispositivo del componente software per recuperare un handle di dispositivo.
  2. Chiamare CM_Get_Parent per recuperare un handle all'elemento padre del dispositivo. Questo elemento padre è il dispositivo che ha aggiunto il componente software usando la direttiva INF AddComponent.
  3. Quindi, per recuperare l'ID istanza del dispositivo dell'elemento padre, chiamare CM_Get_Device_ID sull'handle ottenuto da CM_Get_Parent.

Se il componente software è destinato solo alla piattaforma di destinazione desktop, seguire questa procedura:

  1. Chiama SetupDiCreateDeviceInfoList per creare un set di informazioni sul dispositivo vuoto.
  2. Chiamare SetupDiOpenDeviceInfo con l'ID istanza del dispositivo componente software.
  3. Chiama SetupDiGetDeviceProperty con DEVPKEY_Device_Parent per recuperare l'ID istanza del dispositivo del dispositivo padre.

Esempio

Nell'esempio seguente viene illustrato come usare un componente software per installare un pannello di controllo usando un eseguibile per una scheda grafica.

File INF del pacchetto 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"

File INF del componente 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"

Il processo di convalida e invio del driver è lo stesso per i file INF dei componenti, come per i normali file INF. Per altre info, vedi Introduzione a Windows HLK.

Per altre informazioni sulle classi di installazione, vedi Classi di installazione di dispositivi definite dal sistema disponibili per i fornitori.

Vedi anche

Direttiva INF AddComponent

Direttiva INF AddSoftware

Sezione INF DDInstall.Components

Sezione INF DDInstall.Software