Selezione dei pacchetti driver in Windows

La comprensione del processo di selezione di un pacchetto driver in Windows può aiutare a comprendere alcune dinamiche in apparenza anomale e soprattuto alcuni errori in che possono sembrare incomprensibili.

Prima di addentrarmi nell’analisi del processo di selezione di un pacchetto driver, descrivo uno scenario di esempio in cui la comprensione di questo processo aiuta ad evitare errori subdoli.

Scenario di esempio:

Attività:

Installazione da parte di un client windows di una stampante Xerox configurata su un printer server Windows tramite un driver Univarsale.

Informazioni rilevanti sull’infrastruttura:

  • Sul client Windows la chiave di registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DevicePath è stata modificata per consentire la ricerca dei pacchetti driver oltre che nello store locale (%systemroot%\inf) anche su una share (\\fileserver.domain.it\drivers$). Ariguardo si veda il mio post Installazione centralizzata dei driver – DevAdmin Blog.
  • Nello specifico la chiave DevicePath è impostata come segue:
    %systemroot%\inf;\\fileserver.domain.it\drivers$
  • Sulla share contenente i driver è presente anche un driver Universale per una stampante Lexmark utilizzata nell’infrastruttura la cui installazione è sempre gestita tramite USB.

Errore:

Quando si prova a connettere la stampante di rete Xerox sul client Windows il driver viene regolarmente scaricato nello store locale (%systemroot%\inf), ma poi l’installazzione fallisce con il seguente errore:

Nome registro: Microsoft-Windows-PrintService/Admin
Origine: Microsoft-Windows-PrintService
ID evento: 215
Categoria attività:Installazione di un driver della stampante in corso
Livello: Errore
Parole chiave: Configurazione stampante,Stampante
Descrizione:
Installazione del driver della stampante – non riuscita, codice di errore 0x490, HRESULT 0x80070490. Per informazioni sul contesto, vedere i dati utente relativi all’evento.

 

Il motivo dell’errore è causato dal presenza nella share \\fileserver.domain.it\drivers$ del driver universale per la stampante Lexmark. Avevo già discusso di questo errore nel post Errore 0x80070490 o 0x00000490 quando si tenta di connettere un stampante su un printer server – DevAdmin Blog.

Per comprendere perchè un driver per stampante Lexmark causa un errore durante l’installazione di una stampante di rete Xerox occorre appunto analizzare nel dettaglio il processo di selezione dei pacchetti driver in Windows.

Il processo con cui Windows seleziona il pacchetto d’installazione del driver è descritto in How Windows Selects a Driver Package for a Device – Windows drivers | Microsoft Learn.

Nello specifico quando occorre installare un dispositivo Windows deve trovare un pacchetto driver corrispondente da installare e questo processo di corrispondenza in Windows 8 e successivi avviene in due fasi.

Prima fase

  • Windows scarica tutti i pacchetti driver corrispondenti da Windows Update che rappresentano una corrispondenza migliore per il dispositivo rispetto a quello attualmente presente nel sistema e li inserisce nell’archivio driver.
  • A partire da Windows 10 versione 1703 se è già presente un pacchetto driver corrispondente per il dispositivo nell’archivio driver, il sistema non esegue ricerche in Windows Update fino alla successiva analisi giornaliera pianificata regolarmente, che potrebbe avvenire fino a 24 ore dal momento in cui si installato il dispositivo.

Seconda fase:

  • Windows cerca i pacchetti di driver precaricati nei percorsi specificati dal valore del registro di sistema indicato come DevicePath. Il valore devicePath del Registro di sistema si trova nella sottochiave seguente: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion e per impostazione predefinita, il valore DevicePath specifica la directory %SystemRoot%\INF.
  • Se Windows trova un pacchetto driver più corrispondente in tali posizioni rispetto a quanto inizialmente installato, Windows sostituisce il pacchetto driver installato dall’archivio driver con la corrispondenza migliore.

In Windows 10, versione 1709 e successive, Windows Update (WU) offre il pacchetto driver più adatto, che non è necessariamente quello più recente. Il processo di selezione del pacchetto del driver WU considera l’ID hardware, la data/versione e la categoria critica/automatica/facoltativa. Wu assegna la più alta priorità ai pacchetti driver critici o automatici. Se non viene trovato un pacchetto driver critico/automatico corrispondente, WU cerca i pacchetti driver facoltativi. Di conseguenza, un pacchetto driver critico meno recente di valore uguale altrimenti ha la precedenza su un pacchetto driver facoltativo più recente.

A partire da Windows 10, versione 2004, Windows Update (WU) offre automaticamente solo il miglior pacchetto driver critico/automatico disponibile, cercando sia nel computer che in WU.

Quindi quello che successo nello scenario che ho ortato ad esempio è che il sistema ha identificato un driver come “migliore” o “necessario” tramite DevicePath, ma non è riuscito a trovare un file correlato o la firma non è valida per quel contesto.

Il motivo per cui il driver Lexmark viene preso in considerazione per una Xerox risiede nel file .inf. I driver universali hanno entrambi dichiarato compatibilità con un ID generici, anziché solo con ID specifici (Hardware ID). Se entrambi i driver (Xerox e Lexmark) dichiarano nel loro file INF di poter gestire una classe generica di dispositivi di stampa, Windows li mette entrambi in lista. Se, per un paradosso di metadati nel file INF, il driver Lexmark ottiene un punteggio di “Signature” o “Feature Score” migliore o uguale, Windows tenta di caricarlo andando in conflitto durante la validazione.

In altre parole se il driver Lexmark ha un Identifier Score basato su un ID compatibile molto generico che “matcha” con la richiesta del Print Server, Windows tenta di usarlo. Poiché è un driver di un altro Vendor, la fase di Driver Installation (Finish-Install actions) fallisce perché i file binari richiamati dall’INF non corrispondono alla periferica reale o mancano nel pacchetto.

Quindi l’utilizzo di DevicePath deve essere gestito attentamente e se le stampanti sono installate tramite Printer Server i percosi di ricerca aggiuntivi oltre allo store locale (%systemroot%\inf) non devono contenere driver di stampanti.

Per ulteriori informazioni sull’errore 0x80070490 è possibile fare riferimento a Troubleshoot Windows Update Error 0x80070490 – Windows Server | Microsoft Learn dove vengono riportate altre cause possibili e come risolvere tali issue.

1 commento su “Selezione dei pacchetti driver in Windows”

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.