Removal of Windows Registry Reflection
Platform
Clients - Windows 7
Servers - Windows Server 2008 R2
Feature Impact
Severity - Low
Frequency - Low
Description
The registry reflection process copies registry keys and values between two registry views to keep them in synch. In previous 64-bit installations of Windows, the process reflected a subset of the redirected registry keys between the 32-bit and 64-bit views. However, the implementation of this caused some inconsistencies in the state of the registry. For more details on Registry Reflection, see Registry Reflection.
Starting with Windows 7, we have removed registry reflection completely and merged the keys that used to be reflected:
- HKEY_LOCAL_MACHINE\Software\Classes
- HKEY_LOCAL_MACHINE\Software\Microsoft\COM3
- HKEY_LOCAL_MACHINE\Software\Microsoft\EventSystem
- HKEY_LOCAL_MACHINE\Software\Microsoft\Ole
- HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc
- HKEY_USERS\*\Software\Classes
- HKEY_USERS\*_Classes
Effectively, this provides the same reflection behavior, since changes to these keys immediately are available for both 32-bit and 64-bit applications.
The keys that were reflected conditionally remain split:
- HKEY_LOCAL_MACHINE\Software\Classes\CLSID
- HKEY_LOCAL_MACHINE\Software\Classes\Interface
- HKEY_USERS\*\Software\Classes\CLSID
- HKEY_USERS\*\Software\Classes\Interface
- HKEY_USERS\*_Classes\CLSID
- HKEY_USERS\*_Classes\Interface
They are used to keep the data that should not be shared between 32-bit and 64-bit applications.
Manifestation
CLSID and Interface keys from the list above are not reflected anymore while they are still redirected. While this is the desired behavior in most of cases, it is possible that applications could take a dependency on their reflected behavior in Vista.
The functions allowing applications to control reflection (RegDisableReflectionKey and RegEnableReflectionKey) are no-ops in Windows 7.
Mitigation of Impact
COM is the major consumer of registry reflection. COM and other consumers were updated to accommodate this change. This change does not affect applications that use standard COM APIs..
Solution
Apply one of the following options if you are relying on registry reflection to synchronize 32bit and 64bit views:
Create keys in both views explicitly during installation
Move the keys out of the scope of reflected keys
Check both views of the registry when querying for a reflected key
Note: KEY_WOW64_32KEY and KEY_WOW64_64KEY flags cannot be combined
Apply one of the following options if you are relying on RegDisableReflectionKey functions to disable registry reflection:
- Create keys in both views explicitly during installation
- Move the keys out of the scope of reflected keys
- Use platform-specific subkeys (like x86, amd64 and ia64) to separate bitness-specific data
Links to Other Resources
- Registry Reflection article
- Redirected keys list within Registry Redirector article
- Best Practices for Wow64
Note
These resources may not be available in some languages and countries/regions.