Uso di un file INF componente

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

Metodo Scenario
App di supporto hardware (HSA) Componente aggiuntivo del dispositivo in pacchetto come app UWP recapitata e eseguita dal servizio 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 usando AddReg e CopyFiles. Il file binario a cui si fa riferimento viene eseguito solo nelle edizioni desktop (Home, Pro e Enterprise). Il file binario a cui si fa riferimento non verrà eseguito 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à del dispositivo di base e non richiede un servizio driver di funzione associato.

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

Introduzione

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 enumerazione software virtuale. Più pacchetti driver possono fare riferimento allo stesso componente software.

I figli di dispositivi virtuali possono essere aggiornati in modo indipendente come qualsiasi altro dispositivo, purché il dispositivo padre venga avviato. È consigliabile separare le funzionalità in un numero elevato di raggruppamenti diversi, come ha senso dal punto di vista di 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.
  • Deve specificare la classe di installazione SoftwareComponent .

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

Nota

Quando si usa la direttiva AddSoftware type 2, non è necessario usare un COMPONENTE INF. La direttiva può essere usata in qualsiasi INF correttamente. Una direttiva AddSoftware di Tipo 1, tuttavia, deve essere usata da un componente INF.

Inoltre, qualsiasi corrispondenza inF (componente o meno) in un dispositivo componente software:

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

Nota: per consentire l'avvio di un dispositivo componente enumerato dal software, il relativo padre deve essere avviato. 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 INCLUDE/Needs INF nella sezione DDInstall per ogni possibile sezione [DDInstall .*] alle sezioni [UmPass.*] corrispondenti, come illustrato di seguito, indipendentemente dal fatto che inF specifica le direttive per tale sezione o meno:

[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 <<DeviceInstanceID>> variabile di contesto di runtime.

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

Se quindi il componente software è destinato alla piattaforma di destinazione universale, usare la procedura seguente:

  1. Chiamare CM_Locate_DevNode con l'ID istanza del dispositivo del componente software per recuperare un handle del 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 da CM_Get_Parent.

Se il componente software è destinato solo alla piattaforma di destinazione Desktop, usare la procedura seguente:

  1. Chiamare SetupDiCreateDeviceInfoList per creare un set di informazioni sul dispositivo vuoto.
  2. Chiamare SetupDiOpenDeviceInfo con l'ID istanza del dispositivo del componente software.
  3. Chiamare SetupDiGetDeviceProperty con DEVPKEY_Device_Parent per recuperare l'ID istanza del dispositivo dell'elemento 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 gli INFS componenti come per gli INFS regolari. Per altre informazioni, vedere Introduzione a Windows HLK.

Per altre informazioni sulle classi di installazione, vedere Classi di installazione del dispositivo definite dal sistema disponibili per i fornitori.

Vedere anche

Direttiva INF AddComponent

Direttiva INF AddSoftware

Sezione INF DDInstall.Components

Sezione INF DDInstall.Software