|This article needs additional citations for verification. (May 2013)|
WoW64 (Windows 32-bit on Windows 64-bit) is a subsystem of the Windows operating system capable of running 32-bit applications and is included on all 64-bit versions of Windows—including Windows XP Professional x64 Edition, IA-64 and x64 versions of Windows Server 2003, as well as 64-bit versions of Windows Vista, Windows Server 2008, Windows 7, Windows 8 and Windows 8.1. In Windows Server 2008 R2 Server Core, it is an optional component. WoW64 is designed to take care of many of the differences between 32-bit Windows and 64-bit Windows, particularly involving structural changes to Windows itself.
The WoW64 subsystem comprises a lightweight compatibility layer that has similar interfaces on all 64-bit versions of Windows. It aims to create a 32-bit environment that provides the interfaces required to run unmodified 32-bit Windows applications on a 64-bit system. Technically, WoW64 is implemented using three dynamic-link libraries (DLLs):
Wow64.dll, the core interface to the Windows NT kernel that translates between 32-bit and 64-bit calls, including pointer and call stack manipulations
Wow64win.dll, which provides the appropriate entry-points for 32-bit applications
Wow64cpu.dll, which takes care of switching the processor from 32-bit to 64-bit mode
Despite its outwardly similar appearance on all versions of 64-bit Windows, WoW64's implementation varies depending on the target processor architecture. For example, the version of 64-bit Windows developed for the Intel Itanium 2 processor (known as the IA-64 architecture) uses
Wow64win.dll to set up the emulation of x86 instructions within the Itanium 2's unique instruction set. This emulation is a much more computationally expensive task than the
Wow64win.dll's functions on the x86-64 architecture (alias "Intel 64" in the Intel terminology, or "AMD64" in the original AMD implementation of this 64-bit mode, also used in the architecture type name of Windows installers), which switches the processor hardware from its 64-bit mode to compatibility mode when it becomes necessary to execute a 32-bit thread, and then handles the switch back to 64-bit mode.
Registry and file system
The WoW64 subsystem also handles other key aspects of running 32-bit applications. It is involved in managing the interaction of 32-bit applications with the Windows components such as the Registry, which has distinct keys for 64-bit and 32-bit applications. For example HKEY_LOCAL_MACHINE\Software\Wow6432Node is the 32-bit equivalent of HKEY_LOCAL_MACHINE\Software (although 32-bit applications are not aware of this redirection). Some Registry keys are mapped from 64-bit to their 32-bit equivalents, while others have their contents mirrored, depending on the edition of Windows.
The operating system uses the
%SystemRoot%\system32 directory for its 64-bit library and executable files. This is done for backward compatibility reasons, as many legacy applications are hardcoded to use that path. When executing 32-bit applications, WoW64 transparently redirects 32-bit DLLs to
%SystemRoot%\SysWoW64, which contains 32-bit libraries and executables. 32-bit applications are generally not aware that they are running on a 64-bit operating system. 32-bit applications can access
%SystemRoot%\System32 through the pseudo directory
There are two Program Files directories, both visible to both 32-bit and 64-bit applications. The directory that stores the 32 bit files is called Program Files (x86) to differentiate between the two, while the 64 bit maintains the traditional Program Files name without any additional qualifier.
32-bit applications that include only 32-bit kernel-mode device drivers, or that plug into the process space of components that are implemented purely as 64-bit processes (e.g. Windows Explorer) cannot be executed on a 64-bit platform. Service applications are supported. The SysWOW64 folder located in the Windows folder on the OS drive contains several applications to support 32-bit applications (e.g. cmd.exe, useful to register 32bit windows services, odbcad32.exe, to register ODBC connections for 32-bit applications). 16-bit legacy applications for MS-DOS and early versions of Windows are usually incompatible with 64-bit versions of Windows Vista, 7 and 8, but can be run on a 16-bit or 32-bit Windows OS via Microsoft Virtual PC or DOSBox. 32-bit versions of Windows XP, Vista, 7, and 8, on the other hand, can usually run 16-bit applications with few to no problems. The component that makes this possible, Windows on Windows 32-bit, is replaced in 64-bit Windows OSs by WoW64, rendering nearly all 16-bit applications unexecutable.
Internet Explorer is implemented as both a 32-bit and a 64-bit application because of the large number of 32-bit ActiveX components on the Internet that would not be able to plug into the 64-bit version. The 32-bit version is used by default and the 64-bit version cannot be set to be the default browser.
A bug in the translation layer of the x64 version of WoW64 also renders all 32-bit applications that rely on the Windows API function GetThreadContext incompatible. Such applications include application debuggers, call stack tracers (e.g. IDEs displaying call stack) and applications that use garbage collection (GC) engines. One of the more widely used but affected GC engines is the Boehm GC. It is also used as the default garbage collector of the equally popular Mono. While Mono has introduced a new (but optional) GC as of October 2010 called SGen-GC, it performs stack scanning in the same manner as Boehm GC, thus also making it incompatible under WoW64. No fix is planned and no workarounds have been provided by Microsoft as of 15th November 2010.
|This section requires expansion. (August 2013)|
According to Microsoft, 32-bit software running under WOW64 has a similar performance when executing under 32-bit Windows, but with fewer threads possible and other overheads.
- Windows on Windows
- User Account Control also has a mechanism for dealing with "older" programs that write files to specific areas, on "newer" windows. Files written to system32 from a process without administrator privileges will be redirected to a virtual store directory.
- Saw, Zach (November 13, 2010). "WOW64 bug: GetThreadContext() may return stale contents". Zach Saw's Blog. Retrieved 2010-11-15.
- "WOW64 OS bug: Old 32-bit XP apps failing under Win7 WOW64". Microsoft Developer Network. November 11, 2010. Retrieved 2010-11-15.
- "Discussions about the Boehm Garbage Collector (Boehm GC).". Retrieved 2010-11-25.
- "Performance and Memory Consumption Under WOW64". Microsoft. Retrieved 2013-05-06.
- MSDN page on running 32 bit apps on 64 bit Windows
- Comprehensive Reference on WOW64 Folders, Variables, Values and References