Partilhar via


0xEA de Verificação de Bugs: THREAD_STUCK_IN_DEVICE_DRIVER

O bug THREAD_STUCK_IN_DEVICE_DRIVER marcar tem um valor de 0x000000EA. Isso indica que um thread em um driver de dispositivo está girando sem parar.

Importante

Este artigo é para programadores. Se você for um cliente que recebeu um código de erro de tela azul ao usar o computador, consulte Solucionar erros de tela azul.

Parâmetros de THREAD_STUCK_IN_DEVICE_DRIVER

Parâmetro Descrição

1

Um ponteiro para o objeto thread preso

2

Um ponteiro para o objeto DEFERRED_WATCHDOG

3

Um ponteiro para o nome do driver ofensivo

4

No depurador de kernel: O número de vezes que o bug "interceptado" marcar 0xEA foi atingido

Na tela azul: 1

Causa

Um driver de dispositivo está girando em um loop infinito, provavelmente aguardando o hardware ficar ocioso.

Isso geralmente indica um problema com o hardware em si ou com o driver do dispositivo programando o hardware incorretamente. Frequentemente, isso é resultado de um vídeo ruim cartão ou de um driver de exibição ruim.

Resolução

A extensão de depuração !analyze exibe informações sobre o bug marcar e pode ser útil para determinar a causa raiz.

Use o comando .thread (Definir Contexto de Registro) junto com o Parâmetro 1. Em seguida, use kb (Exibir Backtrace de Pilha) para localizar o local em que o thread está preso.

Se o depurador de kernel já estiver conectado e em execução quando o Windows detectar uma condição de tempo limite. Em seguida, DbgBreakPoint será chamado em vez de KeBugCheckEx. Uma mensagem detalhada será impressa no depurador. Consulte Envio de saída para a depuraçãopara obter mais informações.

Essa mensagem incluirá o que teria sido o bug marcar parâmetros. Como nenhum bug real marcar foi emitido, o comando .bugcheck (Exibir Dados de Verificação de Bugs) não será útil. Os quatro parâmetros também podem ser recuperados das variáveis globais do Watchdog usando dd watchdog!g_WdBugCheckData L5" em um sistema de 32 bits ou dq watchdog!g_WdBugCheckData L5" em um sistema de 64 bits.

Depurar esse erro de maneira interativa, como isso, permitirá que você encontre um thread ofensivo, defina pontos de interrupção nele e use g (Go) para retornar ao código giratório para depurá-lo ainda mais.

Em computadores multiprocessadores (build do sistema operacional 3790 ou anterior), você poderá atingir um tempo limite se o thread giratório for interrompido por uma interrupção de hardware e uma rotina ISR ou DPC estiver em execução no momento do bug marcar. Isso ocorre porque o item de trabalho do tempo limite pode ser entregue e manipulado na segunda CPU e ao mesmo tempo. Se isso ocorrer, você deverá examinar mais profundamente a pilha do thread ofensivo para determinar o código de rotação que causou o tempo limite. Use o comando dds (Exibir Palavras e Símbolos) para fazer isso.