El día que conocí a Mark

Hola a tod@s, mi nombre es Juan Manuel Castro (Juancho para los amigos :-) ) y también formo parte de este equipo de soporte. Estas 2 últimas semanas han sido muy especiales para mi ya que en la primera tuve la oportunidad de asistir a un excelente curso de depuración para SharePoint y esta segunda he estado en el TechEd para IT Pro que se celebró en Barcelona donde además de aprender un montón de cosas nuevas he podido conocer a uno de los grandes ídolos de quienes nos dedicamos al soporte, Mark Russinovich. Para quienes no le conozcan el fue quien diseño herramientas tan importantes como Process Explorer, Process Monitor o TCPView entre muchas otras además de los libros como Windows Internals.

 

Mark  Mark  Mark & Yo

Durante una de sus Charlas Mark contó como resolvió unos cuantos casos utilizando principalmente las herramientas desarrolladas por el e internet. De las herramientas utilizadas en esos casos me gustaría destacar una de ellas llamada Process Monitor la cual nos sirve para, como dice su nombre, monitorizar la activdad de un proceso, en especial los accesos a disco duro y al registro que hace el mismo. (Esta herramienta es la unión del antiguo FileMon y RegMon los cuales nos siguen siendo de utilidad en sistemas operativos antiguos que no están soportados por Process Monitor)

Lo primero que tenemos que saber es cuándo puede sernos útil utilizar Process Monitor, estas situaciones son por ejemplo al obtener mensajes del tipo acceso denegado, archivo no encontrado o más en general cuando sospechemos que el problema puede estar en la estructura de archivos o el registro de windows.,

Una vez iniciado process monitor aparecerá una ventana como la siguiente en la que empiezan a quedar registrados gran cantidad de eventos.

ProcMon

En general nos interesará detener la captura de eventos ya que los habilitaremos (Ctrl+E o click en la lupa) solo mientras reproducimos el problema.

Me parece que la mejor forma de demostrar la potencia y utilidad de esta herramiente es mediante un ejemplo, por ejemplo, supongamos que tenemos una página web que cuando la accedemos obtenemos un mensaje de error que dice: "Ha ocurrido un error accediendo al archivo", dicho mensaje no nos dice que archivo es el que se ha intentado acceder y por tanto no podemos solucionar el error. En este ejemplo utilizaremos Process Monitor para intentar averiguar dicho archivo.

Para ello hemos creado un pequeño código para producir este error el cual reproducimos a continuación. Tened en cuenta que normalmente no disponemos de acceso al código fuente y el hecho de ver el archivo que se ha intentado acceder en el código no es una alternativa posible.

 public partial class pgDefault : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try {
Response.WriteFile("C:\\FicheroInexistente.txt");
}
catch {
Response.Write("Ha ocurrido un error accediendo al archivo");
}
}
}

Una vez iniciado Process Monitor reproducimos el problema y cuando obtenemos el mensaje de error detenemos la captura (Ctrl+E).
Dada la gran cantidad de eventos que hemos registrado hemos de empezar a aplicar filtros para centrarnos en el que nos ocupa, para ello primero filtraremos por el identificador de proceso (PID) del proceso que procesó la página web. En Internet Information Server 6 (IIS) y posteriores dicho proceso es el w3wp.exe.

NOTA: En caso que tengamos más de un web activo alojado en la misma máquina podemos utilizar IISAPP para obtener el PID del w3wp.exe que nos interesa.

En nuestro caso el PID es 6408, haremos click en el menú Filter opción Filter… (o Ctrl+L)

ProcMon

Una vez hecho esto pulsamos Add y luego OK

ProcMon

Al ir aplicando filtros reduciremos la lista de eventos hasta llegar a los que realmente nos afectan, en este ejemplo vemos que hemos podido identificar el archivo al que no podíamos acceder C:\FicheroInexistente.txt

ProcMon

Tan solo nos queda ver porque ese fichero no está en su sitio para solucionar el problema.

Adicionalmente comentar que podemos guardar los registros de eventos para que sean analizados posteriormente o en otra máquina,

Espero que os haya sido de utilidad este post y para aquellos que no conozcan las utilidades de sysinternals es mas que recomendable que le echeis un vistazo ya que nos ayudan a solucionar más de un problema.

Un saludo,

Juancho