Partilhar via


Evitando reinicializações do sistema durante instalações de dispositivos e atualizações de drivers

Para evitar reinicializações do sistema durante as instalações do dispositivo, use as seguintes regras:

  • Nunca use as entradas Reboot ou Restart 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 COPYFLG_FORCE_FILE_IN_USE ou COPYFLG_REPLACE_BOOT_FILE com diretivas INF CopyFiles, a menos que seja absolutamente necessário.

  • Faça com que todos os arquivos em seu pacote de driver sejam executados a partir do Driver Store.

  • Se os arquivos no pacote de driver não forem executados a partir do Driver Store, atribua um novo nome de arquivo a cada nova versão de um instalador de classe ou coinstalador ou uma DLL de serviço. Isso evita a necessidade de reiniciar o 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 atualizado ou coinstalador de classe, 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 backup de arquivos

Antes do Windows 10, todos os drivers de modo kernel eram apoiados pelo arquivo de paginação do sistema. Como resultado, um ficheiro binário de controlador poderia ser substituído no disco mesmo enquanto o controlador estava em execução.

Para melhorar o desempenho, a partir do Windows 10, a maioria dos drivers que não iniciam a inicialização são apoiados pelo binário do driver no disco.

Os tipos de início de driver que agora são baseados em ficheiros 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 backup de arquivo, use as seguintes práticas recomendadas. Caso contrário, a atualização pode exigir duas reinicializações, uma para substituir o arquivo e outra para carregar a nova versão do driver.

Se estiver a utilizar um ficheiro INF, siga estes passos:

  1. Modifique a seção CopyFiles do arquivo INF do driver para usá 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 INF CopyFiles.

  2. Se o INF for para um driver PnP, durante a instalação do dispositivo, o Windows tenta 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 indica que o sistema deve ser reinicializado.

  3. Se o INF não for para um driver PnP e você estiver usando um método como InstallHInfSection para processar o INF, pare e reinicie manualmente o driver:

    • Feche todas as alças abertas para o driver e, em seguida, pare 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:

  1. Pare o motorista, conforme descrito acima. Substitua o arquivo binário do driver antigo pelo novo.

  2. Se você não puder parar o driver, renomeie o arquivo existente, copie o novo arquivo no local e configure o arquivo existente para 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.

Seções Página-File-Backed eFile-Backed

O que determina quando um driver é carregado