With the introduction of the x64 platform, Windows has to deal with several compatibility problems, which you need to keep in mind when running this article’s script. For example, when you run a 32-bit application on an x64 version of Windows (i.e., Windows Vista x64, Windows 2003 Server x64, or Windows XP x64), the OS must ensure that it loads only 32-bit versions of appropriate components (such as .dll files). Thus, the OS treats any software that uses the registry differently depending on whether it’s a 32-bit application or a native x64 application. After all, you wouldn’t want your x64 application to call the registry looking for the path to a 32-bit COM component because Windows won’t let you mix binaries in the same process space.

Microsoft automatically maps registry calls into either the 64-bit or 32-bit section of the registry. These two sections of the registry usually mirror each other, but keys and values aren’t always shared. Windows mirrors these areas of the registry under a Wow6432Node key. For example, the OS mirrors the keys and values in HKEY_CLASSES_ROOT in the HKEY_CLASSES_ROOT\Wow6432Node key for 32-bit applications.

So keep in mind that if you run a 32-bit version of Perl.exe on an x64 machine, the script will see only the 32-bit part of the registry and its output might be a bit misleading. You can find more information about this registry behavior in the Microsoft article “Registry changes in x64-based versions of Windows Server 2003 and in Windows XP Professional x64 Edition” at http://support.microsoft.com/kb/896459.