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

Note

These resources may not be available in some languages and countries/regions.