Reflexão do Registro
[As informações neste tópico se aplicam ao Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP. A partir do Windows 7 e do Windows Server 2008 R2, o WOW64 não usa mais a reflexão do Registro e as chaves refletidas anteriormente são compartilhadas. Para obter mais informações, consulte Chaves do Registro afetadas por WOW64.]
O redirecionador do Registro isola aplicativos de 32 bits e 64 bits fornecendo exibições lógicas separadas de determinadas partes do registro no WOW64. No entanto, os valores de algumas chaves do Registro devem ser os mesmos nas exibições de 32 e 64 bits.
O processo de reflexão do Registro copia chaves e valores do Registro entre duas exibições do Registro para mantê-las sincronizadas. Cada exibição tem uma cópia física separada de cada chave do Registro refletida, uma para a exibição do Registro de 32 bits e a outra para a exibição do Registro de 64 bits.
Uma chave refletida é copiada quando uma chave é fechada chamando RegCloseKey. Observe que isso dá origem a uma possível condição de corrida: se mais de um processo alterar a chave refletida, a última chamada RegCloseKey determinará o valor final da chave.
O refletor copia dados de ativação COM para servidores locais entre as exibições, mas não copia dados em processo porque a combinação de dados em processo 32/64 não é permitida no Windows de 64 bits.
A reflexão não está habilitada para chaves de registro compartilhadas ou para chaves do Registro que não são redirecionadas. Por exemplo, a reflexão não está habilitada para a chave HKEY_LOCAL_MACHINE\System . Para obter uma lista de chaves do Registro que são redirecionadas, compartilhadas ou refletidas, consulte Chaves do Registro Afetadas pelo WOW64.
A reflexão do Registro usa uma política de "último gravador ganha", conforme ilustrado no exemplo a seguir:
- Após uma instalação limpo do Windows de 64 bits, Wordpad.exe de 64 bits é registrado para lidar com arquivos .doc. O refletor copia o registro .doc da exibição do Registro de 64 bits para a exibição do Registro de 32 bits.
- Um administrador instala o Office de 32 bits, que registra Winword.exe de 32 bits para lidar com arquivos .doc na exibição do Registro de 32 bits. O refletor do Registro copia essas informações para a exibição do Registro de 64 bits, portanto, os aplicativos de 32 e 64 bits iniciam a versão de 32 bits do Winword.exe para arquivos .doc.
- Um administrador instala o Office de 64 bits, que registra Winword.exe de 64 bits para lidar com arquivos .doc na exibição do Registro de 64 bits. O refletor do Registro copia essas informações para o registro de 32 bits, portanto, os aplicativos de 32 e 64 bits iniciam a versão de 64 bits do Winword.exe para arquivos .doc.
Portanto, as informações de associação de arquivo são preservadas para o aplicativo instalado mais recentemente.
Pode ser útil para aplicativos de 32 bits e 64 bits compartilharem valores de chave do Registro específicos que normalmente são gravados em exibições separadas do Registro. Por exemplo, um servidor OLE de 32 bits que pode atender a solicitações de clientes de 32 e 64 bits pode disponibilizar seus dados do Registro de 32 bits para a exibição de 64 bits do registro do sistema.
Quando um componente grava dados no registro do sistema, o WOW64 analisa as informações e faz uma cópia dos dados na exibição alternativa do registro quando apropriado. Normalmente, esse processo mantém duas cópias físicas separadas das mesmas chaves do Registro em ambas as exibições no Registro e é chamado de reflexão do Registro ou espelhamento de registro.
A maioria das chaves na raiz de classes está nessa categoria. Atualizações para as chaves são refletidas quando a atualização é concluída e o identificador para a chave é fechado. Em casos específicos, as gravações em uma chave não serão refletidas se a chave tiver alguma dependência de bitness. Por exemplo, a chave InprocServer32 de 32 bits não é relevante para aplicativos de 64 bits, portanto, a chave InprocServer32 não é refletida na exibição do Registro de 64 bits. No entanto, aplicativos de 64 bits podem usar a chave LocalServer32 de 32 bits e a chave LocalServer32 é refletida.
Para HKEY_LOCAL_MACHINE\Software\Classes\CLSID e HKEY_CURRENT_USER\Software\Classes\CLSID, somente CLSIDs que não especificam InprocServer32 ou InprocHandler32 são refletidos. Somente CLSIDs LocalServer32 são refletidos porque são executados fora do processo e podem ser ativados por aplicativos de 32 ou 64 bits. InProcServer32 CLSIDs não são refletidos porque não é possível carregar uma DLL de 32 bits para execução em um processo de 64 bits ou uma DLL de 64 bits para execução em um processo de 32 bits.
Para HKEY_LOCAL_MACHINE\Software\Classes\Appid e HKEY_CURRENT_USER\Software\Classes\Appid, os valores de registro DllSurrogate e DllSurrogateExecutable não serão refletidos se o valor for uma cadeia de caracteres vazia.
Para desabilitar e habilitar a reflexão do Registro para uma chave refletida específica, use as funções RegDisableReflectionKey e RegEnableReflectionKey . Essas funções não afetam as chaves que não estão na lista de chaves refletidas anteriormente neste tópico. Os aplicativos devem desabilitar a reflexão somente para as chaves do Registro que eles criam e não tentar desabilitar a reflexão para as chaves predefinidas, como HKEY_LOCAL_MACHINE ou HKEY_CURRENT_USER. Para determinar se as chaves na lista de reflexão foram desabilitadas, use a função RegQueryReflectionKey .
As chaves refletidas não devem ser usadas em operações de registro transacionadas. Gravar em chaves refletidas durante uma transação pode causar falha na transação. Para obter mais informações sobre transações, consulte Kernel Transaction Manager.
Tópicos relacionados