Partilhar via


Solução de problemas de falhas de driver UMDF 2.0

A partir do User-Mode Driver Framework (UMDF) versão 2, você pode usar um subconjunto dos comandos de extensão do depurador implementados no Wdfkd.dll para depurar um driver UMDF. Este artigo descreve os comandos que você pode usar para solucionar problemas de driver UMDF.

Determinando por que um driver UMDF 2.0 caiu

Se o processo de host do driver for encerrado, o driver pode ter um problema em um retorno de chamada que resulta na ultrapassagem do limite de tempo limite do host #B0 #C1 limite. Nesse caso, o refletor encerra o processo de host do driver.

Para investigar, primeiro configure uma sessão de depuração em modo de núcleo conforme descrito em "Como Ativar a Depuração de um Driver UMDF". É altamente recomendável fazer todo o desenvolvimento e teste do seu driver UMDF com um depurador do kernel conectado ao sistema de teste e ativar o Application Verifier (AppVerif.exe) no WUDFHost.exe. Use o seguinte comando, anexe um depurador do kernel e reinicie.

AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
  • Se HostFailKdDebugBreak estiver definido, o refletor interrompe no depurador de modo de núcleo quando o limite de tempo for excedido. Na saída do depurador, você vê várias sugestões sobre como começar, incluindo links que você pode selecionar. Por exemplo:

    **** Problem detected in UMDF driver "WUDFOsrUsbFx2". !process 0xFFFFE0000495B080 0x1f, !devstack 0xFFFFE000032BFA10, Problem code 3 ****
    **** Dump UMDF driver image name and stack: !wdfkd.wdfumdevstack 0x000000BEBB49AE20
    **** Dump UM Irps for this stack: !wdfkd.wdfumirps 0x000000BEBB49AE20
    **** Dump UMDF trace log: !wmitrace.logdump WUDFTrace
    **** Helpful UMDF debugger extension commands: !wdfkd.wdfhelp
    **** Note that driver host process may get terminated if you go past this break, making it difficult to debug the problem!
    
  • Use !analyze para mostrar informações sobre a falha e outros comandos de extensão UMDF que você pode tentar. Este comando pode ajudar com falhas do verificador UMDF ou exceções UMDF não tratadas. Pode usá-lo para depuração ao vivo do kernel ou para depuração de arquivos de despejo de falhas dos usuários de %ProgramData%\Microsoft\WDF.

  • Use !process 0 0x1f wudfhost.exe para listar todos os processos de host do driver Wudfhost.exe, incluindo as informações da pilha de threads.

    Você também pode usar !wdfkd.wdfumtriage e !wdfkd.wdfldr para exibir todos os drivers que estão atualmente vinculados ao WDF. Quando você seleciona o nome da imagem de um driver UMDF, o depurador exibe o endereço do processo de hospedagem. Em seguida, você pode selecionar o endereço do processo para exibir informações específicas desse processo.

  • Se necessário, use .process /r /p Process para mudar o contexto para o do processo Wudfhost que está a hospedar o seu driver. Use .cache forcedecodeuser e lmu para verificar se o driver está hospedado no processo atual.

  • Examine as pilhas de chamadas de thread (!thread Address) para determinar se um retorno de chamada de driver atingiu o tempo limite. Observe a contagem de ticks para as threads. No Windows 8.1, o refletor expira após um minuto.

  • Use !wdfkd.wdfdriverinfo MyDriver.dll 0x10 para exibir a árvore de dispositivos em formato detalhado. Em seguida, selecione !wdfdevice. Este comando exibe informações detalhadas sobre alimentação, política de energia e estado Plug and Play (PnP).

  • Utilize !wdfkd.wdfumirps para procurar IRPs pendentes.

  • Use !wdfkd.wdfdevicequeues para verificar o estado das filas do controlador.

  • Em uma sessão de depuração de modo de kernel, pode usar !wmitrace.logdump WudfTrace para mostrar o log de rastreamento.

Mostrar o log IFR UMDF 2.0

Numa sessão de depuração em modo kernel, pode usar o comando de extensão !wdfkd.wdflogdump para exibir os registos de log IFR (In-flight Recorder) do Windows Driver Frameworks (WDF), se estiverem disponíveis.

Localizando arquivos de despejo de memória

Consulte Determinando Por Que o Refletor Encerrou o Processo de Host para obter informações sobre como localizar arquivos de despejo no modo de utilizador. Consulte Usando o Rastreamento de Software WPP em Drivers UMDF para saber como configurar o valor de registo LogMinidumpType para especificar o tipo de informação armazenada no ficheiro minidump.