Comprobación de errores 0x1E: KMODE_EXCEPTION_NOT_HANDLED
La comprobación de errores KMODE_EXCEPTION_NOT_HANDLED tiene un valor de 0x0000001E. La comprobación de errores indica que un programa en modo kernel generó una excepción que el controlador de errores no detectó.
Importante
Este artículo va dirigido a programadores. Si es un cliente de Microsoft y su equipo muestra un código de error de pantalla azul, consulte Solución de errores de pantalla azul.
Parámetros de KMODE_EXCEPTION_NOT_HANDLED
Parámetro | Descripción |
---|---|
1 | Código de excepción que no se gestionó. |
2 | Dirección en la que se produjo la excepción. |
3 | Parámetro 0 de información de excepciones del registro de excepciones. |
4 | Parámetro 0 de información de excepciones del registro de excepciones. |
Causa
Para interpretar esta comprobación de errores, debe identificar qué excepción se generó.
Entre los códigos de excepción comunes se incluyen:
0x80000002: STATUS_DATATYPE_MISALIGNMENT
Se encontró una referencia de datos no alineada.
0x80000003: STATUS_BREAKPOINT
Se encontró un punto de interrupción o ASSERT cuando no había ningún depurador de kernel conectado al sistema.
0xC0000005: STATUS_ACCESS_VIOLATION
Se ha producido una infracción de acceso a la memoria. (El parámetro 4 de la comprobación de errores es la dirección a la que el controlador intentó acceder).
Para obtener una lista completa de códigos de excepción, consulte Valores de NTSTATUS. Los códigos de excepción se definen en ntstatus.h, un archivo de encabezado que se encuentra en el Kit para controladores de Windows. Para obtener más información, consulte Archivos de encabezado en el Kit para controladores de Windows.
Comentarios
Si no está equipado para depurar este problema, puede usar algunas técnicas básicas de solución de problemas que se describen en Análisis de los datos de la comprobación de errores de la pantalla azul. Si se identifica un controlador en el mensaje de verificación de errores, deshabilítelo o consulte al fabricante para obtener actualizaciones del controlador.
Incompatibilidad de hardware
Confirme que todo el hardware nuevo que se instale sea compatible con la versión instalada de Windows. Por ejemplo, puede obtener información sobre el hardware necesario en Especificaciones para Windows 10.
Controlador de dispositivo o servicio del sistema defectuoso
Un controlador de dispositivo o servicio del sistema defectuoso puede provocar este error. Los problemas de hardware, como las incompatibilidades del BIOS, los conflictos de memoria y los conflictos de IRQ también pueden generar este error.
Si un controlador aparece por nombre en el mensaje de comprobación de errores, deshabilite o quite ese controlador. Deshabilite o quite todos aquellos controladores o servicios que se hayan agregado recientemente. Si el error se produce durante la secuencia de inicio y se da formato a la partición del sistema como un sistema de archivos NTFS, es posible que pueda usar el modo seguro para deshabilitar el controlador en el Administrador de dispositivos.
Consulte el registro del sistema en el Visor de eventos para ver más mensajes de error que puedan ayudarle a identificar el dispositivo o controlador que provoca la comprobaciones de errores 0x1E. Ejecute también los diagnósticos de hardware proporcionados por el fabricante del sistema, especialmente el analizador de memoria. Para obtener más información sobre estos pasos de solución de problemas, consulte el manual del propietario del equipo.
El error que genera este mensaje puede producirse después del primer reinicio durante la instalación de Windows o después de que finalice el programa de instalación. Una posible causa del error es una incompatibilidad del BIOS del sistema. Puede resolver problemas de BIOS mediante la actualización de la versión del BIOS del sistema.
Solución
Es posible que sea difícil obtener un seguimiento de la pila al depurar este problema. La dirección de excepción (parámetro 2) debe identificar el controlador o la función que provocó el problema.
El código de excepción 0x80000003 indica que se alcanzó un punto de interrupción o aserción con codificación fija, pero el sistema se inició con el modificador /NODEBUG
. Este problema debería ocurrir raramente. Si se produce repetidamente, asegúrese de que un depurador de kernel esté conectado y de que el sistema se inicia con el modificador /DEBUG
.
Si se produce el código de excepción 0x80000002, el marco de captura proporciona más información.
Causa desconocida
Si se desconoce la causa específica de la excepción, considere la posibilidad de usar el procedimiento siguiente para obtener un seguimiento de la pila.
Nota:
En este procedimiento se da por supuesto que puede buscar NT!PspUnhandledExceptionInSystemThread
. Sin embargo, en algunos casos, como en un bloqueo de infracción de acceso, no podrá encontrar NT!PspUnhandledExceptionInSystemThread
. En ese caso, busque ntoskrnl!KiDispatchException
. El tercer parámetro que se pasa a esta función es una dirección de marco de captura. Use el comando .trap (mostrar marco de captura) con esta dirección para establecer el contexto de registro en el valor correcto. A continuación, puede realizar seguimientos de pila y emitir otros comandos.
Obtención de un seguimiento de pila
Para obtener un seguimiento de la pila si se producen errores en los procedimientos normales de seguimiento de la pila:
Utilice el comando kb (mostrar seguimiento de pila) para mostrar parámetros en el seguimiento de la pila. Busque la llamada a
NT!PspUnhandledExceptionInSystemThread
. (Si esta función no aparece en la lista, consulte la nota anterior).El primer parámetro para
NT!PspUnhandledExceptionInSystemThread
es un puntero a una estructura. El puntero contiene punteros a una instrucciónexcept
:typedef struct _EXCEPTION_POINTERS { PEXCEPTION_RECORD ExceptionRecord; PCONTEXT ContextRecord; } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; ULONG PspUnhandledExceptionInSystemThread( IN PEXCEPTION_POINTERS ExceptionPointers )
Use el comando dd (memoria de pantalla) en esa dirección para mostrar los datos que necesita.
El primer valor recuperado es un registro de excepción. Para el registro de excepciones, use el comando .exr (mostrar registro de excepción).
El segundo valor es un registro de contexto. Para el registro de contexto, use el comando .cxr (mostrar registro de contexto).
Una vez ejecutado el comando
.cxr
, use el comandokb
para mostrar un seguimiento de pila basado en la información del registro de contexto. Este seguimiento de pila indica la pila de llamadas donde se produjo la excepción no controlada.
Comprobación de errores de ejemplo
En el ejemplo siguiente se muestra una comprobación de errores 0x1E en un procesador x86:
kd> .bugcheck get the bug check data
Bugcheck code 0000001e
Arguments c0000005 8013cd0a 00000000 0362cffff
kd> kb start with a stack trace
FramePtr RetAddr Param1 Param2 Param3 Function Name
8013ed5c 801263ba 00000000 00000000 fe40cb00 NT!_DbgBreakPoint
8013eecc 8013313c 0000001e c0000005 8013cd0a NT!_KeBugCheckEx+0x194
fe40cad0 8013318e fe40caf8 801359ff fe40cb00 NT!PspUnhandledExceptionInSystemThread+0x18
fe40cad8 801359ff fe40cb00 00000000 fe40cb00 NT!PspSystemThreadStartup+0x4a
fe40cf7c 8013cb8e fe43a44c ff6ce388 00000000 NT!_except_handler3+0x47
00000000 00000000 00000000 00000000 00000000 NT!KiThreadStartup+0xe
kd> dd fe40caf8 L2 dump EXCEPTION_POINTERS structure
0xFE40CAF8 fe40cd88 fe40cbc4 ..@...@.
kd> .exr fe40cd88 first DWORD is the exception record
Exception Record @ FE40CD88:
ExceptionCode: c0000005
ExceptionFlags: 00000000
Chained Record: 00000000
ExceptionAddress: 8013cd0a
NumberParameters: 00000002
Parameter[0]: 00000000
Parameter[1]: 0362cfff
kd> .cxr fe40cbc4 second DWORD is the context record
CtxFlags: 00010017
eax=00087000 ebx=00000000 ecx=03ff0000 edx=ff63d000 esi=0362cfff edi=036b3fff
eip=8013cd0a esp=fe40ce50 ebp=fe40cef8 iopl=0 nv dn ei pl nz ac po cy
vip=0 vif=0
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010617
0x8013cd0a f3a4 rep movsb
kd> kb kb gives stack for context record
ChildEBP RetAddr Args to Child
fe40ce54 80402e09 ff6c4000 ff63d000 03ff0000 NT!_RtlMoveMemory@12+0x3e
fe40ce68 80403c18 ffbc0c28 ff6ce008 ff6c4000 HAL!_HalpCopyBufferMap@20+0x49
fe40ce9c fe43b1e4 ff6cef90 ffbc0c28 ff6ce009 HAL!_IoFlushAdapterBuffers@24+0x148
fe40ceb8 fe4385b4 ff6ce388 6cd00800 ffbc0c28 QIC117!_kdi_FlushDMABuffers@20+0x28
fe40cef8 fe439894 ff6cd008 ffb6c820 fe40cf4c QIC117!_cqd_CmdReadWrite@8+0x26e
fe40cf18 fe437d92 ff6cd008 ffb6c820 ff6e4e50 QIC117!_cqd_DispatchFRB@8+0x210
fe40cf30 fe43a4f5 ff6cd008 ffb6c820 00000000 QIC117!_cqd_ProcessFRB@8+0x134
fe40cf4c 80133184 ff6ce388 00000000 00000000 QIC117!_kdi_ThreadRun@4+0xa9
fe40cf7c 8013cb8e fe43a44c ff6ce388 00000000 NT!_PspSystemThreadStartup@8+0x40