Evitare i riavvii del sistema durante le installazioni dei dispositivi e il driver Aggiornamenti
Per evitare il riavvio del sistema durante le installazioni dei dispositivi, usare le regole seguenti:
Non usare mai le voci di riavvio o riavvio nelle sezioni INF DDInstall. Queste direttive sono state originariamente fornite per la compatibilità con Windows 9x/Me e non devono essere usate per Windows 2000 e versioni successive di Windows.
Non usare flag COPYFLG_FORCE_FILE_IN_USE o COPYFLG_REPLACE_BOOT_FILE con direttive COPYFiles INF, a meno che non sia assolutamente necessario.
Rendere tutti i file nel pacchetto driver essere eseguiti dall'Archivio driver.
Se i file nel pacchetto driver non vengono eseguiti dall'archivio driver, assegnare un nuovo nome file a ogni nuova versione di un programma di installazione di classe o di un programma di installazione condivisa o a una DLL del servizio. In questo modo si evita la necessità di un riavvio del sistema se è in uso una versione precedente. Infatti, se non viene usato un nuovo nome di file per un programma di installazione di classe o un programma di installazione di classe aggiornato, questi nuovi file non verranno usati per l'installazione.
Per aggiornare i driver di un dispositivo, seguire le regole elencate in Aggiornamento dei file del driver.
Riduzione al minimo dei riavvii durante l'aggiornamento dei driver supportati da file
Prima di Windows 10, tutti i driver in modalità kernel sono stati supportati dal file di paging del sistema. Di conseguenza, un file binario del driver può essere sovrascritto su disco anche durante l'esecuzione del driver.
Per migliorare le prestazioni, a partire da Windows 10, la maggior parte dei driver non di avvio è supportata dal file binario del driver su disco.
I tipi di avvio dei driver ora supportati da file includono:
SERVICE_SYSTEM_START (0x00000001)
SERVICE_AUTO_START (0x00000002)
SERVICE_DEMAND_START (0x00000003)
I driver di avvio continuano a essere supportati dal file di paging.
Per aggiornare un driver supportato da file, usare le procedure consigliate seguenti. In caso contrario, l'aggiornamento potrebbe richiedere due riavvii, uno per sostituire il file e un secondo per caricare la nuova versione del driver.
Se si usa un file INF, seguire questa procedura:
Modificare la sezione CopyFiles del file INF del driver per usare COPYFLG_IN_USE_RENAME, come indicato di seguito:
[MyDriver_Install.NT] CopyFiles=MyDriverCopy [MyDriverCopy] MyDriver.sys,,,0x00004000 ; COPYFLG_IN_USE_RENAME
Se si usa questo flag, Windows tenta di sostituire il file del driver su disco. Per altre info, vedi Direttiva COPYFiles INF.
Se INF è per un driver PnP, durante l'installazione del dispositivo Windows tenta di scaricare il driver in esecuzione e riavviare i dispositivi che lo usano, per recuperare la nuova versione del driver. In caso di errore, l'installazione del dispositivo indica che il sistema deve essere riavviato.
Se INF non è per un driver PnP e si usa un metodo come InstallHInfSection per elaborare INF, arrestare e riavviare manualmente il driver:
Chiudere tutti gli handle aperti al driver e quindi arrestare il driver usando uno dei metodi seguenti:
sc.exe stop <mydriver>
ControlService(SERVICE_CONTROL_STOP)
Per altre informazioni, vedere Funzione ControlService.
Se non si usa un file INF, seguire questa procedura:
Arrestare il driver, come descritto in precedenza. Sostituire il file binario del driver precedente con quello nuovo.
Se non è possibile arrestare il driver, rinominare il file esistente, copiare il nuovo file sul posto e configurare il file esistente da eliminare in futuro(ad esempio, usando MoveFileEx con il flag MOVEFILE_DELAY_UNTIL_REBOOT ). Per iniziare a usare la nuova versione del driver, il sistema dovrà essere riavviato.