Depurando um Co-Installer de instalação de dispositivo
Alguns pacotes de instalação de dispositivo de hardware incluem arquivos DLL conhecidos como co-instaladores, que auxiliam na instalação do dispositivo.
Você não pode depurar um co-instalador da mesma forma que outros módulos. Isso ocorre devido à maneira exclusiva pela qual um co-instalador é carregado e porque muitos cenários de instalação ocorrem automaticamente sem fornecer ao desenvolvedor a oportunidade de entrar no processo em execução.
Você pode resolve esse problema instalando programaticamente o dispositivo. Anexar um depurador ao aplicativo que instala o dispositivo permite o acesso ao próprio co-instalador. A maneira mais simples de fazer isso é instalar ou reinstalar o dispositivo usando a ferramenta DevCon incluída no WDK (Windows Driver Kit). Em seguida, você pode depurar o co-instalador com o WinDbg.
Use o procedimento a seguir para realizar essa tarefa. Este procedimento pressupõe que você desenvolveu um pacote de instalação de driver de trabalho para seu dispositivo que usa um co-instalador. Ele também pressupõe que você tenha a cópia mais recente do WDK. Para obter informações sobre como desenvolver drivers, pacotes de instalação de driver e co-instaladores de instalação do driver, consulte a documentação do WDK.
Depurando um co-instalador usando DevCon e WinDbg
Conecte o dispositivo de hardware.
Cancele o assistente Novo Hardware Encontrado .
Inicie o WinDbg.
Selecione Abrir Executável no menu Arquivo do WinDbg.
Na caixa de diálogo Abrir Executável , faça o seguinte:
Na caixa de texto seleção de arquivo, selecione a ferramenta DevCon (Devcon.exe). Para isso, navegue até a pasta de instalação do WDK, abra as ferramentas de subdiretório e abra o devcon subdiretório e abra o subdiretório que corresponde à arquitetura do processador do computador e selecione Devcon.exe. Clique apenas uma vez no Devcon.exe e ainda não pressione Abrir.
Na caixa de texto Argumentos, insira o seguinte texto, em que INFFile é o nome do arquivo de informações de instalação do dispositivo (INF) e HardwareID é a ID de hardware do dispositivo:
update INFFile HardwareID
Na caixa de texto Iniciar diretório , insira o caminho para o pacote de instalação do dispositivo.
Clique em Abrir.
O processo de depuração será iniciado e o WinDbg entrará no processo de DevCon antes que o DevCon instale o driver.
Configure o depurador para invadir o processo de co-instalador quando ele for carregado. Você pode fazer isso por um dos seguintes métodos:
Na janela Comando do Depurador, use o comando sxe (Definir Exceções) seguido de ld: e, em seguida, o nome do co-instalador, excluindo a extensão de arquivo. Não deve haver espaço após os dois-pontos Por exemplo, se o nome do co-instalador for mycoinst.dll, você usará o seguinte comando:
sxe ld:mycoinst
Selecione Filtros de Eventos no menu Depurar do WinDbg. Na caixa de diálogo Filtros de Eventos , selecione Carregar módulo. Em Execução, selecione Habilitado. Em Continuar, selecione Não Tratado. Clique no botão Argumento e, na caixa de texto, insira o nome do co-instalador, excluindo a extensão de arquivo (por exemplo, insira "mycoinst" para mycoinst.dll). Clique em OK e em Fechar.
Retome a execução pressionando F5 ou inserindo o comando g (Go) na janela Comando do Depurador.
Quando o co-instalador for carregado, a execução será interrompida novamente no depurador. Neste ponto, você pode definir quaisquer pontos de interrupção adicionais necessários.
Limitações deste procedimento
Em determinados casos, a execução de um pacote de instalação do dispositivo em DevCon pode resultar em um comportamento ligeiramente diferente do de uma instalação PnP, devido a diferentes tokens de segurança e similares. Se você estiver tentando depurar um problema específico em seu co-instalador, é possível que esse problema não seja replicado se DevCon estiver envolvido. Portanto, antes de usar essa técnica, você deve usar o DevCon para instalar o driver sem um depurador anexado para verificar se esse problema existe nos cenários PnP e DevCon.
Se o problema desaparecer sempre que DevCon iniciar a instalação, você precisará depurar seu co-instalador sem usar o DevCon. Uma maneira de fazer isso é usar a ferramenta TList com a opção /m para determinar qual processo está carregando o módulo do co-instalador e anexando o depurador a esse processo.