En la mayoría de los casos que escribo en blogs, muestro cómo utilicé alguna característica de Process Monitor para encontrar pistas, causas o incluso una solución. Una de las características que más he utilizado en casos donde el problema se reproduce al inicio de sesión, o antes, es la de Boot Logging que me permite monitorear Windows incluso después de reiniciar el equipo. Sin embargo, no siempre es práctico tener gran cantidad de datos cuando se está buscando información concreta; pero, reproducida en escenarios de cierre o inicio de sesión. En este post mostraré cómo aprovechar PsExec y Process Monitor para cubrir este escenario sin necesidad de habilitar Boot Logging.

Nota: Si lo que se quieres es monitorear controladores u otro tipo de cosas que suceden antes del inicio de sesión, la única opción es Boot Loggging.

Caso real

Consideremos un problema que ha tenido cierta frecuencia en los foros de Microsoft; básicamente iniciamos sesión en Windows y nos encontramos con un mensaje de error como este:

Monitorear Windows en el inicio y cierre de sesión

Como casi siempre pasa, después de aceptar el mensaje, no sucede nada más. El Administrador de tareas (si estamos de suerte) mostraría algo así:

Monitorear Windows en el inicio y cierre de sesión

Deshabilitarlo serviría para evitar el mensaje, pero estaría actuando directamente sobre el proceso real de wscript.exe y no en la causa raíz. No se recorrería el camino fácil. Como dije al inicio, el camino directo sería usar Boot Logging; aun así podemos combinar Process Monitor y PsExec para hacerlo más productivo:

Requerimientos

  1. Descargar Process Monitor desde aquí y descomprimir el archivo .ZIP.
  2. Descargar PsExec desde aquí y descomprimir el archivo .ZIP.
  3. Copiar y pegar Procmon.exe y PsExec.exe al directorio raíz C:\

Monitorear Windows en el inicio y cierre de sesión

Combinando Procmon y PsExec

Hacemos clic derecho en el botón de Inicio y luego en Símbolo del sistema (administrador):

Monitorear Windows en el inicio y cierre de sesión

Aceptamos la ventana del UAC y una vez en la consola, ejecutamos en orden:

cd C:\

Esto nos ubicará en el directorio raíz C:\

Monitorear Windows en el inicio y cierre de sesión

Una vez en la raíz, podremos ejecutar Procmon y PsExec. Para que Proccess Monitor siga ejecutándose incluso después del cierre de sesión, ejecutamos:

PsExec –s –d C:\Procmon.exe /AccepEula /Quiet /BackingFile C:\Log.pml Monitorear Windows en el inicio y cierre de sesión

Nota: PsExec me permite ejecutar procesos remotamente, pero además utilizar el usuario con súper poderes SYSTEM con la bandera –s; –d es para que PsExec se cierre sin esperar a que Procmon.exe lo haga y lo demás es para aceptar el EULA, que no muestre mensajes y que todo se vaya guardando en el archivo Log.pml ubicado en la misma unidad.

Utilizando Process Explorer de Sysinternals se puede verificar que Process Monitor está en ejecución, bajo la sesión 0 perteneciente a los servicios y con el usuario de SYSTEM:

Monitorear Windows en el inicio y cierre de sesión

Procedemos a cerrar sesión, iniciar nuevamente, esperar a que el mensaje extraño vuelva a salir y hacemos lo siguiente: Clic derecho otra vez en el botón de Inicio, Símbolo del sistema (administrador):

Monitorear Windows en el inicio y cierre de sesión

En el símbolo del sistema, ejecutamos:

cd C:\

Monitorear Windows en el inicio y cierre de sesión

Finalmente, ejecutamos lo siguiente para terminar el monitoreo:

PsExec –s –d C:\Procmon.exe /AcceptEula /Terminate

Monitorear Windows en el inicio y cierre de sesión

Si todo sale bien, el log nos habrá quedado guardado en la raíz del disco local C:

Monitorear Windows en el inicio y cierre de sesión

Lo único que queda es abrir el log y y empezar a jugar con Process Monitor para descubrir qué causa el mensaje de error. Por ejemplo y para este caso, lo primero sería referenciar detalles sobre el proceso que lanza el wscript.exe; esto es fácil presionando las teclas CTRL + T para abrir el árbol de procesos y ubicar la ocurrencia que buscamos de wscript:

Monitorear Windows en el inicio y cierre de sesión

Tal como ven, el proceso padre fue Explorer.exe, con su respectivo PID 2384. Ya que es el Explorer.exe, indica que probablemente se ejecutó algún archivo al momento de iniciar sesión, no necesariamente que el proceso haya sido alterado. Una buena práctica es siempre ver qué se está lanzando en ubicaciones tan comunes como la carpeta de Inicio que ha existido durante tanto tiempo y que le dice a Windows todo lo que debe ejecutar automáticamente. Para que Process Monitor nos muestre las operaciones de lectura que hace solo en este directorio, podemos filtrar diciendo que excluya todos los PID diferentes al 2384 –en este caso-, que el resultado sea SUCCESS, la ruta contenga \Startup\ y la categoría sea Read:

Monitorear Windows en el inicio y cierre de sesión

Noten que en la mayoría excluí lo que no quería, con el resultado que deseaba. El resultado sería así:

Monitorear Windows en el inicio y cierre de sesión

Gracias a que lo que dejaría Process Monitor, identificar un archivo extraño como un acceso directo se podría hacer sin mayor dificultad.

Espero sea de utilidad.

Saludos.