Compartilhar via


Determinando por que o refletor encerrou o processo de 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 do host do driver falhou.

O motivo mais comum para o refletor encerrar o processo de host é a expiração de tempos limite do processo de 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 de modo de usuário são relatadas no depurador de kernel. As quebras do depurador de kernel também são relatadas por WudfRd.sys antes de encerrar um processo de host do 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 examinar 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 que foi enviado com Windows 10 1507, o diretório de log está 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. Examine o estado dos threads no momento da terminação.

Se você precisar de despejos de heap capturados, no momento do teste defina os seguintes valores do Registro e reinsira seu sistema de teste antes de executar testes. Você também pode examinar Relatório de Erros do Windows histórico do 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 dinâmico 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 de 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 seja travado 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 de sinalizadores 0x1f mostra o rastreamento de pilha para cada thread.

    !process process<process 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.