Evitando reinicializações do sistema durante instalações de dispositivo e Atualizações de driver
Para evitar reinicializações do sistema durante as instalações do dispositivo, use as seguintes regras:
Nunca use as entradas Reinicializar ou Reiniciar nas seções INF DDInstall. Essas diretivas foram originalmente fornecidas para compatibilidade com o Windows 9x/Me e não devem ser usadas para o Windows 2000 e versões posteriores do Windows.
Não use sinalizadores de COPYFLG_FORCE_FILE_IN_USE ou COPYFLG_REPLACE_BOOT_FILE com diretivas CopyFiles do INF, a menos que seja absolutamente necessário.
Faça com que todos os arquivos em seu pacote de driver sejam executados no Repositório de Driver.
Se os arquivos no pacote de driver não forem executados no Repositório de Driver, atribua um novo nome de arquivo a cada nova versão de um instalador de classe ou co-instalador ou uma DLL de serviço. Isso evita a necessidade de uma reinicialização do sistema se uma versão mais antiga estiver em uso. (Na verdade, se um novo nome de arquivo não for usado para um instalador de classe ou co-instalador de classe atualizado, esses novos arquivos não serão usados para a instalação.)
Para atualizar os drivers de um dispositivo, siga as regras listadas em Atualizando arquivos de driver.
Minimizando reinicializações ao atualizar drivers com suporte de arquivo
Antes de Windows 10, todos os drivers no modo kernel eram apoiados pelo arquivo de paginação do sistema. Como resultado, um binário de driver pode ser substituído no disco mesmo enquanto o driver estava em execução.
Para melhorar o desempenho, começando com Windows 10, a maioria dos drivers não inicializados são apoiados pelo binário do driver no disco.
Os tipos de início do driver que agora têm suporte de arquivo incluem:
SERVICE_SYSTEM_START (0x00000001)
SERVICE_AUTO_START (0x00000002)
SERVICE_DEMAND_START (0x00000003)
Os drivers de inicialização continuam a ser apoiados pelo arquivo de paginação.
Para atualizar um driver com suporte de arquivo, use as práticas recomendadas a seguir. Caso contrário, a atualização pode exigir duas reinicializações, uma para substituir o arquivo e uma segunda para carregar a nova versão do driver.
Se você estiver usando um arquivo INF, siga estas etapas:
Modifique a seção CopyFiles do arquivo INF do driver para usar COPYFLG_IN_USE_RENAME, da seguinte maneira:
[MyDriver_Install.NT] CopyFiles=MyDriverCopy [MyDriverCopy] MyDriver.sys,,,0x00004000 ; COPYFLG_IN_USE_RENAME
Se você usar esse sinalizador, o Windows tentará substituir o arquivo de driver no disco. Para obter mais informações, consulte Diretiva CopyFiles do INF.
Se o INF for para um driver PnP, durante a instalação do dispositivo, o Windows tentará descarregar o driver em execução e reiniciar os dispositivos que o usam, a fim de pegar a nova versão do driver. Se isso falhar, a instalação do dispositivo indicará que o sistema deve ser reinicializado.
Se o INF não for para um driver PnP e você estiver usando um método como InstallHInfSection para processar o INF, interrompa e reinicie manualmente o driver:
Feche todas as alças abertas para o driver e interrompa o driver usando um dos seguintes métodos:
sc.exe stop <mydriver>
ControlService(SERVICE_CONTROL_STOP)
Para obter mais informações, consulte Função ControlService.
Se você não estiver usando um arquivo INF, use estas etapas:
Pare o driver, conforme descrito acima. Substitua o arquivo binário do driver antigo pelo novo.
Se você não conseguir parar o driver, renomeie o arquivo existente, copie o novo arquivo em vigor e configure o arquivo existente a ser excluído no futuro (por exemplo, usando MoveFileEx com o sinalizador MOVEFILE_DELAY_UNTIL_REBOOT ). Para começar a usar a nova versão do driver, o sistema precisará ser reiniciado.