Operazione di co-installazione

Nota

Le funzionalità descritte in questa sezione non sono supportate e i pacchetti driver che li contengono non riceveranno più una firma Microsoft. Vedere Uso di un file INF universale.

I co-installer vengono chiamati da SetupAPI, come illustrato nella figura seguente.

diagramma che illustra come i co-installer partecipano all'installazione del dispositivo.

Le caselle non ombreggiate rappresentano i componenti forniti dal sistema operativo per le classi di configurazione del dispositivo fornite dal sistema. Le caselle ombreggiate rappresentano i componenti che è possibile fornire. Se si crea una classe di configurazione del dispositivo personalizzata, è anche possibile specificare un programma di installazione della classe. Tuttavia, raramente è necessario creare una nuova classe di configurazione del dispositivo, perché quasi ogni dispositivo può essere associato a una delle classi di configurazione del dispositivo fornite dal sistema. Per altre informazioni sui componenti di Windows, vedere Panoramica dell'installazione del dispositivo.

I co-installer possono essere forniti per un dispositivo specifico (co-installer specifico del dispositivo) o per una classe di installazione del dispositivo (co-programma di installazione della classe). SetupAPI chiama un co-programma di installazione specifico del dispositivo solo quando si installa il dispositivo per cui è registrato il co-programma di installazione. Il sistema operativo e i fornitori possono registrare zero o più co-installer specifici del dispositivo per un dispositivo. SetupAPI chiama un co-installer di classe durante l'installazione di qualsiasi dispositivo della classe di installazione del dispositivo per cui è registrato il co-programma di installazione. Il sistema operativo e i fornitori possono registrare uno o più co-installer di classe per una classe di installazione del dispositivo. Inoltre, è possibile registrare un co-installer di classe per una o più classi di installazione.

Le applicazioni di installazione di dispositivi Windows e personalizzate installano i dispositivi chiamando SetupDiCallClassInstaller con codici di funzione di installazione del dispositivo (codici DIF).

Durante la configurazione in modalità GUI, il sistema operativo chiama SetupDiCallClassInstaller con codici DIF per rilevare i dispositivi non PnP presenti nel sistema. Un IHV fornisce in genere un co-installer per eseguire questa azione per i dispositivi non PnP rilasciati dall'IHV.

Per ogni richiesta DIF, SetupDiCallClassInstaller chiama tutti i co-installer di classe registrati per la classe di installazione del dispositivo, tutti i co-installer del dispositivo registrati per il dispositivo specifico e quindi il programma di installazione della classe fornito dal sistema per la classe di installazione del dispositivo, se presente.

Le applicazioni di installazione del dispositivo personalizzate devono chiamare SetupDiCallClassInstaller anziché chiamare direttamente un programma di installazione o un programma di installazione di classi. Questa funzione garantisce che tutti i co-installer registrati siano chiamati in modo appropriato.

I co-installer di classe vengono in genere registrati prima dell'installazione del dispositivo e i co-installer specifici del dispositivo vengono registrati come parte dell'installazione del dispositivo. I co-installer di classe vengono quindi aggiunti in genere all'elenco di co-installer quando viene creato per la prima volta e vengono chiamati per tutte le richieste DIF durante l'installazione del dispositivo.

Il sistema operativo aggiunge co-installer specifici del dispositivo all'elenco di co-installer dopo che è stata completata una richiesta di DIF_REGISTER_COINSTALLERS per il dispositivo (o SetupDiRegisterCoDeviceInstallers ). I co-installer specifici del dispositivo non partecipano alle richieste DIF seguenti:

DIF_ALLOW_INSTALL

DIF_INSTALLDEVICEFILES

DIF_SELECTBESTCOMPATDRV

Solo un co-installer di classe (non un co-programma di installazione specifico del dispositivo) può rispondere alle richieste DIF seguenti:

DIF_DETECT

DIF_FIRSTTIMESETUP

DIF_NEWDEVICEWIZARD_PRESELECT

DIF_NEWDEVICEWIZARD_SELECT

DIF_NEWDEVICEWIZARD_PREANALYZE

DIF_NEWDEVICEWIZARD_POSTANALYZE

Un co-programma di installazione del dispositivo non è appropriato in questi contesti, perché un particolare dispositivo non è ancora stato identificato o in questa fase iniziale dell'installazione o i co-installer del dispositivo non sono ancora stati registrati.

Nella figura seguente viene illustrato l'ordine in cui SetupDiCallClassInstaller chiama co-installer e un programma di installazione della classe dopo la registrazione di qualsiasi co-installer specifico del dispositivo.

diagramma della chiamata di co-installer per l'elaborazione e la post-elaborazione delle richieste di dif.

Nell'esempio illustrato dalla figura precedente, due co-installer di classe vengono registrati per la classe di installazione del dispositivo e un co-programma di installazione specifico del dispositivo viene registrato per il dispositivo. I passaggi seguenti corrispondono ai numeri cerchiati nella figura precedente:

  1. SetupDiCallClassInstaller chiama il co-installer di prima classe, specificando un codice DIF che indica la richiesta di installazione elaborata (DIF_INSTALLDEVICE, in questo esempio). Il co-programma di installazione ha la possibilità di partecipare alla richiesta di installazione. In questo esempio, il primo co-programma di installazione della classe registrata restituisce NO_ERROR.

  2. SetupDiCallClassInstaller, a sua volta, chiama eventuali co-installer di classe registrati aggiuntivi. In questo esempio, il co-programma di installazione di seconda classe restituisce ERROR_DI_POSTPROCESSING_REQUIRED, che richiede che il co-installer venga chiamato in seguito per la post-elaborazione.

  3. SetupDiCallClassInstaller chiama tutti i co-installer specifici del dispositivo registrati.

  4. Dopo aver chiamato tutti i co-installer registrati, SetupDiCallClassInstaller chiama il programma di installazione della classe fornito dal sistema, se ne esiste uno per la classe di installazione del dispositivo. In questo esempio il programma di installazione della classe restituisce ERROR_DI_DO_DEFAULT, ovvero un valore restituito tipico per i programmi di installazione della classe.

  5. SetupDiCallClassInstaller chiama il gestore predefinito per la richiesta di installazione, se presente. DIF_INSTALLDEVICE ha un gestore predefinito, SetupDiInstallDevice, che fa parte di SetupAPI.

  6. SetupDiCallClassInstaller chiama eventuali co-installer che hanno richiesto la post-elaborazione. In questo esempio, il co-programma di installazione della seconda classe ha richiesto la post-elaborazione.

La post-elaborazione del co-programma di installazione è simile alle routine IoCompletion driver, ad eccezione del fatto che il co-installer viene chiamato una seconda volta al punto di ingresso singolo. Quando SetupDiCallClassInstaller chiama un co-installer per l'elaborazione post-elaborazione, imposta PostProcessing su TRUE e InstallResult sul valore appropriato nel parametro Context . In questo esempio , Context. InstallResult è NO_ERROR perché il gestore predefinito è stato eseguito correttamente.

Per la post-elaborazione, SetupDiCallClassInstaller chiama co-installer in ordine inverso. Se tutti i co-installer nella figura precedente erano stati restituiti ERROR_DI_POSTPROCESSING_REQUIRED, SetupDiCallClassInstaller chiamerebbe Device_Coinstaller_1 prima per la post-elaborazione, seguita da Class_Coinstaller_2 e quindi Class_Coinstaller_1. I programmi di installazione delle classi non richiedono post-elaborazione; solo i co-installer fanno.

Un co-installer che richiede post-elaborazione viene chiamato anche se un co-installer precedente ha avuto esito negativo nella richiesta di installazione.