Compartilhar via


Determinando por que o refletor encerrou o processo do host

Este tópico descreve como você pode analisar por que o refletor encerrou o processo de host do driver (WUDFHost.exe) ou por que o processo de host do driver falhou.

O motivo mais comum para o refletor encerrar o processo do host é a expiração dos tempos limite do processo do host UMDF.

É altamente recomendável fazer todo o desenvolvimento e teste do driver UMDF com um depurador de kernel anexado ao sistema de teste e habilitar o Verificador de Aplicativos (AppVerif.exe) no WUDFHost.exe. Use o comando a seguir, anexe um depurador de kernel e reinicialize.

AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe

Usando arquivos de despejo

Quando o driver UMDF falhar ou encontrar um problema, uma interrupção será relatada no depurador de kernel. Esses problemas devem ser depurados quando exceções no modo de usuário são relatadas no depurador de kernel. As quebras do depurador de kernel também são relatadas pelo WudfRd.sys antes de encerrar um processo de host de driver devido a um driver UMDF problemático (não responsivo). Você também encontrará logs e despejos de heap relatados no local a seguir. Para revisar os arquivos de despejo capturados pelo UMDF, siga estas etapas:

  1. Localize o arquivo .dmp mais recente no diretório %ProgramData%\Microsoft\WDF. Antes do UMDF 2.15 fornecido com o Windows 10 1507, o diretório de log estava em %windir%\system32\LogFiles\WUDF.

  2. Carregue o arquivo .dmp mais recente no depurador usando o seguinte comando:

    WinDbg -z <path to the .dmp file>
    
  3. Observe o estado dos threads no momento do encerramento.

Se você precisar de despejos de heap capturados, no momento do teste, defina os seguintes valores do Registro e reinicialize o sistema de teste antes de executar os testes. Você também pode examinar o histórico do Relatório de Erros do Windows no log de eventos do aplicativo do sistema em %SystemRoot%\System32\Winevt\Logs\Application.evtx

reg add "HKLM\Software\Microsoft\windows NT\CurrentVersion\Wudf" /v LogMinidumpType /t REG_DWORD /d 0x1122
reg add "HKLM\Software\Microsoft\windows NT\CurrentVersion\Wudf" /v LogEnable /t REG_DWORD /d 1 

Usando o depurador

Em outros casos, talvez seja necessário anexar a um destino de modo kernel ao vivo para determinar por que o refletor encerrou o processo de host. Para configurar sua sessão de depuração, siga as etapas descritas em Como habilitar a depuração de um driver UMDF.

Depois de estabelecer uma conexão, use !wdfkd.wdfumtriage para examinar os drivers UMDF, exiba os IRPs pendentes usando a extensão do depurador UMDF !wdfkd.wdfumirps (!wudfext.umirps para UMDF versão 1).

  • Se um IRP PnP ou um IRP de energia estiver pendente, determine por que o driver faz com que o IRP trave examinando threads no processo de host.

    Você pode usar a extensão !process para examinar os threads em execução no processo de host. O valor 0x1f flags mostra o rastreamento de pilha para cada thread.

    !processar <o processo addr> 0x1f

  • Se o driver não tiver concluído um IRP cancelado rapidamente, determine qual IRP foi cancelado e por que ele não foi concluído.

  • Se um IRP de limpeza ou fechamento estiver pendente, determine por que o IRP está demorando muito para ser processado.