martes, febrero 05, 2008

¿Qué sucede cuando ocurre una excepción no manejada en modo usuario en Windows Vista?

Si ha leído artículos anteriores, seguramente ya conozca cómo funciona el mecanismo de excepciones no manejadas en modo usuario (user mode unhandled exceptions) en Windows XP. Básicamente consta de un filtro de excepciones no manejadas que "recubre" a todos los hilos de un proceso. Si se produce alguna excepción que no ha sido adecuadamente tratada, se iniciará el depurador post-mortem por defecto de Windows XP, Dr Watson, que recabará toda la información que ayude en el diagnóstico posterior del error. Sin embargo, esta forma de administrar excepciones en modo usuario es poco robusta. Por ejemplo, si la corrupción es tal que la pila del hilo en cuestión ha sido sobreescrita con basura, todo el mecanismo de tratamiento de excepciones fallará y el usuario únicamente verá como la aplicación desaparece de repente, sin dejar rastro ni mostrarse ningún mensaje de error. Quizá alguna vez haya experimentado esto en su sistema.

Para evitar esta mala experiencia de usuario, el mecanismo de excepciones no manejadas en modo usuario ha sido completamente rediseñado en Windows Vista. A continuación se muestra un diagrama explicativo:



Para empezar, un nuevo servicio denominado "Windows Error Reporting" (WerSvc), alojado en un proceso Svchost.exe, mantiene abierto un puerto de comunicación con el núcleo del sistema operativo. A través de este puerto, el núcleo del sistema operativo estará informado de toda excepción que ocurra en modo usuario (note que ahora es el núcleo el que maneja todo esto, cosa que no sucedía en versiones anteriores de Windows). El kernel conecta con la aplicación y le da la oportunidad de capturar y tratar la excepción. Si ésta no es tratada, la petición se dirige a cualquier otro puerto de excepciones que esté asociado a la aplicación en cuestión. Todas las excepciones no manejadas de aplicaciones Win32 acaban en Csrss.exe, que forma el subsistema Win32 y es un proceso crítico del sistema operativo. Csrss.exe retorna el valor EXCEPTION_CONTINUE_SEARCH, lo que hace que el kernel informe al servicio WerSvc antes mencionado sobre la aplicación que ha producido el fallo. WerSvc, basándose en la información que ha recibido (PID, tipo de excepción, etc.), crea un nuevo proceso, Werfault.exe, que decide si adjuntar o no un depurador a la aplicación. El código de la DLL Faultrep.dll alojada por dicho proceso es la encargada de examinar la clave correspondiente, que es la misma que en versiones anteriores de Windows: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug. Puede ver una captura de la traza correspondiente de Process Monitor:



Si hubiera un depurador disponible, se hará cargo del proceso en cuestión; si no lo hubiera, WerFault.exe generará un reporte del fallo y almacenará la información correspondiente para que sea tratada por el componente "Problemas y soluciones" de Windows Vista (WerCon). Al contrario de lo que ocurre en versiones anteriores de Windows, por defecto no se mantiene una copia del volcado de memoria del proceso en cuestión (imagino que por cuestiones de privacidad). Para modificar este comportamiento, abra Inicio, haga clic sobre Iniciar búsqueda, escriba regedit y elija el programa ofrecido. Acceda a la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting. Cree un nuevo valor DWORD de nombre ForceQueue y establézcale como contenido un 1. Reinicie el sistema y a partir de entonces los volcados de memoria se irán almacenando en las carpetas %AllUsersProfile%\Microsoft\Windows\WER (para procesos del sistema o con privilegios elevados), y en %LocalAppData%\Microsoft\Windows\WER (para el resto).

Otra forma de generar manualmente un volcado pequeño de memoria (minidump) de un proceso en Windows Vista es, desde Administrador de tareas, pestaña Procesos, seleccionar el proceso en cuestión con el botón derecho del ratón y hacer clic sobre Crear archivo de volcado. El volcado tendrá el nombre del proceso, extensión .dmp, y estará en la carpeta de temporales del usuario: %LocalAppData%\Temp. El volcado lo genera Administrador de tareas con la ayuda de la DLL Dbghelp.dll del directorio de sistema.

7 comentarios:

Katla dijo...

Hola Dani, tengo un problemilla incómodo con Windows Vista.
De repente ha dejado de iniciar correctamente. Te explico:
Enciendo el ordenador, y todo va correctamente, selecciono el usuario, aparece el mensaje de iniciando.... y me aparece la pantalla en blanco.
El problema es que no me carga el explorador, con lo cual no me aparece la barra de tareas, ni los iconos, ni el fondo de escritorio, ni la sidebar.
Lo arreglo abriendo iexplorer, haciendo como que voy a guardar la pagina, y así accediendo al archivo explorer de la carpeta de windows.
Me pasa con todos los usuarios, administradores o no.
Como puedo solucionarlo?
Muchas gracias.

Daniel Martín dijo...

Este problema me parece interesante y me gustaría analizarlo con tu ayuda. Escríbeme a mardani29 at yahoo.es ("at" es el símbolo de arroba).

Anónimo dijo...

hola gente me pasa lo mismo que describes antes.. no inicia el explorer.exe ni puedo hacerlo de forma manual... e eliminado los posibles virus y ahora pasa lo mismo pero sin notificar ningun error... pero sigo sion poder entrar a w. vista, nisiquiera een modo "a prueba de fallos" ni de ninguna otra maneera.. agradezco informacion sino debere formaterar desde ya muchas gracias

Anónimo dijo...

酒店經紀PRETTY GIRL 台北酒店經紀人 ,酒店經紀 酒店兼差PRETTY GIRL酒店公關 酒店小姐 彩色爆米花酒店兼職,酒店工作 彩色爆米花禮服店, 酒店上班,酒店工作 PRETTY GIRL酒店喝酒酒店上班 彩色爆米花台北酒店酒店小姐 PRETTY GIRL酒店上班酒店打工PRETTY GIRL酒店打工酒店經紀 彩色爆米花

Anónimo dijo...

禮服店 ,酒店小姐 ,酒店經紀 ,酒店兼差,酒店打工, 酒店上班,酒店經紀PRETTY GIRL 台北酒店經紀人 ,酒店經紀 酒店兼差PRETTY GIRL酒店公關 酒店小姐 彩色爆米花酒店兼職,酒店工作 彩色爆米花禮服店, 酒店上班,酒店工作 PRETTY GIRL酒店喝酒酒店上班 彩色爆米花台北酒店酒店小姐 PRETTY GIRL酒店上班酒店打工PRETTY GIRL酒店打工酒店經紀 彩色爆米花酒店兼差,酒店,酒店經紀,酒店經紀,經紀公司,經紀公司,經紀公司,經紀公司,經紀公司,經紀公司,童裝批發,童裝GAP,酒店經紀,酒店,

milf dijo...

1。那混合物是更缓慢的 ... 但是 Lexus 的即将到来混合版本 ' 将是比气体气体更快的唯一的版本如好地有多马力。不要自夸速度,但是我被吸引轮流开送行为 90,是警察给我一次休息。
2。那不是很
... 只是通过在城市乘公交车往返我储蓄过来 $ 5000/yr 与我的以前的汽车,吉普车切诺基相比。超过 5 年,会是 $ 更不用说会进一步增强我的储蓄的最近的比率远足的 20K。这样除非你是在你的父母的地产上吸的一个浪费的儿子,你的声明是一束公牛。

milf dijo...

3. 45 (90 r/t)
45mpg 天是 2 我的车上> 8 加>>比。那每天是 6 >仑的一笔>蓄, 120 月, 1440 每年者 5040 (根 3.5 元/) ... 加上它发表 1/10th CO2。多愚蠢是它不要骑一个,去算进今天和年龄。
4.缺少了解 ... 是真的,实际上我个人这样那样喜欢它我可能享受所有鼓励;税,合伙用车,免费停车米, prius 业主之间的秘密的信号,等等;这样自私地说那我真地在那里在享受在所有气体汽车业主上的所有权那没有一个想法多少我这辆汽车有的嬉戏。我 junked 我的 SL,郊区对我的 Prius ... 你应该也。