Comprobación de errores 0x3B: SYSTEM_SERVICE_EXCEPTION

La comprobación de errores de SYSTEM_SERVICE_EXCEPTION tiene un valor de 0x0000003B. Esto indica que se produjo una excepción al ejecutar una rutina que pasa del código sin privilegios al código con privilegios.

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 SYSTEM_SERVICE_EXCEPTION

Parámetro Descripción
1 Excepción que provocó la comprobación de errores.
2 Dirección de la instrucción que provocó la comprobación de errores
3 Dirección del registro de contexto de la excepción que provocó la comprobación de errores.
4 0 (no usado)

Causa

Este código de detención indica que la ejecución de código tenía una excepción y el subproceso que estaba por debajo, es un subproceso del sistema.

Esto puede ocurrir porque se obtuvo acceso a una desreferencia de puntero NULL o a una dirección incorrecta aleatoria. Esto a su vez puede deberse a que la memoria se libera prematuramente o daños en la estructura de datos.

La información de excepción que se devuelve en el parámetro 1 se describe en valores NTSTATUS. Los códigos de excepción se definen en ntstatus.h, un archivo de encabezado proporcionado por el Kit de controladores de Windows. (Para obtener más información, consulta Archivos de encabezado en el Kit de controladores de Windows).

Los códigos de excepción comunes incluyen:

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

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 con errores.

Para depurar este problema, use el comando .cxr (display context record) con el parámetro 3 y, a continuación, use kb (display stack backtrace). También puede establecer un punto de interrupción en el código que precede a este código de detención e intentar avanzar un solo paso hacia delante en el código de error. Use los comandos u, ub, uu (unassemble) para ver el código del programa de ensamblado.

La extensión del depurador !analyze muestra información sobre la comprobación de errores y puede ser útil para determinar la causa principal. El ejemplo siguiente es el resultado de !analyze.

SYSTEM_SERVICE_EXCEPTION (3b)
An exception happened while executing a system service routine.
Arguments:
Arg1: 00000000c0000005, Exception code that caused the bugcheck
Arg2: fffff802328375b0, Address of the instruction which caused the bugcheck
Arg3: ffff9c0a746c2330, Address of the context record for the exception that caused the bugcheck
Arg4: 0000000000000000, zero.
...

Para obtener más información sobre WinDbg y !analyze, consulte los temas siguientes:

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

Identificación del controlador

Si se puede identificar un controlador responsable del error, su nombre se imprime en la pantalla azul y se almacena en memoria en la ubicación (PUNICODE_STRING) KiBugCheckDriver. Puede usar dx (display debugger object model expression), un comando del depurador, para mostrar esto: dx KiBugCheckDriver.

kd> dx KiBugCheckDriver
KiBugCheckDriver                 : 0xffffe10b9991e3e8 : "nvlddmkm.sys" [Type: _UNICODE_STRING *]

Use la extensión !error para mostrar información sobre el código de excepción en el parámetro 1. A continuación se muestra un ejemplo de salida de !error.

2: kd> !error 00000000c0000005
Error code: (NTSTATUS) 0xc0000005 (3221225477) - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.

Examine la salida STACK TEXT de WinDbg para obtener pistas sobre lo que se estaba ejecutando cuando se produjo el error. Si hay varios archivos de volcado disponibles, compare su información para buscar código común que se encuentra en la pila. Use comandos del depurador como kb (display stack backtrace) para investigar el código de error.

Use el siguiente comando para enumerar los módulos cargados en memoria: lm t n

Use !memusage para examinar el estado general de la memoria del sistema. También puede usar los comandos !pte y !pool para examinar áreas específicas de memoria.

En el pasado, este error se ha vinculado al uso excesivo del grupo paginado, lo que puede producirse debido a que los controladores gráficos en modo de usuario cruzan y pasan datos incorrectos al código del kernel. Si sospecha que este es el caso, use las opciones del grupo en Comprobador de controladores para recopilar información adicional.

Comprobador de controladores

Driver Verifier es una herramienta que se ejecuta en tiempo real para examinar el comportamiento de los controladores. Por ejemplo, el Comprobador de controladores comprueba el uso de recursos de memoria, como los grupos de memoria. Si identifica errores en la ejecución del código de controlador, crea proactivamente una excepción para permitir que esa parte del código del controlador se examine aún más. Driver Verifier Manager está integrado en Windows y está disponible en todos los equipos Windows.

Para iniciar el Administrador del comprobador de controladores, escriba comprobador en un símbolo del sistema. Puede configurar qué controladores comprobar. El código que comprueba que los controladores agregan sobrecarga a medida que se ejecuta, por lo que intenta comprobar el menor número de controladores posible. Para obtener más información, consulte Comprobador de controladores.

Comentarios

Para solucionar problemas generales de códigos de comprobación de errores de Windows, siga estas sugerencias:

  • Si recientemente se han agregado nuevos controladores de dispositivo o servicios del sistema, pruebe a quitarlos o actualizarlos. Intente determinar qué ha cambiado en el sistema que provocó que aparezca el nuevo código de comprobación de errores.

  • Busque en Administrador de dispositivos para ver si algún dispositivo está marcado con un signo de exclamación (!), lo que indica un problema. Revise el registro de eventos que se muestra en las propiedades de cualquier controlador de dispositivo con errores. Pruebe a actualizar el controlador relacionado.

  • 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 el controlador que está causando el error. Busque en el registro del sistema errores críticos que se hayan producido en la misma ventana de tiempo que la pantalla azul.

  • Si ha agregado recientemente hardware al sistema, intente quitarlo o reemplazarlo. O bien, póngase en contacto con el fabricante para ver si hay revisiones disponibles.

Para obtener información adicional sobre la solución de problemas general, 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)