Compartir a través de


Comprobación de errores 0x3B: SYSTEM_SERVICE_EXCEPTION

La comprobación de errores 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 va dirigido a 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 se utiliza)

Causa

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

Esto puede ocurrir porque se ha accedido a una desreferencia de puntero NULL o se ha accedido a una dirección incorrecta aleatoria. Esto, a su vez, puede deberse a la liberación prematura de memoria o a daños en estructuras de datos.

La información de excepción que se devuelve en el parámetro 1 se describe en 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).

Entre los códigos de excepción comunes se incluyen:

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

Solución

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

Para depurar este problema, use el comando .cxr (mostrar registro de contexto) con el parámetro 3 y, a continuación, use kb (mostrar seguimiento de pila). 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 en el código con errores. Use los comandos u, ub, uu (desensamblar) para ver el código del programa de ensamblado.

La extensión del depurador !analyze indica información sobre la comprobación de errores y puede resultar útil para determinar la causa raíz. El ejemplo siguiente es la salida 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, consulte Windows Internals 7th Edition Part 1 de Pavel Yosifovich, Mark E. Russinovich, David A. Solomon 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 la memoria en la ubicación (PUNICODE_STRING) KiBugCheckDriver. Puede usar dx (mostrar expresión de modelo de objeto depurador), 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 la 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 la información para buscar código común que se encuentra en la pila. Use comandos del depurador como kb (mostrar seguimiento de pila) para investigar el código de error.

Use el siguiente comando para enumerar los módulos que se cargan 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 relacionado con un uso excesivo del grupo paginado, que puede producirse debido a que los controladores de gráficos en modo de usuario se cruzan y pasan datos erróneos al código del kernel. Si sospecha que este es el caso, use las opciones de grupo en Comprobador de controladores para recopilar información adicional.

Comprobador de controladores

El Comprobador de controladores 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. El Administrador del comprobador de controladores está integrado en Windows y está disponible en todos los equipos Windows.

Para iniciar el Administrador del comprobador de controladores, escriba verifier en un símbolo del sistema. Puede configurar qué controladores comprobar. El código que comprueba los controladores añade sobrecarga a medida que se ejecuta, así que intente 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é es lo que ha cambiado en el sistema que ha provocado que aparezca el nuevo código de comprobación de errores.

  • Busque en el Administrador de dispositivos para ver si algún dispositivo está marcado con un signo de exclamación (!), lo que indicaría que hay 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.

  • Consulte el registro del sistema en el Visor de eventos para ver otros mensajes de error que puedan ayudarle a identificar el dispositivo o controlador que provoca 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 generales, consulte Análisis de los datos de la comprobación de errores de la pantalla azul.

Consulte también

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

Análisis de un archivo de volcado en modo kernel con WinDbg

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