Comprobación de errores 0x133: DPC_WATCHDOG_VIOLATION

La comprobación de errores de DPC_WATCHDOG_VIOLATION tiene un valor de 0x00000133. Esta comprobación de errores indica que el guardián de DPC se ejecutó, ya sea porque detectó una única llamada a procedimiento diferido de larga duración (DPC), o porque el sistema ha dedicado un tiempo prolongado en un nivel de solicitud de interrupción (IRQL) de DISPATCH_LEVEL o superior.

El valor del parámetro 1 indica si un único DPC superó un tiempo de espera, o si el sistema pasó un período prolongado de tiempo en IRQL DISPATCH_LEVEL o superior. Los DPC no deben ejecutar más de 100 microsegundos e ISR no deben ejecutarse más de 25 microsegundos, pero los valores de tiempo de espera reales del sistema se establecen mucho más alto.

Para obtener más información sobre los DPC, vea Introduction to DPC Objects and Windows Internals 7th Edition Part 1 by Pavel Yosifovich, Mark E. Russinovich, David A. Solomon y Alex Ionescu.

Importante

Este artículo es para programadores. Si es un cliente que ha recibido un código de error de pantalla azul mientras usa el equipo, consulte Solución de errores de pantalla azul.

parámetros de DPC_WATCHDOG_VIOLATION

El parámetro 1 indica el tipo de infracción. El significado de los demás parámetros depende del valor del parámetro 1.

Parámetro 1 Parámetro 2 Parámetro 3 Parámetro 4 Causa del error
0 Recuento de tiempo de DPC (en tics) La asignación de tiempo de DPC (en tics). ¡cast to nt! DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, que contiene información adicional sobre este único tiempo de espera de DPC Un único DPC o ISR superó su asignación de tiempo. Normalmente, el componente infractor se puede identificar con un seguimiento de pila.
1 El período de guardián ¡cast to nt! DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, que contiene información adicional sobre este único tiempo de espera de DPC Reservado El sistema pasó un período prolongado de tiempo en IRQL DISPATCH_LEVEL o superior. Normalmente, el componente infractor se puede identificar con un seguimiento de pila.

Causa

Para determinar la causa, es necesario que el depurador de Windows, la experiencia de programación y el acceso al código fuente del módulo de error.

Para obtener más información, consulte los siguientes temas:

Análisis de volcado de memoria mediante los depuradores de Windows (WinDbg)

Análisis de un archivo de volcado de Kernel-Mode con WinDbg

Uso de la extensión !analyze y !analyze

Para obtener más información sobre Windows DPC, consulta Windows Internals 7th Edition Part 1 by Pavel Yosifovich, Mark E. Russinovich, David A. Solomon y Alex Ionescu.

Ejemplo 1

La extensión !analyze debug muestra información sobre la comprobación de errores y puede ser útil para determinar la causa principal.

Parámetro 1 = 0

En este ejemplo, el recuento de tics de 501 supera la asignación de tiempo de DPC de 500. El nombre de la imagen indica que este código se estaba ejecutando cuando se produjo la comprobación de errores.

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 los siguientes comandos del depurador para recopilar más información sobre los errores con un parámetro de 0:

k (Mostrar backtrace de pila) para ver qué código se estaba ejecutando cuando se produjo el código de detención.

Es posible que desee usar el comando u, ub, uu (Unassemble) para profundizar en los detalles de un código que se estaba ejecutando.

La extensión !pcr muestra el estado actual de la región de control del procesador (PCR) en un procesador específico. En la salida será la dirección del Prcb.

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

Puede usar el comando dt (tipo de pantalla) para mostrar información adicional sobre los DPC y el guardián de DPC. Para la dirección, use el Prcb enumerado en la salida !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

Ejemplo 2

Parámetro 1 = 1

Para el parámetro 1, es posible que el código no se detenga en el área ofendida del código. En este caso, un enfoque consiste en usar el seguimiento de eventos para intentar realizar un seguimiento del controlador que supere la duración normal de la ejecución.

Use la extensión de depuración !analyze para mostrar información sobre la comprobación de errores.

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

¡Convierta la dirección del nt! DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK mostrar información sobre ella.

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 el comando !dpcs para mostrar los DPC en cola.

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

Resolución

Para determinar la causa específica y crear una corrección de código, se requiere experiencia de programación y acceso al código fuente del módulo de error.

Comentarios

En general, este código de detención se debe al código de controlador defectuoso que, en determinadas condiciones, no completa su trabajo dentro del período de tiempo asignado.

Si no está equipado para usar el depurador de Windows para este problema, debe usar algunas técnicas básicas de solución de problemas.

  • Si se identifica un controlador en el mensaje de comprobación de errores, para aislar el problema, deshabilite el controlador. Consulte con el fabricante si hay actualizaciones de controladores.

  • Compruebe el inicio de sesión del sistema Visor de eventos si hay mensajes de error adicionales que pueden ayudar a identificar el dispositivo o controlador que está causando la comprobación de errores 0x133.

  • Confirme que cualquier nuevo hardware instalado sea compatible con la versión instalada de Windows. Por ejemplo, para Windows 10, puede obtener información sobre el hardware necesario en Windows 10 Especificaciones.

  • Para obtener información general adicional sobre la solución de problemas, consulte Datos de pantalla azul.

Consulte también

Análisis de volcado de memoria mediante los depuradores de Windows (WinDbg)

Análisis de un archivo de volcado de Kernel-Mode con WinDbg

Bug Check Code Reference (Referencia de código de comprobación de errores)