Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Prima di Windows 10, Windows ha selezionato un singolo pacchetto driver da installare per un determinato dispositivo. Ciò ha comportato pacchetti driver complessi di grandi dimensioni che includevano il codice per tutti gli scenari e le configurazioni e ogni aggiornamento secondario richiedeva un aggiornamento per l'intero pacchetto driver. A partire da Windows 10, è possibile suddividere le funzionalità INF in più componenti, ognuno dei quali può essere eseguito in modo indipendente. Il pacchetto driver principale installato in un dispositivo è ora denominato pacchetto driver di base e viene gestito dal sistema nello stesso modo in cui i pacchetti driver sono stati gestiti prima di Windows 10. Per estendere la funzionalità di un pacchetto driver di base, fornire un'estensione INF in un pacchetto driver separato. Un'estensione INF:
Può essere fornita da una società diversa e aggiornata in modo indipendente dalla base INF.
Usa la stessa sintassi INF di base, ma può estendere l'INF di base per la personalizzazione o la specializzazione.
Migliora il valore del dispositivo, ma non è necessario per il funzionamento del pacchetto driver di base. In assenza dell'estensione INF, il sistema deve essere in grado di avviare e connettersi alla rete con solo il pacchetto driver di base. I dispositivi di input integrati nel sistema, ad esempio una tastiera, devono essere in grado di funzionare con almeno funzionalità di base senza estensioni INFS.
Deve essere un file INF universale.
A ogni dispositivo deve essere installato un pacchetto driver di base e, facoltativamente, può avere uno o più file INFS di estensione associati. Un'estensione INF non sarà in grado di installare in un dispositivo se non è presente alcun pacchetto driver di base da installare anche nel dispositivo.
Gli scenari tipici in cui è possibile usare un'estensione INF includono:
Modifica delle impostazioni fornite in un pacchetto driver di base, ad esempio la personalizzazione del nome descrittivo del dispositivo o la modifica di un'impostazione di configurazione hardware.
Creazione di uno o più componenti software specificando la direttiva INF AddComponent e fornendo un file INF del componente.
Impostazioni specifiche per il modello o il fattore di forma del sistema che migliorano l'esperienza o la funzionalità del dispositivo, come i dati di calibrazione hardware.
Aggiunta di un driver di filtro allo stack di dispositivi.
È possibile trovare il codice di esempio per alcuni di questi scenari negli esempi seguenti. Vedere anche DCH-Compliant Driver Package Example (Esempio di pacchetto del driver conforme a DCH) che descrive come l'esempio di driver universale DCHU usa le estensioni INFS.
Come lavorano insieme il pacchetto di driver di base e l'estensione INF
Durante l'installazione di un dispositivo, le impostazioni in un'estensione INF vengono applicate dopo le impostazioni in un pacchetto driver di base. Di conseguenza, se un'estensione INF e un pacchetto driver di base specificano la stessa impostazione, viene applicata la versione nell'estensione INF. Analogamente, se il pacchetto driver di base cambia, l'estensione INF rimane e viene applicata al nuovo pacchetto driver di base. Se su un dispositivo sono installati più INFs di estensione, non esiste un ordine predeterminato secondo cui vengono applicati, quindi un INF di estensione non può sovrascrivere in modo deterministico i valori forniti da un altro INF di estensione. Gli INF di estensione distinti destinati agli stessi dispositivi non devono tentare di modificare le stesse impostazioni.
È utile includere commenti nel pacchetto driver di base che descrivono quali voci possono essere sostituite da un INF di estensione, nonché da intervalli di valori di parametro e vincoli applicabili.
Specificare l'ExtensionId
Quando si scrive un'estensione INF, si genera un GUID speciale denominato ExtensionId, che è una voce nella sezione [Version] di INF.
Il sistema identifica i possibili INF di estensione per un dispositivo specifico associando l'ID hardware e gli ID compatibili del dispositivo a quelli specificati in un'estensione INF in una sezione Models che si applica a tale sistema.
Tra tutti i possibili INFS di estensione che specificano lo stesso valore ExtensionId , il sistema seleziona solo uno per installare e applica le relative impostazioni su quelle del pacchetto driver di base. La data del driver e la versione del driver specificata in INF vengono usate, in questo modo, per scegliere il singolo INF tra più file INF di estensione con lo stesso ExtensionId.
Per illustrare, si consideri lo scenario seguente che include un dispositivo ipotetico per il quale sono presenti tre file INF di estensione:
I valori ExtensionId visualizzati tra parentesi graffe sono {A}
e {B}
, e la classificazione di ciascun pacchetto driver di base è visibile nei nastri del banner.
In primo luogo, il sistema seleziona il pacchetto driver di base con la migliore classificazione e la versione più alta.
Successivamente, il sistema elabora i file INF di estensione disponibili. Due hanno il valore di ExtensionId{B}
, e uno ha il valore di ExtensionId{A}
. Dai primi due, diciamo che la data del conducente è la stessa. Il tiebreaker successivo è la versione del driver, quindi il sistema seleziona l'estensione INF con v2.0.
Viene selezionata anche l'estensione INF con il valore ExtensionId univoco. Il sistema applica il pacchetto driver di base per il dispositivo e quindi applica le due estensioni INFS per tale dispositivo.
I file INF di estensione vengono sempre applicati dopo il pacchetto del driver di base, ma non esiste un ordine determinato in cui vengono applicati i file INF dell'estensione.
Creazione di un'estensione INF
Di seguito sono riportate le voci necessarie per definire un INF come estensione INF.
Specificare questi valori per Class e ClassGuid nella sezione Version.Specify these values for Class and ClassGuid in the Version section. Per altre informazioni sulle classi di installazione, vedi Classi di installazione di dispositivi definite dal sistema disponibili per i fornitori.
[Version] ... Class = Extension ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57} ...
Specificare una voce ExtensionId nella sezione [Versione]. Generare un nuovo GUID per la versione iniziale di un'estensione INF o riutilizzare l'ultimo GUID per gli aggiornamenti successivi dell'estensione INIZIALE INF.
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
Un'organizzazione può usare solo un ExtensionID di cui è proprietario. Per informazioni sulla registrazione di un ID estensione, vedere Gestione degli invii di hardware nel dashboard di Windows Hardware Dev Center.
Se si sta aggiornando un'estensione INF, mantenere l'ExtensionId uguale e incrementare la versione e la data specificate dalla direttiva DriverVer. Per un determinato valore ExtensionId, PnP seleziona l'INF con il DriverVer più alto.
Nota
Se l'estensione INF è destinata a Windows 10 S, vedi Windows 10 in S Mode Driver Requirements per informazioni sull'installazione dei driver in tale versione di Windows.
Nella sezione Modelli INF specificare uno o più ID hardware e compatibili che corrispondono a quelli del dispositivo di destinazione. Questi ID hardware e compatibili non devono corrispondere a quelli del pacchetto driver di base. In genere, un'estensione INF elenca un ID hardware più specifico rispetto al pacchetto driver di base, con l'obiettivo di specializzare ulteriormente una configurazione del driver specifica. Ad esempio, il pacchetto driver di base potrebbe usare un ID hardware PCI in due parti, mentre l'estensione INF specifica un ID hardware PCI in quattro parti, come illustrato di seguito:
[DeviceExtensions.NTamd64] %Device.ExtensionDesc% = DeviceExtension_Install, PCI\VEN_XXXX&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XXXX
In alternativa, l'estensione INF potrebbe elencare lo stesso ID hardware del pacchetto del driver di base, ad esempio se il dispositivo è già di destinazione ristretta o se il pacchetto del driver di base elenca già l'ID hardware più specifico.
In alcuni casi, l'estensione INF potrebbe fornire un ID dispositivo meno specifico, ad esempio un ID compatibile, per personalizzare un'impostazione in un set più ampio di dispositivi.
Il targeting CHID può essere utilizzato se un ID hardware a quattro parti non è possibile o non è sufficientemente restrittivo.
Non definire un servizio con
SPSVCINST_ASSOCSERVICE
. Un'estensione INF non può fornire un driver di funzione per un dispositivo. Tuttavia, un'estensione INF può definire altri servizi, ad esempio un driver di filtro per il dispositivo. Per altre info sulla specifica dei servizi, vedi Direttiva INF AddService.
Nella maggior parte dei casi, si invierà un pacchetto di driver INF di estensione a Hardware Dev Center separatamente dal pacchetto driver di base. Per esempi su come impacchettare gli INFs delle estensioni e link al codice di esempio, vedere Esempio di pacchetto del driver conforme a DCH.
Il processo di convalida e invio del driver è lo stesso sia per i file INF di estensione che per i pacchetti driver di base. Per altre info, vedi Introduzione a Windows HLK.
Disinstallazione di un driver di estensione
Per rimuovere un pacchetto driver di estensione dal sistema e disinstallarlo da tutti i dispositivi che lo utilizzano, utilizzare il comando di PnPUtil con il flag . Ciò consente di disinstallare il pacchetto driver di estensione dai dispositivi senza rimuovere il pacchetto driver di base.
Individua il nome oem<#>.inf del pacchetto driver da disinstallare e utilizza pnputil /delete-driver oem<#>.inf /uninstall
.
pnputil /enum-drivers
può essere usato per identificare il nome oem<#>.inf appropriato.
Esempio 1: Uso di un'estensione INF per impostare il nome descrittivo del dispositivo
In uno scenario comune, un produttore di dispositivi (IHV) fornisce un pacchetto driver di base e quindi un generatore di sistema (OEM) fornisce un'estensione INF che integra e in alcuni casi sostituisce la configurazione e le impostazioni del pacchetto driver di base. Il frammento di codice seguente è un'estensione COMPLETA INF che mostra come impostare il nome descrittivo del dispositivo.
[Version]
Signature = "$WINDOWS NT$"
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider = %CONTOSO%
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
DriverVer = 05/28/2013,1.0.0.0
CatalogFile = delta.cat
PnpLockdown = 1
[Manufacturer]
%CONTOSO% = DeviceExtensions,NTamd64
[DeviceExtensions.NTamd64]
%Device.ExtensionDesc% = DeviceExtension_Install, PCI\VEN_XXXX&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XXXX
[DeviceExtension_Install]
; No changes
[DeviceExtension_Install.HW]
AddReg = FriendlyName_AddReg
[FriendlyName_AddReg]
HKR,,FriendlyName,, "New Device Friendly Name"
[Strings]
CONTOSO = "Contoso"
Device.ExtensionDesc = "Sample Device Extension"
Esempio 2: Uso di un'estensione INF per installare software aggiuntivo
Il frammento seguente è un file di estensione INF completo incluso nel toolkit di installazione dei driver package per i driver universali. In questo esempio viene utilizzata la direttiva INF AddComponent per creare componenti che installano un servizio e un eseguibile. Per altre informazioni sulle operazioni che è possibile eseguire in un componente INF, vedi Uso di un file INF del componente.
Per accedere a questo file online, vedere osrfx2_DCHU_extension.inx
.
;/*++
;
;Copyright (c) Microsoft Corporation. All rights reserved.
;
; THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
; KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
; PURPOSE.
;
;Module Name:
;
; osrfx2_DCHU_extension.INF
;
;Abstract:
;
; Extension inf for the OSR FX2 Learning Kit
;
;--*/
[Version]
Signature = "$WINDOWS NT$"
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider = %ManufacturerName%
ExtensionId = {3846ad8c-dd27-433d-ab89-453654cd542a}
CatalogFile = osrfx2_DCHU_extension.cat
DriverVer = 05/16/2017,15.14.36.721
PnpLockdown = 1
[Manufacturer]
%ManufacturerName% = OsrFx2Extension, NT$ARCH$
[OsrFx2Extension.NT$ARCH$]
%OsrFx2.ExtensionDesc% = OsrFx2Extension_Install, USB\Vid_045e&Pid_94aa&mi_00
%OsrFx2.ExtensionDesc% = OsrFx2Extension_Install, USB\Vid_0547&PID_1002
[OsrFx2Extension_Install.NT]
CopyInf=osrfx2_DCHU_usersvc.inf
[OsrFx2Extension_Install.NT.HW]
AddReg = OsrFx2Extension_AddReg
AddReg = OsrFx2Extension_COMAddReg
[OsrFx2Extension_AddReg]
HKR, OSR, "OperatingParams",, "-Extended"
HKR, OSR, "OperatingExceptions",, "x86"
; Add all registry keys to successfully register the
; In-Process ATL COM Server MSFT Sample.
[OsrFx2Extension_COMAddReg]
HKCR,AppID\ATLDllCOMServer.DLL,AppID,,"{00001111-aaaa-2222-bbbb-3333cccc4444}"
HKCR,AppID\{00001111-aaaa-2222-bbbb-3333cccc4444},,,"ATLDllCOMServer"
HKCR,ATLDllCOMServer.SimpleObject,,,"SimpleObject Class"
HKCR,ATLDllCOMServer.SimpleObject\CLSID,,,"{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}"
HKCR,ATLDllCOMServer.SimpleObject\CurVer,,,"ATLDllCOMServer.SimpleObject.1"
HKCR,ATLDllCOMServer.SimpleObject.1,,,"SimpleObject Class"
HKCR,ATLDllCOMServer.SimpleObject.1\CLSID,,,"{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084},,,"SimpleObject Class"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\InprocServer32,,%REG_EXPAND_SZ%,"%%SystemRoot%%\System32\ATLDllCOMServer.dll"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\InprocServer32,ThreadingModel,,"Apartment"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\ProgID,,,"ATLDllCOMServer.SimpleObject.1"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\Programmable,,%FLG_ADDREG_KEYONLY%
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\TypeLib,,,"{9B23EFED-A0C1-46B6-A903-218206447F3E}"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\VersionIndependentProgID,,,"ATLDllCOMServer.SimpleObject"
[OsrFx2Extension_Install.NT.Components]
AddComponent = osrfx2_DCHU_component,,OsrFx2Extension_ComponentInstall
AddComponent = osrfx2_DCHU_usersvc,,OsrFx2Extension_ComponentInstall_UserSvc
[OsrFx2Extension_ComponentInstall]
ComponentIds=VID_045e&PID_94ab
[OsrFx2Extension_ComponentInstall_UserSvc]
ComponentIds=VID_045e&PID_94ac
[Strings]
ManufacturerName = "Contoso"
OsrFx2.ExtensionDesc = "OsrFx2 DCHU Device Extension"
REG_EXPAND_SZ = 0x00020000
FLG_ADDREG_KEYONLY = 0x00000010
Per informazioni su come usare un'estensione INF per installare un driver di filtro, vedi Ordinamento dei driver di filtro del dispositivo.
Per migliorare l'estendibilità, è consigliabile che un IHV inserisca funzionalità facoltative in un modello INF di estensione.
Compatibilità con le versioni precedenti
Le modifiche apportate ai pacchetti driver di base e ai pacchetti driver di estensione devono essere testate accuratamente per garantire che le modifiche non interrompano la compatibilità con le versioni precedenti per i pacchetti driver esistenti. I pacchetti driver di base più recenti possono essere installati con pacchetti driver di estensione meno recenti e i pacchetti driver di estensione più recenti possono essere installati con pacchetti driver di base meno recenti. Queste situazioni non devono causare problemi di affidabilità o stabilità nel sistema.
Quando si gestisce un pacchetto driver di base che prevede di essere esteso da un pacchetto driver di estensione, seguire queste procedure consigliate:
- Documentare i parametri che il pacchetto driver di estensione può impostare per modificare il comportamento del pacchetto driver di base. Documentare i nomi dei parametri, le posizioni, gli intervalli di valori e i vincoli sia nei commenti di codice che in un documento di progettazione. Condividere questo documento di progettazione con i partner che scriveranno pacchetti driver di estensione per estendere il pacchetto driver di base. Le modifiche future apportate al pacchetto driver di base devono mantenere la compatibilità con gli intervalli specificati.
- Per supportare nuovi intervalli, aggiungere un parametro facoltativo (nessun valore predefinito).
Quando si gestisce un pacchetto driver di estensione, seguire queste procedure consigliate:
- Rispettare i vincoli stabiliti in un documento di progettazione dal proprietario del pacchetto driver di base per il modo in cui il pacchetto driver di estensione deve estendere il pacchetto driver di base.
Invio di un'estensione INF per la certificazione
Per informazioni dettagliate su come usare gli INF di estensione in Hardware Dev Center, vedere Uso degli INF di estensione nel dashboard di Windows Hardware Dev Center.
Articoli correlati
Uso degli INF di estensione nel Centro per i partner
Esempio di pacchetto driver conforme a DCH
Introduzione allo sviluppo di driver Windows
Toolkit di installazione dei pacchetti driver per i driver universali