Partilhar via


Virtualização do Registro

de virtualização do Registro é uma tecnologia de compatibilidade de aplicativos que permite que operações de gravação do Registro com impacto global sejam redirecionadas para locais por usuário. Esse redirecionamento é transparente para aplicativos que lêem ou gravam no registro. É suportado a partir do Windows Vista.

Essa forma de virtualização é uma tecnologia provisória de compatibilidade de aplicativos; A Microsoft pretende removê-lo de futuras versões do sistema operacional Windows, à medida que mais aplicativos são compatíveis com o Windows Vista e versões posteriores do Windows. Portanto, é importante que seu aplicativo não se torne dependente do comportamento da virtualização do registro no sistema.

A virtualização destina-se apenas a fornecer compatibilidade para aplicativos existentes. Os aplicativos projetados para o Windows Vista e versões posteriores do Windows não devem gravar em áreas confidenciais do sistema, nem devem depender da virtualização para solucionar quaisquer problemas. Ao atualizar o código existente para ser executado no Windows Vista e em versões posteriores do Windows, os desenvolvedores devem garantir que os aplicativos armazenem dados apenas em locais por usuário ou em locais de computador dentro de %alluserprofile% que usam corretamente uma lista de controle de acesso (ACL).

Para obter mais informações sobre como criar aplicativos compatíveis com UAC, consulte o Guia do desenvolvedor do UAC .

Visão geral da virtualização

Antes do Windows Vista, os aplicativos eram normalmente executados por administradores. Como resultado, os aplicativos poderiam acessar livremente arquivos do sistema e chaves de registro. Se esses aplicativos fossem executados por um usuário padrão, eles falhariam devido a direitos de acesso insuficientes. O Windows Vista e versões posteriores do Windows melhoram a compatibilidade de aplicativos para esses aplicativos redirecionando automaticamente essas operações. Por exemplo, as operações de registro para o repositório global (HKEY_LOCAL_MACHINE\Software) são redirecionadas para um local por usuário dentro do perfil do usuário conhecido como de armazenamento virtual (HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software).

A virtualização do Registro pode ser amplamente classificada nos seguintes tipos:

Virtualização do Registro Aberto

Se o chamador não tiver acesso de gravação a uma chave e tentar abri-la, a chave será aberta com o acesso máximo permitido para esse chamador.

Se o sinalizador REG_KEY_DONT_SILENT_FAIL estiver definido para a chave, a operação falhará e a chave não será aberta. Para obter mais informações, consulte "Controlando a virtualização do registro" posteriormente neste tópico.

Write Registry Virtualization

Se o chamador não tiver acesso de gravação a uma chave e tentar gravar um valor nela ou criar uma subchave, o valor será gravado no repositório virtual.

Por exemplo, se um usuário limitado tentar gravar um valor na seguinte chave: HKEY_LOCAL_MACHINE\Software\AppKey1, a virtualização redirecionará a operação de gravação para HKEY_USERS\<SID do usuário>_Classes\VirtualStore\Machine\Software\AppKey1.

Virtualização do Registro de Leitura

Se o chamador ler de uma chave virtualizada, o registro apresentará uma exibição mesclada dos valores virtualizados (do repositório virtual) e dos valores não virtuais (do repositório global) para o chamador.

Por exemplo, suponha HKEY_LOCAL_MACHINE\Software\ AppKey1 contenha dois valores V1 e V2 e que um usuário limitado grave um valor V3 na chave. Quando o usuário tenta ler valores dessa chave, a exibição mesclada inclui os valores V1 e V2 do repositório global e o valor V3 do repositório virtual.

Observe que os valores virtuais têm precedência sobre os valores globais quando presentes. No exemplo acima, mesmo que a loja global tivesse o valor V3 sob essa chave, o valor V3 ainda seria retornado ao chamador da loja virtual. Se a V3 fosse excluída da loja virtual, a V3 seria retornada da loja global. Em outras palavras, se V3 fosse excluído de HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\AppKey1 mas HKEY_LOCAL_MACHINE\Software\AppKey1 tivesse um valor V3, esse valor seria retornado do repositório global.

Escopo da virtualização do Registro

A virtualização do Registro está habilitada somente para o seguinte:

  • Processos interativos de 32 bits.
  • Chaves em HKEY_LOCAL_MACHINE\Software.
  • Chaves nas quais um administrador pode gravar. (Se um administrador não puder gravar em uma chave, o aplicativo teria falhado em versões anteriores do Windows, mesmo que tenha sido executado por um administrador.)

A virtualização do Registro está desabilitada para o seguinte:

  • Processos de 64 bits.

  • Processos que não são interativos, como serviços.

    Observe que usar o registro como um mecanismo de comunicação entre processos (IPC) entre um serviço (ou qualquer outro processo que não tenha virtualização habilitada) e um aplicativo não funcionará corretamente se a chave for virtualizada. Por exemplo, se um serviço antivírus atualizar seus arquivos de assinatura com base em um valor definido por um aplicativo, o serviço nunca atualizará seus arquivos de assinatura porque o serviço lê do repositório global, mas o aplicativo grava no repositório virtual.

  • Processos que representam um usuário. Se um processo tentar uma operação enquanto se faz passar por um utilizador, essa operação não será virtualizada.

  • Processos de modo kernel, como drivers.

  • Os processos que requestedExecutionLevel especificados em seus manifestos.

  • Chaves e subchaves de HKEY_LOCAL_MACHINE\Software\Classes, HKEY_LOCAL_MACHINE\Software\Microsoft\Windowse HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT.

Controlando a virtualização do registro

Além de controlar a virtualização em um nível de aplicativo usando requestedExecutionLevel no manifesto, um administrador pode habilitar ou desabilitar a virtualização por chave para chaves no HKEY_LOCAL_MACHINE\Software. Para fazer isso, use a opção FLAGS do utilitário de linha de comando Reg.exe com os sinalizadores listados na tabela a seguir.

Bandeira Significado
REG_KEY_DONT_SILENT_FAIL Esse sinalizador desabilita a virtualização do registro aberto. Se esse sinalizador estiver definido e uma operação aberta falhar em uma chave que tenha a virtualização habilitada, o registro não tentará reabrir a chave. Se esse sinalizador estiver claro, o registro tentará reabrir a chave com acesso MAXIMUM_ALLOWED em vez do acesso solicitado.
REG_KEY_DONT_VIRTUALIZE Esse sinalizador desabilita a virtualização do registro de gravação. Se esse sinalizador for definido e uma operação de criar chave ou definir valor falhar porque o chamador não tem direito de acesso suficiente à chave pai, o registro falhará a operação. Se esse sinalizador estiver limpo, o Registro tentará gravar a chave ou o valor no repositório virtual. O chamador deve ter a KEY_READ direito na chave pai.
REG_KEY_RECURSE_FLAG Se esse sinalizador for definido, os sinalizadores de virtualização do Registro serão propagados a partir da chave pai. Se esse sinalizador estiver claro, os sinalizadores de virtualização do Registro não serão propagados. A alteração desse sinalizador afeta apenas as novas chaves descendentes criadas depois que o sinalizador é alterado. Ele não define ou limpa esses sinalizadores para chaves descendentes existentes.

 

O exemplo a seguir mostra o uso do utilitário de linha de comando Reg.exe com a opção FLAGS para consultar o estado dos sinalizadores de virtualização para uma chave.

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.

Sempre que a auditoria é habilitada em uma chave que está sendo virtualizada, um novo evento de auditoria de virtualização é gerado para indicar que a chave está sendo virtualizada (além dos eventos de auditoria usuais). Os administradores podem usar essas informações para monitorar o status da virtualização em seus sistemas.

Introdução ao Controle de Conta de Usuário

Compreendendo e configurando o controle de conta de usuário

melhores práticas e diretrizes para desenvolvedores para aplicativos em um ambiente menos privilegiado