Virtualización del registro

La virtualización del Registro es una tecnología de compatibilidad de aplicaciones que permite que las operaciones de escritura del Registro que tengan un impacto global se redirijan a ubicaciones por usuario. Esta redirección es transparente para las aplicaciones que leen o escriben en el registro. Se admite a partir de Windows Vista.

Esta forma de virtualización es una tecnología provisional de compatibilidad de aplicaciones; Microsoft pretende quitarlo de versiones futuras del sistema operativo Windows a medida que más aplicaciones son compatibles con Windows Vista y versiones posteriores de Windows. Por lo tanto, es importante que la aplicación no dependa del comportamiento de la virtualización del registro en el sistema.

La virtualización solo está pensada para proporcionar compatibilidad con las aplicaciones existentes. Las aplicaciones diseñadas para Windows Vista y versiones posteriores de Windows no deben escribir en áreas del sistema confidenciales, ni deben depender de la virtualización para solucionar ningún problema. Al actualizar el código existente para que se ejecute en Windows Vista y versiones posteriores de Windows, los desarrolladores deben asegurarse de que las aplicaciones solo almacenen datos en ubicaciones por usuario o en ubicaciones de equipos dentro de %alluserprofile% que usen correctamente una lista de control de acceso (ACL).

Para obtener más información sobre cómo compilar aplicaciones compatibles con UAC, consulte la Guía para desarrolladores de UAC.

Información general sobre la virtualización

Antes de Windows Vista, los administradores suelen ejecutar aplicaciones. Como resultado, las aplicaciones podrían acceder libremente a archivos del sistema y claves del Registro. Si un usuario estándar ejecutara estas aplicaciones, se produciría un error debido a derechos de acceso insuficientes. Windows Vista y versiones posteriores de Windows mejoran la compatibilidad de las aplicaciones para estas aplicaciones mediante la redirección automática de estas operaciones. Por ejemplo, las operaciones del Registro en el almacén global (HKEY_LOCAL_MACHINE\Software) se redirigen a una ubicación por usuario dentro del perfil del usuario conocido como almacén virtual (HKEY_USERS\<SID> de usuario_Classes\VirtualStore\Machine\Software).

La virtualización del Registro se puede clasificar ampliamente en los siguientes tipos:

Abrir virtualización del Registro

Si el autor de la llamada no tiene acceso de escritura a una clave e intenta abrir la clave, la clave se abre con el acceso máximo permitido para ese autor de la llamada.

Si se establece la marca REG_KEY_DONT_SILENT_FAIL para la clave, se produce un error en la operación y no se abre la clave. Para obtener más información, vea "Control de la virtualización del Registro" más adelante en este tema.

Virtualización de registro de escritura

Si el autor de la llamada no tiene acceso de escritura a una clave e intenta escribir un valor en ella o crear una subclave, el valor se escribe en el almacén virtual.

Por ejemplo, si un usuario limitado intenta escribir un valor en la siguiente clave: HKEY_LOCAL_MACHINE\Software\AppKey1, la virtualización redirige la operación de escritura a HKEY_USERS\<SID> de usuario_Classes\VirtualStore\Machine\Software\AppKey1.

Leer virtualización del Registro

Si el autor de la llamada lee de una clave virtualizada, el registro presenta una vista combinada de los valores virtualizados (del almacén virtual) y los valores que no son virtuales (del almacén global) al autor de la llamada.

Por ejemplo, supongamos queHKEY_LOCAL_MACHINE\Software\AppKey1 contiene dos valores V1 y V2 y que un usuario limitado escribe un valor V3 en la clave. Cuando el usuario intenta leer valores de esta clave, la vista combinada incluye los valores V1 y V2 del almacén global y el valor V3 del almacén virtual.

Tenga en cuenta que los valores virtuales tienen prioridad sobre los valores globales cuando están presentes. En el ejemplo anterior, incluso si el almacén global tenía el valor V3 en esta clave, el valor V3 todavía se devolvería al autor de la llamada desde el almacén virtual. Si V3 se eliminara del almacén virtual, se devolverá V3 desde el almacén global. Es decir, si V3 se eliminara de HKEY_USERS\<SID> de usuario_Classes\VirtualStore\Machine\Software\AppKey1 , pero HKEY_LOCAL_MACHINE\Software\AppKey1 tuviera un valor V3, ese valor se devolvería desde el almacén global.

Ámbito de virtualización del Registro

La virtualización del Registro solo está habilitada para lo siguiente:

  • Procesos interactivos de 32 bits.
  • Claves en HKEY_LOCAL_MACHINE\Software.
  • Claves en las que un administrador puede escribir. (Si un administrador no puede escribir en una clave, la aplicación habría producido un error en versiones anteriores de Windows incluso si fuera ejecutada por un administrador).

La virtualización del Registro está deshabilitada para lo siguiente:

  • Procesos de 64 bits.

  • Procesos que no son interactivos, como servicios.

    Tenga en cuenta que el uso del Registro como mecanismo de comunicación entre procesos (IPC) entre un servicio (o cualquier otro proceso que no tenga habilitada la virtualización) y una aplicación no funcionará correctamente si la clave está virtualizada. Por ejemplo, si un servicio antivirus actualiza sus archivos de firma en función de un valor establecido por una aplicación, el servicio nunca actualizará sus archivos de firma porque el servicio lee del almacén global, pero la aplicación escribe en el almacén virtual.

  • Procesos que suplantan a un usuario. Si un proceso intenta una operación al suplantar a un usuario, esa operación no se virtualizará.

  • Procesos en modo kernel, como controladores.

  • Procesos que han solicitadoExecutionLevel especificados en sus manifiestos.

  • Claves y subclaves de HKEY_LOCAL_MACHINE\Software\Classes, HKEY_LOCAL_MACHINE\Software\Microsoft\Windowsy HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT.

Control de la virtualización del registro

Además de controlar la virtualización en un nivel de aplicación mediante requestedExecutionLevel en el manifiesto, un administrador puede habilitar o deshabilitar la virtualización por clave para las claves de HKEY_LOCAL_MACHINE\Software. Para ello, use la opción Reg.exe utilidad de línea de comandos FLAGS con las marcas enumeradas en la tabla siguiente.

Marca Significado
REG_KEY_DONT_SILENT_FAIL Esta marca deshabilita la virtualización del Registro abierta. Si se establece esta marca y se produce un error en una operación abierta en una clave que tiene habilitada la virtualización, el Registro no intenta volver a abrir la clave. Si esta marca está desactivada, el Registro intenta volver a abrir la clave con MAXIMUM_ALLOWED acceso en lugar del acceso solicitado.
REG_KEY_DONT_VIRTUALIZE Esta marca deshabilita la virtualización del Registro de escritura. Si se establece esta marca y se produce un error en una operación de creación de clave o valor establecido porque el autor de la llamada no tiene suficiente acceso a la clave primaria, se produce un error en la operación del Registro. Si esta marca está desactivada, el Registro intenta escribir la clave o el valor en el almacén virtual. El autor de la llamada debe tener la KEY_READ derecha en la clave primaria.
REG_KEY_RECURSE_FLAG Si se establece esta marca, las marcas de virtualización del Registro se propagan desde la clave primaria. Si esta marca está desactivada, no se propagan las marcas de virtualización del Registro. Cambiar esta marca solo afecta a las nuevas claves descendientes creadas después de cambiar la marca. No establece ni borra estas marcas para las claves descendientes existentes.

 

En el ejemplo siguiente se muestra el uso de la utilidad de línea de comandos Reg.exe con la opción FLAGS para consultar el estado de las marcas de virtualización de una clave.

C:\>reg flags HKLM\Software\AppKey1 QUERY

HKEY_LOCAL_MACHINE\Software\AppKey1

        REG_KEY_DONT_VIRTUALIZE: CLEAR
        REG_KEY_DONT_SILENT_FAIL: CLEAR
        REG_KEY_RECURSE_FLAG: CLEAR

The operation completed successfully.

Cada vez que se habilita la auditoría en una clave que se está virtualizando, se genera un nuevo evento de auditoría de virtualización para indicar que la clave se virtualiza (además de los eventos de auditoría habituales). Los administradores pueden usar esta información para supervisar el estado de la virtualización en sus sistemas.

Introducción con control de cuentas de usuario

Descripción y configuración del control de cuentas de usuario

Procedimientos recomendados para desarrolladores e instrucciones para aplicaciones en un entorno con menos privilegios