Plantalla azul de la muerte
(http://farm4.static.flickr.com/3178/2961926177_39f3b7ca3c_o.jpg)
■ La popular pantalla azul (Blue Sreen of Death), es una manera del sistema operativo de informar sobre un errorEstos puede ser generados por el núcleo de windows,
Kernel en archivos como (win32.sys, esbtor.sys, usbyhci.sys). Los driver presentan generalmente, la extensión
VXD y se puede solucionar con una actualización de los mismos.
Si el sistema no responde seguro presionaremos el botón [Reset] Al forzar el reinicio estamos obviando información importante que puede ayudarnos a solucionar el problema de manera definitiva.Veamos como generar un volcado de memoria y como aprovecharlo para descubrir la causa de los errores.
■
Que es un Volcado de memoriaUn volcado de memoria es un archivo de imagen en el que se almacena, bit por bit, el contenido de la memoria RAM en el momento en que Windows deja de responder. Es posible generar tres tipos de volcados de memoria.
■
Volcado pequeño (Mini Dump)Es un pequeño archivo, de apenas 64 KB en sistemas de 32 bits o 128 KB en sistemas de 64 bits, que no contiene ninguno de los ejecutables que estaban en memoria, sino que tan sólo almacena: el mensaje de error con sus parámetros y datos, una lista de drivers cargados, el contexto en el cual el procesador se detuvo, la información del proceso que se detuvo, la información del subproceso que se detuvo y, finalmente, la pila de llamadas del núcleo al proceso que se detuvo.
■
Volcado del núcleo (Kernel Dump)Por lo general, su tamaño es igual a la cantidad de memoria utilizada por el núcleo del sistema operativo. Para Windows XP es aproximadamente de unos 100 MB. Éste es probablemente el volcado más útil, ya que muestra el estado del kernel y los archivos de sistema en el momento del error.
■
Volcado completo (Full Dump)En este caso, el tamaño del archivo de imagen será igual a la cantidad de memoria RAM instalada. Esto se debe a que en este caso se copian todos los datos contenidos en memoria, tanto del núcleo como de las aplicaciones en ejecución.
■
Cómo generar un volcado de memoriaEl volcado de memoria se genera de manera automática, pero es necesario que nosotros le indiquemos a Windows que es nuestra intención obtener este archivo y la ubicación donde se guardará.
Para esto, hacemos clic con el botón derecho del mouse sobre el icono de Mi PC y elegimos la opción [Propiedades]. En el cuadro que se abre nos dirigimos a la pestaña [Opciones avanzadas] y hacemos clic en el botón [Configuración] del área Inicio y recuperación.
Dicho fichero se va a guardar en la carpeta "windows" con el nombre MEMORY.dmp.
(http://farm4.static.flickr.com/3249/2952613745_6015f86b57_o.jpg)
(http://farm4.static.flickr.com/3150/2953325060_eede9e878b.jpg?v=0)
■
1.Tenemos un breve texto descriptivo como así también a veces el Nº de error en forma hexadecimal.
■
2. Acción recomendada: Sugerencia de posible hardware o el software a analizar.
■
3. Información de Archivo:Aquí se detalla el nombre de la aplicación o el archivo que origino el error.
■
4.Destino de depuración el tipo de volcado y la ubicación si el volcado se realiza en otra computadora.
(http://farm4.static.flickr.com/3288/2962453215_3809b46b4f.jpg?v=0)
■
Herramientas de análisis [aplicación de debugging]Es un programa que, junto con un poco de paciencia nos permite analizar los ficheros DUMP de windows para poder encontrar el error con exactitud cuando aparece una pantalla azul.
Funciona desde windows 2000 hasta windows server 2008. Y obviamente en XP y Vista.
El volcado de memoria que Windows realiza en el momento en que la computadora deja de funcionar está compilado, es decir, se encuentra en un código de bajo nivel sólo comprensible para el procesador. Para poder entender el error y sus causas, deberemos descompilar el volcado de memoria, algo así como traducirlo a un lenguaje humanamente comprensible.
Para poder hacer esto necesitaremos de la herramienta conocida como "Windows Debugger", que podemos descargar de
www.microsoft.com/whdc/devtools/debugging/installx86.mspx. Pero esta herramienta necesita, además, una tabla de símbolos, una especie de "diccionario" que permita la traducción. Si no contamos con una conexión permanente a Internet, podemos descargar las tablas de símbolos completas desde
www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx , aunque cada paquete puede llegar a pesar 209 MB. Si, por el contrario, disponemos de una conexión permanente, lo conveniente es crear una carpeta para las tablas de símbolos, supongamos C:\Symbols, e instalar la aplicación de debugging. Luego, ya dentro de la aplicación, vamos al menú
[File/Symbol file path] y escribimos lo siguiente:
SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols De este modo el programa actualizará las tablas de símbolos instaladas automáticamente según sea necesario.
En este caso la carpeta donde se van a guardar los símbolos es
c:\Websymbols, pero se puede cambiar por cualquier otra... vale aclarar que necesitamos estar conectados a Internet.
(http://farm4.static.flickr.com/3208/2953325378_80b3dc5195.jpg?v=0)
(http://farm3.static.flickr.com/2142/2952475059_78bbb6dfae_o.jpg)
■
Estudiar el volcado de memoriaCon todo listo y configurado, abrimos una vez más Windows debugger (Windbg) y presionamos la combinación de teclas <Ctrl+D> o hacemos clic en el menú [File/Open Crash Dump...]. Buscamos el archivo de volcado de memoria generado la última vez que la PC se congeló y lo car¬gamos en el programa. Es importante observar la cabecera del archivo; si se nos indica que está corrupto, entonces no podremos continuar y deberemos esperar el próximo error para generar un nuevo volcado de memoria.
En caso contrario, tendremos una ventana con los resultados de la recopilación y una línea de comandos, donde deberemos escribir la palabra
¡Analyze -v y presionar <Enter> para obtener resultados. Este comando genera un completo informe del error donde, observando con atención, podremos determinar qué causó el cuelgue y su solución.
■ Ahora vamos a abrir el fichero dump que nos genero la maldita pantalla azul. Para esto vamos a "File"-"
open crash dump" y abrimos el archivo
MEMORY.dmp mencionado anteriormente.(Este archivo puede leerse desde cualquier PC)
■
El informe se divide en varios puntos o secciones. Los más importantes son los siguientes:■
Descripción del error: esta sección se presenta al principio del informe. Son palabras en inglés, en mayúsculas y separadas por un guión bajo. Describen el error en líneas generales, algo así como
UNABLE TOJ.OCATE DLL. Con introducir estas palabras en un buscador tendremos mayor detalle y la manera de solucionarlo.
■
Arguments (Argumentos): son cuatro valores en hexadecimal que indican algunas características del error:
Arg1 es la dirección de memoria a la que se hace referencia o el código del error:
Arg2 es la dirección de memoria donde ocurrió el error:
Arg3 indica si lo que se intentó ejecutar en el momento del error fue un proceso de lectura (0x00000000) o de escritura (0x00000001); y
Arg4 es la dirección de memoria desde donde se intentó ejecutar el proceso que generó el error.
■
DEFAULT BUCKET ID: es la categoría a la que pertenece la falla.
■
IMAGE NAME: éste es el nombre del driver o el ejecutable que tenía el control en el momento de producirse el error. En este punto deberemos prestar especial atención, ya que aquí puede estar la solución de nuestros problemas.
■
STACK TEXT: es concretamente el contenido de la memoria en el momento de la falla. Es útil para realizar un seguimiento de lo que ocurrió antes del error.
■
Ahora vamos a poner un ejemplo La pantalla azul decía únicamente
MULTIPLE_IRP_COMPLETE_REQUESTS y nada mas que esto. Nosotros en un caso así enseguida estaríamos formateando la PC, pero veamos como sigue:
■
Al abrirlo con el "windbg" aparece esto (para cualquier archivo el formato es similar):_____________________________________________________________________
Microsoft (R) Windows Debugger Versión 6.4.0007.2
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [\\ka000SRV\d$\WINDOWS\MEMORY.DMP]
Kernel Summary Dump File: Only kernel address space is available
Symbol search path is: SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
Windows Server 2003 Kernel Versión 3790 (Service Pack 1) MP (4 procs) Free x86 compatible
Product: LanManNt, suite: TerminalServer SingleUserTS
Built by: 3790.srv03_sp1_rtm.050324-1447
Kernel base = 0x80800000 PsLoadedModuleList = 0x808af988
Debug session time: Thu May 19 19:32:53.800 2005 (GMT+2)
System Uptime: 0 days 0:05:14.483
Loading Kernel Symbols
.....................................................................
Loading unloaded module list
.
Loading User Symbols
PEB is paged out (Peb.Ldr = 7ffd800c). Type ".hh dbgerr001" for details
*********************************************************************
* *
* Bugcheck Analysis *
* *
*********************************************************************
Use !analyze -v to get detailed debugging information.
BugCheck 44, {87e5a490, d75, 0, 0}
*** ERROR: Module load completed but symbols could not be loaded for Fasttrak.sys
*** ERROR: Module load completed but symbols could not be loaded for VMNetSrv.sys
*** ERROR: Module load completed but symbols could not be loaded for TSKNF601.SYS
*** ERROR: Module load completed but symbols could not be loaded for ctprxy2k.sys
*** ERROR: Module load completed but symbols could not be loaded for PSXDRV.SYS
*** ERROR: Module load completed but symbols could not be loaded for memalloc.sys
*********************************************************************
Probably caused by : usbehci.sys_________________________________________________________________
Bien: ya aparece un culpable!! el archivo Usbehci.sys,(un driver USB del propio windows), pero como somos muy curiosos vamos a pedir mas detalles...Para esto usamos el comando: !analyze -vY para este ejemplo nos aparece lo siguiente:_________________________________________________________________
0: kd> !analyze -v
*******************************************************************************
* Bugcheck Analysis *
*******************************************************************************
MULTIPLE_IRP_COMPLETE_REQUESTS (44)
A driver has requested that an IRP be completed (IoCompleteRequest()), but
the packet has already been completed. This is a tough bug to find because
the easiest case, a driver actually attempted to complete its own packet
twice, is generally not what happened. Rather, two separate drivers each
believe that they own the packet, and each attempts to complete it. The
first actually works, and the second fails. Tracking down which drivers
in the system actually did this is difficult, generally because the trails
of the first driver have been covered by the second. However, the driver
stack for the current request can be found by examining the DeviceObject
fields in each of the stack locations.
Arguments:
Arg1: 87e5a490, Address of the IRP
Arg2: 00000d75
Arg3: 00000000
Arg4: 00000000
Debugging Details:
------------------
IRP_ADDRESS: 87e5a490
default_bucket_id: driver_default
image_name: usbehci.sys
debug_flr_image_Timestamp: 42435bb3
module_name: usbehci
faultig_name: ba27b000 usbehci
last_control_tranfer: from 808596ec to 8087b6be
stack_ext:
f789ee10 808596ec 00000044 87e5a490 00000d75 nt!KeBugCheckEx+0x1b
f789ee48 ba11ddc4 87e5a490 88770eb0 8a0e1028 nt!IopfCompleteRequest+0x2f7
f789eeb0 ba11ea45 b70989c0 00000000 8083b28b USBPORT!USBPORT_CompleteTransfer+0x38c
f789eee0 ba11f558 026e6f44 8a0e10e0 8a0e10e0 USBPORT!USBPORT_DoneTransfer+0x137
f789ef18 ba120d58 8a0e1028 8083b28b 8a0e1230 USBPORT!USBPORT_FlushDoneTransferList+0x168
f789ef44 ba12eef2 8a0e1028 8083b28b 8a0e1028 USBPORT!USBPORT_DpcWorker+0x224
f789ef80 ba12f06a 8a0e1028 00000001 ffdffa40 USBPORT!USBPORT_IsrDpcWorker+0x380
f789ef9c 8083eb0f 8a0e164c 6b755044 00000000 USBPORT!USBPORT_IsrDpc+0x166
f789eff4 8083a92b b76d5d44 00000000 00000000 nt!KiRetireDpcList+0xca
failure_bucket_id: 0x44_IMAGE_usbehci.sys_date_3_25_2005
bucke_id: 0x44_IMAGE_usbehci.sys_date_3_25_2005
_____________________________________________________________
■
Si sabemos un poco de ingles vemos que nos dice, muy resumidamente, que puede haber dos drivers diferentes, y que cada uno trata de recibir el paquete de datos completamente, lo que produce un error.
Si nos fijamos en la parte donde dice "Arguments" vemos lo siguiente:Arguments:
Arg1: 87e5a490, Address of the IRP
Arg2: 00000d75
Arg3: 00000000
Arg4: 00000000
■
¿Y que hacemos con esto?
Lo que hacemos es, usando el comando !IRP , + el 87e5a490 del argumento, y le pedimos al programa que nos diga lo que hay en esa dirección, entonces:_________________________________________________________________
0: kd> !IRP 87e5a490
Irp is active with 3 stacks 3 is current (= 0x87e5a548)
No Mdl Thread 00000000: Irp stack trace.
cmd flg cl Device File Completion-Context
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
>[ f, 0] 0 c0 8a055618 00000000 b69de300-00000000 Success Error
\Driver\usbehci ax88172Args: b70989c0 00000000 00220003 00000000
_________________________________________________________________
■ La linea resaltada en negrita nos dice que estos son los drivers que han querido recibir el paquete pensando que era suyo.
El primero corresponde al stack USB de Windows... y el segundo a un "dudoso" y no certificado driver de un dispositivo de red (una NIC LAN 10/100). El aix88712 es el chip que monta y su driver se llama igual.
Con esto ya tenemos el problema resuelto!!! Ese driver tiene que ser eliminado!
■
Resumen■
Como se activa: Hacemos click derecho en MI PC- propiedades-Opciones avanzadas, donde dice "inicio y recuperación" le damos a "configuración", y donde dice "Escribir información de depuración" elegimos "Volcado de memoria de núcleo"
■
Como se configura:windbg:vamos al menú [File/Symbol file path] y escribimos lo siguiente:
SRV*c:\websymbols*http://msdl.microsoft.com/download/symbolsSRV*c:\websymbols*http://msdl.microsoft.com/download/symbols■
Como abro el archivo de volcado:hacemos clic en el menú [File/Open Crash Dump...].
■
Donde se guarda:Dicho fichero se va a guardar en la carpeta
windows con el nombre
MEMORY.dmp■
Cual es comando para del "windbg":deberemos escribir la palabra
¡Analyze -v y presionar <Enter> para obtener resultados.
Luego usando el comando
!IRP + el
Nº del argumento
Analyze -v !IRP
■
De donde se descarga:■Tamaño: 17.1 MB
■Idioma Ingles
■
Release version 6.9.3.113 - April 29,2008Debugging Tools for Windows (windbg)
:arrow: :arrow: :arrow: (http://img151.imageshack.us/img151/9783/pfms4.gif) (http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.9.3.113.msi)
■
descarga del Windows debugger desde Microsoft (http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx)
■
descarga Symbol Packages windbg - 202 MB Symbol Packages (http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx)
saludos ;)
Buenísimo.
Agrego una página para ver pantallas azules y sus significados:
http://aumha.org/win5/kbestop.htm
Gracias piltrafa, espero que esto sea util para todos los usuarios que a diario consultan por BSOD.
Igual les recuerdo a todos que no pongan el reinicio automático
Me acuerdo que en una época tenía configurado para que haga un volcado completo. Pero cuando aparecía esta famosa pantalla (me aparecía por una especie de incompatibilidad entre el driver de sonido y un juego en wXP), y sólo si dejaba que termine de hacer el volcado, me cagaba la partición, con lo cual tenía que poner el disco de arranque, darle a fixboot, etc. Y es al día de hoy que no sé por que se comportaba así.
muy bueno, me sirve, porque cada vez que me tira la pantalla esta azul formateo de una :P
saludos!