Solução de problemas de falhas de driver UMDF 2.0
Começando no 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 falhou
Se o processo de host do driver for encerrado, o driver poderá ter um problema em um retorno de chamada que resulta na excedência do limite de tempo limite do host . Nesse caso, o refletor encerra o processo de host do driver.
Para investigar, primeiro configure uma sessão de depuração no modo kernel, conforme descrito em Como habilitar a depuração de um driver 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
Se HostFailKdDebugBreak estiver definido, o refletor será dividido no depurador do modo kernel quando o limite de tempo limite for excedido. Na saída do depurador, você verá 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 exibir informações sobre a falha e outros comandos de extensão UMDF que você pode tentar. Esse comando pode ajudar com falhas de verificador UMDF ou exceções sem tratamento de UMDF. Você pode usá-lo para depuração dinâmica de kernel ou depuração de arquivos de despejo de memória do usuário de %ProgramData%\Microsoft\WDF.
Use !process 0 0x1f wudfhost.exe para listar todos os processos de host do driver Wudfhost.exe, incluindo informações de pilha de threads.
Você também pode usar !wdfkd.wdfumtriage e !wdfkd.wdfldr para exibir todos os drivers associados ao WDF no momento. 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 alternar o contexto do processo para o do processo Wudfhost que está hospedando 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 do driver atingiu o tempo limite. Examine a contagem de tiques para os threads. Em Windows 8.1, o refletor atinge o tempo limite após um minuto.
Use !wdfkd.wdfdriverinfo MyDriver.dll 0x10 para exibir a árvore do dispositivo em forma detalhada. Em seguida, selecione !wdfdevice. Esse comando exibe informações detalhadas de energia, política de energia e estado de Plug and Play (PnP).
Use !wdfkd.wdfumirps para procurar IRPs pendentes.
Use !wdfkd.wdfdevicequeues para marcar o status das filas do driver.
Em uma sessão de depuração no modo kernel, você pode usar !wmitrace.logdump WudfTrace para exibir o log de rastreamento.
Exibindo o log IFR do UMDF 2.0
Em uma sessão de depuração no modo kernel, você pode usar o comando de extensão !wdfkd.wdflogdump para exibir os registros de log ifr (Gravador de Entrada) do WDF (Windows Driver Frameworks), se disponíveis.
Localizando arquivos de despejo de memória
Consulte Determineing Why the Reflector Terminated the Host Process for information on finding user-mode dump files. Consulte Using WPP Software Tracing in UMDF Drivers for information on how to set the LogMinidumpType registry value to specify the type of information stored in the minidump file.