Éviter les redémarrages du système pendant l’installation des appareils et la Mises à jour des pilotes
Pour éviter les redémarrages du système pendant l’installation de l’appareil, utilisez les règles suivantes :
N’utilisez jamais les entrées Redémarrer ou Redémarrer dans les sections INF DDInstall. Ces directives ont été initialement fournies à des fins de compatibilité avec Windows 9x/Me et ne doivent pas être utilisées pour Windows 2000 et les versions ultérieures de Windows.
N’utilisez pas d’indicateurs de COPYFLG_FORCE_FILE_IN_USE ou de COPYFLG_REPLACE_BOOT_FILE avec les directives Inf CopyFiles, sauf si cela est absolument nécessaire.
Faites en sorte que tous les fichiers de votre package de pilotes soient exécutés à partir du magasin de pilotes.
Si les fichiers du package de pilotes ne sont pas exécutés à partir du magasin de pilotes, attribuez un nouveau nom de fichier à chaque nouvelle version d’un programme d’installation ou d’un co-programme d’installation de classe ou d’une DLL de service. Cela évite d’avoir à redémarrer le système si une version antérieure est en cours d’utilisation. (En fait, si un nouveau nom de fichier n’est pas utilisé pour un programme d’installation de classe ou un co-programme d’installation de classe mis à jour, ces nouveaux fichiers ne seront pas utilisés pour l’installation.)
Pour mettre à jour les pilotes d’un appareil, suivez les règles répertoriées sous Mise à jour des fichiers de pilotes.
Réduction des redémarrages lors de la mise à jour des pilotes sauvegardés par fichier
Avant Windows 10, tous les pilotes en mode noyau étaient sauvegardés par le fichier de pagination du système. Par conséquent, un fichier binaire de pilote peut être remplacé sur le disque même pendant l’exécution du pilote.
Pour améliorer les performances, en commençant par Windows 10, la plupart des pilotes sans démarrage sont plutôt soutenus par le fichier binaire du pilote sur le disque.
Les types de démarrage de pilotes qui sont maintenant sauvegardés par fichier sont les suivants :
SERVICE_SYSTEM_START (0x00000001)
SERVICE_AUTO_START (0x00000002)
SERVICE_DEMAND_START (0x00000003)
Les pilotes de démarrage continuent d’être sauvegardés par le fichier de pagination.
Pour mettre à jour un pilote sauvegardé par fichier, utilisez les meilleures pratiques suivantes. Sinon, la mise à jour peut nécessiter deux redémarrages, l’un pour remplacer le fichier et l’autre pour charger la nouvelle version du pilote.
Si vous utilisez un fichier INF, procédez comme suit :
Modifiez la section CopyFiles de votre fichier INF de pilote pour utiliser COPYFLG_IN_USE_RENAME, comme suit :
[MyDriver_Install.NT] CopyFiles=MyDriverCopy [MyDriverCopy] MyDriver.sys,,,0x00004000 ; COPYFLG_IN_USE_RENAME
Si vous utilisez cet indicateur, Windows tente de remplacer le fichier de pilote sur le disque. Pour plus d’informations, consultez Directive INF CopyFiles.
Si l’INF est destiné à un pilote PnP, pendant l’installation du périphérique, Windows tente de décharger le pilote en cours d’exécution et de redémarrer les appareils qui l’utilisent, afin de récupérer la nouvelle version du pilote. En cas d’échec, l’installation de l’appareil indique que le système doit être redémarré.
Si l’inf n’est pas destiné à un pilote PnP et que vous utilisez une méthode telle que InstallHInfSection pour traiter l’INF, arrêtez et redémarrez manuellement le pilote :
Fermez tous les handles ouverts au pilote, puis arrêtez-le à l’aide de l’une des méthodes suivantes :
sc.exe stop <mydriver>
ControlService(SERVICE_CONTROL_STOP)
Pour plus d’informations, consultez Fonction ControlService.
Si vous n’utilisez pas de fichier INF, procédez comme suit :
Arrêtez le pilote, comme décrit ci-dessus. Remplacez l’ancien fichier binaire du pilote par le nouveau.
Si vous ne pouvez pas arrêter le pilote, renommez le fichier existant, copiez le nouveau fichier en place et configurez le fichier existant pour qu’il soit supprimé à l’avenir (par exemple, en utilisant MoveFileEx avec l’indicateur MOVEFILE_DELAY_UNTIL_REBOOT ). Pour commencer à utiliser la nouvelle version du pilote, le système doit être redémarré.