Enhanced Mode en Hyper-V para Windows 8.1 y mi dilema con la ventana de Conexión que no volvía a aparecer

Normalmente, para realizar demostraciones en presentaciones o para escribir un artículo en la web, requiero tener diferentes o variados escenarios; así que recurro al camino más lógico para poder solventar esto, y es claro está, la virtualización. Por lo general, yo recurro a VMware Workstation, ya que me parece un producto bastante robusto, y muy cómodo para interactuar con hardware y recursos gráficos, además de todas sus características; sin embargo, no dejo de lado Hyper-V, pues lo uso casi siempre que preparo un laboratorio por su rapidez y bajo consumo de recursos, pero además también, como en el caso de Windows 8.1, para explorar algunas de las nuevas características que mejoran en la versión.

De vez en cuando me encuentro yo mismo con un problema complejo, y que me cuesta bastante solucionarlo, pero gracias a esto, logro aprender algo nuevo, así que no dejo de ponerlo en lista para subirlo aquí al Blog. En esta ocasión, me enfocaré la primera parte del post en la característica específica llamada Enhanced Mode que aunque poco tiene que ver, directamente ocasionó el problema, para profundizar en el paso a paso que tuve que seguir para encontrar la solución. Esto es una especie de combinación entre exposición de característica, y un problema que aunque les podrá parecer trivial, cobró bastante importancia para mí.

Sobre Enhanced Mode en Windows 8.1

Enhanced Mode o Modo Mejorado – Como probablemente estará en Español-, nos da la posibilidad de realizar una conexión remota, tal cual la conocemos desde hace mucho tiempo a nuestras máquinas virtuales y de esta forma, poder tener mayores recursos dentro de nuestra virtual compartidos con el host, como la posibilidad de hacer Copiado y Pegado entre Host y Virtual, o acceder a unidades físicas como USB, entre otras.

Lo interesante, es que desde Hyper-V en Windows 8.1 ya no es necesario realizar procedimientos adicionales para hacer esta conexión, pues una vez se instale la máquina virtual por primera vez, se le actualicen los Virtual Machine Additions –Controladores- de ser necesarios, y se apague, o reinicie, Hyper-V nos ofrecerá el cuadro de conexión similar al siguiente:

image

De forma predeterminada, nos pedirá indicar la resolución, y al darle clic en el botón Conectar, ingresaremos a la virtual rápidamente a través de RDP con todos sus beneficios. Ahora bien, si se cierra el cuadro de diálogo, Hyper-V iniciará la conexión regular y predeterminada que se tiene a las máquinas virtuales, es decir, tal cual la hemos conocido toda la vida, pero en la barra de herramientas en la parte superior, podremos ver el botón para intercambiar entre Sesión Básica y Modo Mejorado. Si pasamos de Básica a Mejorada, nos volverá a mostrar el cuadro anterior, a menos que ya le hayamos especificado alguna configuración:

E1

En caso de que deseemos más opciones para nuesta conexión remota, desde el cuadro de Conexión, podemos hacer clic en el botón inferior de Mostrar Opciones (Show Options), y de esta forma habilitaremos la pestaña de Recursos Locales (Local Resources) y poder especificar configuraciones de audio remoto, recursos y dispositivos que podremos utilizar en la sesión remota:

image 
Si hacemos clic en Más… (More), debajo de Dispositivos y recursos locales, podremos configurar específcamente qué unidades del host queremos ver en nuestra máquina virtual, agregando incluso los Plug and Play que conecte después:

image

*Nota: Estos dispositivos se verán como unidades de red en la máquina virtual.

Una vez se le de el botón de Conectar, podremos cambiar cuantas veces queramos entre Sesión Básica y Modo Mejorado, sin tener que indicarle las anteriores configuraciones de nuevo, siempre y cuando no se cierre la máquina virtual; de lo contrario, volverá a aparecer el diálogo de conexión.

Como ven, es algo relativamente sencillo, pero que le hacía gran falta a Hyper-V, sobre todo en el aspecto de una interacción más fácil.

¿Y cuál es el dilema entonces?

Hasta aquí, como funcionalidad está todo muy bien… mi problema empezó cuando quise tomar ventaja de una pequeña opción incluida en la ventana de conexión, al darle clic en Mostrar Opciones específicamente, la que dice: “Guardar mis configuraciones para futuras conexiones a esta máquina virtual

H3

Inglés: “Save my settings for future connections to this virtual machine.”

Esto me permitiría, como bien especifica, guardar todo lo que haya habilitado o inhabilitado en Pantalla o Recursos Locales para próximas conexiones remotas utilizando el Modo Mejorado; el inconveniente fue que al habilitar esto y hacer clic en el botón Conectar, no pude volver a encontrar la forma de volver a sacar el cuadro de conexión desde el ambiente gráfico.

¿Por qué la necesidad de entrar? Pues bien, sin este cuadro de diálogo, no tenía forma de cambiar la resolución, agregar nuevos dispositivos, o habilitar/deshabilitar recursos que hubiera compartido con la máquina virtual. Para ser más específicos, ni cambiando entre Sesión Básica a Modo Mejorado, ni cerrando y abriendo nuevamente la máquina virtual, ni mucho menos recurriendo a la ventana de Hyper-V Virtual Machine Connections:

image

Duré casi una hora mientras investigaba los diferentes métodos que conocía para ingresar a la máquina virtual y variar la forma en que cambiaba a Modo Mejorado, pero sin ninguna fortuna. Lo siguiente entonces fue pensar ¿Dónde guarda Windows esta configuración? Es decir, ¿Dónde lee el Sistema Operativo el estado de la opción que guarda o no las configuraciones? Si averiguaba eso, entonces podría revertir manualmente el cambio y volver a tener mi pantalla de vuelta. Para poder encontrar algo, no había otra herramienta mejor que Process Monitor de Sysinternals.

Para mi fortuna, como a cada máquina virtual se le puede activar o no el Modo Mejorado, abrí otra, y antes de volver a habilitar lo de “Guardar las configuraciones para futuras configuraciones en esta máquina virtual”, dejé corriendo Process Monitor, y al hacer clic en Conectar para asegurarme que se guardara, volví a Process Monitor, paré la ejecución con CTRL + E y empecé a investigar los resultados.

Alguna vez tuve la fortuna de que Aaron Margosis de Microsoft, me hiciera caer en cuenta, que una buena forma de seguir ejecuciones de procesos dentro de Process Monitor, es utilizar Process Tree (Árbol de Procesos), pues me daría una vista mucha más organizada, muy similar a la de Process Monitor, y podría ver qué comando ejecutó cada proceso durante el tiempo en que se estuvo monitoreando.
La forma más fácil de ver el Process Tree, es presionando las teclas CTRL + T, o bien yendo al menú Tools y seleccionar Process Tree:

image

En el Process Tree, tuve que ubicar el proceso correspondiente al que maneja Hyper-V para la conexión a las máquinas virtuales, específicamente: VmConnect.exe. No fue muy difícil averiguarlo, pues Process Explorer me lo podría dar fácilmente:

image

*Nota: Hay que tener en cuenta, que la Consola donde se administran las máquinas virtuales, no es más que otra Consola de Administración de Microsoft y por ende, utiliza el proceso genérico de MMC.exe, aunque parar abrir la que corresponde a Hyper-V, utiliza el comando: "C:Windowssystem32mmc.exe" "C:Windowssystem32virtmgmt.msc"

Process Tree me puede mostrar de una manera muy organizada la ejecución que realizó el proceso indicado en el momento de su monitoreo solo con hacer clic en él. Para este caso, encontré un comando muy interesante:

H4

VmConnect estaba llamando a HOME (Que era el nombre de mi equipo) y a Win81-2 (Nombre de la máquina virtual), para después especificarle unos parámetros que eran desconocidos para mí (-G y –C). Esto me decía que a parte de poder trabajarse como línea de comandos, era lo que internamente Windows hacía para conectarse a las diferentes máquinas virtuales. Para comprobarlo, abrí un Símbolo de PowerShell con privilegios elevados y ejecuté: VmConnect.exe –?

Como era de esperarse, obtuve una pequeña ventana de ayuda para el uso de las conexiones a las máquinas virtuales:

image

Aquí podía ver para qué servía cada argumento, por lo que ahora era claro que para la forma como se conectaba Hyper-V internamente, era especificando el Nombre de Equipo, el Nombre de la VM, el GUID (-G) correspondiente a la máquina virtual y finalmente algo llamado Count (-C), que indicaba la cantidad de instancias de la virtual. No entraré en detalles sobre la línea de comandos, pues es algo más para alguien con experiencia en virtualización, y que le guste todos sus “juguetes”.

Lo que me llamó la atención, es que había un parámetro llamado Edit, que según su descripción, abría las configuraciones de conexión, y si no estoy mal, debía referirse al cuadro que estaba buscando. Con esto en mente, desde PowerShell, y siguiendo los parámetros de VmConnect, ejecuté: VmConnect.exe “HOME” “Win81” /Edit y esto obtuve:

image

Como lo pensé, ahí estaba la ventana de configuraciones para las Conexiones Virtuales… Sin embargo, a pesar de que podía quitar la selección y todo volvería a la normalidad, esto no me respondía la primera pregunta, ya que hasta este punto, aún no sabía dónde es que se escribía este cambio dentro de Windows. Para tener total satisfacción, volí a Process Monitor y cerré el Process Tree, pues aunque me mostraría el comando, no me diría dónde estaba escribiendo ese proceso.

Lo siguiente, y teniendo en cuenta el proceso de VmConnect.exe, abrí la ventana de Filter de Process Monitor (CTRL + L), y establecí dos filstros:

Process Name Is VmConnect.exe
Category Is Write

image

Los filtros anteriores me asegurarían que la Traza de Process Monitor sólo me mostraría todo lo relacionado al proceso de VmConnect.exe, pero además, las operaciones que incluyeran específicamente algo de escritura, pues para guardar, Windows tenía que escribir algo. Al hacer clic en el botón Apply y OK, el filtro se me hizo notablemente más pequeño; lo que quedaba era aplicar un poco de lógica a las operaciones que estaba haciendo.

Después de un repaso sobre cada operación, noté que se estaba creando y modificando un archivo con un nombre algo extraño, pero que incluía vmconnect.rdp, y terminaba en .config:

image

Después de un análisis más detallado sobre las propiedades de la operación (Clic derecho, Properties), me di cuenta que la secuencia de caracteres alfanuméricos correspondían al GUID de la máquina virtual:

image

Pocas dudas me quedaban ahora para saber que tenía que ver con la configuración de la Virtual, máxime cuando tenía una operación de escritura. Desde Process Montior, hice clic derecho y seleccioné Jump To para ir rápidamente al directorio donde estaba este archivo:

image

Una vez allí, noté que habían varios archivos de estos, a parte de que estaba en un directorio que administraba Hyper-V:

image

Hice al fin clic derecho sobre el archivo que me había seleccionado Process Monitor, le di en Abrir, hizo el proceso con Visual Studio 2013, que había asociado los .Config al instalarse y después de un pequeño repaso por el XML, encontré por fin la configuración que buscaba:

image

Como lo muestra la captura, SaveButtonChecked estaba con el valor de True, para indicarle a Hyper-V que debía guardar las configuraciones que hiciera sobre la ventana de Conexión.

Finalmente, cambié el contenido del valor de True a False para indicar desactivado, Guardé y después de abrir nuevamente mi máquina virtual, sin necesidad de comandos extras, es decir, con solo hacer doble clic desde la Consola de Administración, obtuve nuevamente mi tan buscada Ventana de Conexión:

image

Ignoro por qué Hyper-V no tiene alguna opción hasta ahora en Windows 8.1 para traer de vuelta esta ventana, en caso de que uno desee hacer otros cambios, independiente de si se le indica que guarde la configuración. Sin embargo, exponiendo el caso a Mark Russinovich, podré hacer llegar a través de él esta retroalimentación al Equipo de Hyper-V.

Saludos,

Checho

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *