Verificação de bug 0x133: DPC_WATCHDOG_VIOLATION
A verificação de bug DPC_WATCHDOG_VIOLATION tem o valor 0x00000133. Essa verificação de bug indica que o órgão de vigilância do DPC foi executado, porque detectou uma única chamada de procedimento adiado (DPC) de longa execução ou porque o sistema passou um tempo prolongado em um nível de solicitação de interrupção (IRQL) de DISPATCH_LEVEL ou superior.
O valor do Parâmetro 1 indica se um único DPC excedeu um tempo limite ou se o sistema passou cumulativamente um longo período no IRQL DISPATCH_LEVEL ou superior. Os DPCs não devem ser executados por mais de 100 microssegundos e os ISRs não devem ser executados por mais de 25 microssegundos, mas os valores de tempo limite reais no sistema são definidos muito mais altos.
Para obter mais informações sobre DPCs, consulte Introdução aos objetos DPC e Windows Internals 7th Edition Part 1 de Pavel Yosifovich, Mark E. Russinovich, David A. Solomon e Alex Ionescu.
Importante
Este artigo é para programadores. Se você for um cliente que recebeu um código de erro de tela azul enquanto estava usando o computador, confira Solucionar problemas de erros de tela azul.
Parâmetros de DPC_WATCHDOG_VIOLATION
Parâmetro 1 indica o tipo de violação. O significado dos outros parâmetros depende do valor do Parâmetro 1.
Parâmetro 1 | Parâmetro 2 | Parâmetro 3 | Parâmetro 4 | Causa do erro |
---|---|---|---|---|
0 | A contagem de tempo de DPC (em tiques) | A alocação de tempo de DPC (em tiques). | converter em nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, que contém informações adicionais sobre esse tempo limite único do DPC | Um único DPC ou ISR excedeu a alocação de tempo. O componente ofensivo geralmente pode ser identificado com um rastreamento de pilha. |
1 | O período de vigilância | converter em nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, que contém informações adicionais sobre esse tempo limite único do DPC | Reserved | O sistema passou cumulativamente um longo período em IRQL DISPATCH_LEVEL ou superior. O componente ofensivo geralmente pode ser identificado com um rastreamento de pilha. |
Causa
A determinação da causa requer o depurador do Windows, experiência em programação e acesso ao código-fonte para o módulo com falha.
Para obter mais informações, consulte estes tópicos:
Análise de despejo de memória usando os depuradores do Windows (WinDbg)
Analisando um arquivo de despejo no modo kernel com o WinDbg
Usando a extensão !analyze e !analyze
Para obter mais informações sobre o Windows DPC, consulte Windows Internals 7th Edition Part 1 de Pavel Yosifovich, Mark E. Russinovich, David A. Solomon e Alex Ionescu.
Exemplo 1
A extensão de depuração !analyze exibe informações sobre a verificação de bugs e pode ser útil para determinar a causa raiz.
Parâmetro 1 = 0
Neste exemplo, a contagem de 501 tiques excede a alocação de tempo de DPC de 500. O nome da imagem indica que esse código estava sendo executado quando a verificação de bug ocorreu.
0: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DPC_WATCHDOG_VIOLATION (133)
The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
or above.
Arguments:
Arg1: 0000000000000000, A single DPC or ISR exceeded its time allotment. The offending
component can usually be identified with a stack trace.
Arg2: 0000000000000501, The DPC time count (in ticks).
Arg3: 0000000000000500, The DPC time allotment (in ticks).
Arg4: 0000000000000000
...
IMAGE_NAME: BthA2DP.sys
...
Use os seguintes comandos do depurador para coletar mais informações sobre falhas com um parâmetro de 0:
k (Display Stack Backtrace) para ver qual código estava em execução quando o código de parada ocorreu.
Você pode usar o comando u, ub, uu (Unassemble) para examinar mais profundamente as especificidades do código que estava sendo executado.
A extensão !pcr exibe o status atual da PCR (Região de Controle do Processador) em um processador específico. O endereço do Prcb estará na saída
0: kd> !pcr
KPCR for Processor 0 at fffff8035f5a4000:
Major 1 Minor 1
NtTib.ExceptionList: fffff80368e77fb0
NtTib.StackBase: fffff80368e76000
NtTib.StackLimit: 0000000000000000
NtTib.SubSystemTib: fffff8035f5a4000
NtTib.Version: 000000005f5a4180
NtTib.UserPointer: fffff8035f5a4870
NtTib.SelfTib: 000000b6d3086000
SelfPcr: 0000000000000000
Prcb: fffff8035f5a4180
Irql: 0000000000000000
IRR: 0000000000000000
IDR: 0000000000000000
InterruptMode: 0000000000000000
IDT: 0000000000000000
GDT: 0000000000000000
TSS: 0000000000000000
CurrentThread: fffff80364926a00
NextThread: ffffe40b77c12040
IdleThread: fffff80364926a00
Você pode usar o comando dt (Display Type) para exibir informações adicionais sobre os DPCs e o Watchdog do DPC. Para o endereço, use o Prcb listado na saída !pcr:
dt nt!_KPRCB fffff80309974180 Dpc*
0: kd> dt nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK fffff803648fa320
+0x000 Signature : 0xaebecede
+0x004 Revision : 1
+0x006 Size : 0x10
+0x008 DpcWatchdogProfileOffset : 0x84a8
+0x00c DpcWatchdogProfileLength : 0x8200
Exemplo 2
Parâmetro 1 = 1
Para o parâmetro 1, o código não pode parar na área de ofensa do código. Nesse caso, uma abordagem é usar o rastreamento de eventos para tentar rastrear qual driver está excedendo a duração normal de execução.
Use a extensão de depuração !analyze para exibir informações sobre a verificação de bugs.
0: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DPC_WATCHDOG_VIOLATION (133)
The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
or above.
Arguments:
Arg1: 0000000000000001, The system cumulatively spent an extended period of time at
DISPATCH_LEVEL or above. The offending component can usually be
identified with a stack trace.
Arg2: 0000000000001e00, The watchdog period.
Arg3: fffff803648fa320, cast to nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, which contains
additional information regarding the cumulative timeout
Arg4: 0000000000000000
Converta o endereço do nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK para exibir informações sobre ele.
0: kd> dt nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK fffff803648fa320
+0x000 Signature : 0xaebecede
+0x004 Revision : 1
+0x006 Size : 0x10
+0x008 DpcWatchdogProfileOffset : 0x84a8
+0x00c DpcWatchdogProfileLength : 0x8200
Use o comando !dpcs para exibir os DPCs na fila.
3: kd> !dpcs
CPU Type KDPC Function
0: Normal : 0xfffff8035f5ac290 0xfffff80363e15630 nt!PpmPerfAction
Failed to read DPC at 0xffffe40b77190dd8
0: Threaded: 0xfffff8035f5ac3d8 0xfffff80363f27d70 nt!KiDpcWatchdog
Resolução
Para determinar a causa específica e criar uma correção de código, é necessário ter experiência em programação e acesso ao código-fonte do módulo com falha.
Comentários
Em geral, esse código de parada é causado por código de driver defeituoso que, sob certas condições, não conclui o trabalho dentro do período alocado.
Se você não estiver equipado para usar o depurador do Windows para esse problema, use algumas técnicas básicas de solução de problemas.
Se um driver for identificado na mensagem de verificação de bugs, para isolar o problema, desative o driver. Verifique com o fabricante se há atualizações de driver.
Verifique se há mensagens de erro adicionais no log do sistema no Visualizador de Eventos que possam ajudar a identificar o dispositivo ou o driver que está causando a verificação de bugs 0x133.
Confirme se o novo hardware instalado é compatível com a versão instalada do Windows. Por exemplo, para o Windows 10, você pode obter informações sobre o hardware necessário em Especificações do Windows 10.
Para obter mais informações gerais sobre solução de problemas, consulte Analisar dados de tela azul de verificação de bugs.
Confira também
Análise de despejo de memória usando os depuradores do Windows (WinDbg)
Analisando um arquivo de despejo no modo kernel com o WinDbg