Reflexão do Registo
[As informações neste tópico aplicam-se 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 anteriormente refletidas são compartilhadas. Para obter mais informações, consulte chaves do Registro afetadas pelo WOW64.]
O redirecionador de registro isola aplicativos de 32 bits e 64 bits fornecendo exibições lógicas separadas de certas partes do registro no WOW64. No entanto, os valores de algumas chaves do Registro devem ser os mesmos nas exibições de 32 bits 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 vista tem uma cópia física separada de cada chave de registo refletida, uma para a vista de registo de 32 bits e outra para a vista de registo 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 mistura de dados em processo 32/64 não é permitida no Windows de 64 bits.
A reflexão não está habilitada para chaves do 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 "o último gravador ganha", conforme ilustrado no exemplo a seguir:
- Após uma instalação limpa do Windows de 64 bits, a Wordpad.exe de 64 bits é registrada para lidar com .doc arquivos. O refletor copia o registro de .doc da visualização do Registro de 64 bits para a exibição do Registro de 32 bits.
- Um administrador instala o Office de 32 bits, que regista Winword.exe de 32 bits para tratar ficheiros de .doc na vista de registo 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 bits 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 regista Winword.exe de 64 bits para tratar ficheiros .doc na vista de registo de 64 bits. O refletor do Registro copia essas informações para o Registro de 32 bits, portanto, os aplicativos de 32 bits 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 compartilhar valores específicos de chave do Registro que normalmente são gravados em exibições de registro separadas. Por exemplo, um servidor OLE de 32 bits que pode atender solicitações de clientes de 32 bits e 64 bits pode disponibilizar seus dados de 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 visualizaçã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 do Registro.
A maioria das chaves sob a raiz de classes estão nesta categoria. As atualizações das chaves são refletidas quando a atualização é concluída e o identificador da chave é fechado. Em casos específicos, as gravações em uma chave não sã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 para a exibição do Registro de 64 bits. No entanto, os 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. Os CLSIDs do InProcServer32 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, o DllSurrogate e DllSurrogateExecutable valores do Registro não são refletidos se seu valor for uma cadeia de caracteres vazia.
Para desabilitar e habilitar a reflexão do Registro para uma chave refletida específica, use o RegDisableReflectionKey e funções 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 apenas 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 teclas na lista de reflexão foram desativadas, use a funçãoRegQueryReflectionKey.
As chaves refletidas não devem ser usadas em operações de registro transacionadas. Gravar em chaves refletidas durante uma transação pode fazer com que a transação falhe. Para obter mais informações sobre transações, consulte Kernel Transaction Manager.