Comprobación de errores 0x1E: KMODE_EXCEPTION_NOT_HANDLED

La comprobación de errores de 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 es para programadores. Si es un cliente de Microsoft y el 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 controló.
2 Dirección donde se produjo la excepción.
3 Parámetro de información de excepción 0 del registro de excepción.
4 Parámetro de información de excepción 0 del registro de excepción.

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 asignado.

  • 0x80000003: STATUS_BREAKPOINT

    Se encontró un punto de interrupción o ASSERT cuando no se adjuntó ningún depurador de kernel 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 los códigos de excepción, vea Valores NTSTATUS. Los códigos de excepción se definen en ntstatus.h, un archivo de encabezado que se encuentra en el Kit de controladores de Windows. Para obtener más información, vea Archivos de encabezado en el Kit de 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 Datos de pantalla azul. Si un controlador está identificado en el mensaje de comprobación de errores, deshabilita el controlador o ponte en contacto con el fabricante para obtener actualizaciones de controladores.

Incompatibilidad de hardware

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

Controlador de dispositivo defectuoso o servicio del sistema

Un controlador de dispositivo o un servicio del sistema defectuosos pueden provocar este error. Los problemas de hardware, como las incompatibilidades del BIOS, los conflictos de memoria y los conflictos 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 la partición del sistema tiene el formato de sistema como sistema de archivos NTFS, es posible que pueda usar el modo seguro para deshabilitar el controlador en Administrador de dispositivos.

Compruebe el inicio de sesión del sistema Visor de eventos para ver más mensajes de error que pueden ayudarle a identificar el dispositivo o controlador que está causando la comprobación de errores 0x1E. Ejecute también diagnósticos de hardware proporcionados por el fabricante del sistema, especialmente el escáner 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 una vez finalizada la instalación. Una posible causa del error es una incompatibilidad del BIOS del sistema. Puede resolver problemas de BIOS actualizando la versión del BIOS del sistema.

Resolución

Es posible que le resulte 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 codificado de forma rígida, pero el sistema se inició con el /NODEBUG modificador . Este problema debe producirse rara vez. Si se produce repetidamente, asegúrese de que un depurador de kernel está conectado y de que el sistema se inicia con el /DEBUG modificador .

Si se produce 0x80000002 código de excepción, 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 supone 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 (display trap frame) 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 produce un error en los procedimientos de seguimiento de pila normales:

  1. Use el comando kb (display stack backtrace) para mostrar los 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).

  2. El primer parámetro para NT!PspUnhandledExceptionInSystemThread es un puntero a una estructura. El puntero contiene punteros a una except instrucción :

    typedef struct _EXCEPTION_POINTERS {
        PEXCEPTION_RECORD ExceptionRecord;
        PCONTEXT ContextRecord;
        } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
    
    ULONG PspUnhandledExceptionInSystemThread(
        IN PEXCEPTION_POINTERS ExceptionPointers
        )
    

    Use el comando dd (mostrar memoria) en esa dirección para mostrar los datos que necesita.

  3. El primer valor recuperado es un registro de excepción. Para el registro de excepciones, use el comando .exr (mostrar registro de excepciones).

    El segundo valor es un registro de contexto. Para el registro de contexto, use el comando .cxr (mostrar registro de contexto).

  4. Una vez ejecutado el .cxr comando, use el kb comando 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