This articleneeds additional citations forverification. Please helpimprove this article byadding citations to reliable sources. Unsourced material may be challenged and removed. Find sources: "WoW64" – news ·newspapers ·books ·scholar ·JSTOR(May 2013) (Learn how and when to remove this message) |
This articleis missing information about x64 on ARM64; ARM64EC ABI (formerly ARM64X) with 1:1 register mapping to x64 calling convention. Please expand the article to include this information. Further details may exist on thetalk page.(June 2021) |
Other names | Windows 32-bit on Windows 64-bit |
---|---|
Developer(s) | Microsoft |
Initial release | October 25, 2001; 23 years ago (2001-10-25) |
Operating system | Microsoft Windows |
Platform | IA-64,x86-64,ARM64 |
Type | Compatibility layer |
License | Proprietarycommercial software |
Website | docs |
Incomputing onMicrosoft platforms,WoW64 (Windows 32-bitonWindows64-bit) is a subsystem of theWindowsoperating system capable of running32-bit applications on 64-bit Windows.[1] It is included in all64-bit versions of Windows, except in Windows ServerServer Core where it is an optional component, and WindowsNano Server where it is not included.[a] WoW64 aims to take care of many of the differences between 32-bit Windows and 64-bit Windows, particularly involving structural changes to Windows itself.
The WoW64subsystem comprises a lightweightcompatibility 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. WOW64 is implemented using several DLLs, some of which include:[3]
Wow64.dll
, the core interface to theWindows NT kernel thattranslates (thunks) between 32-bit and 64-bit calls, includingpointer andcall stack manipulationsWow64win.dll
, which provides the appropriate entry-points for 32-bit applications (win32k thunks)Wow64cpu.dll
takes care of switching the processor from 32-bit to 64-bit mode. This is computationally cheap, as x86-64 machines have a native mode for running 32-bit x86 code.[4]Wow64cpu.dll
, a "CPU abstraction layer";IA32Exec.bin
, the x86 software emulator; andWowia32x.dll
, the bridge between the emulator and the WOW64 system.[6]xtajit.dll
for x86 emulation, andwowarmhw.dll
for switching to ARM32 mode.[3]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 theRegistry, 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 arehardcoded to use that path. When executing 32-bit applications, WoW64 transparently redirects access to "system32" (e.g. DLL loads) to%SystemRoot%\SysWoW64
, which contains 32-bit libraries and executables. Exceptions from these redirects are:[7]
%SystemRoot%\system32\catroot
%SystemRoot%\system32\catroot2
%SystemRoot%\system32\driverstore
(redirected on Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP)%SystemRoot%\system32\drivers\etc
%SystemRoot%\system32\logfiles
%SystemRoot%\system32\spool
The redirection helps to keep 32-bit applications working without them needing to be aware of the WoW64 status.[7] If a 32-bit application wants to access the real%SystemRoot%\System32
, it can do so through the pseudo-directory%SystemRoot%\sysnative
since Windows Vista.[7] Detection of Wow64 status is possible viaIsWow64Process()
.
There are twoProgram Files directories each visible to both 32-bit and 64-bit applications. The directory that stores the 32 bit files is calledProgram Files (x86) to differentiate between the two, while the 64 bit maintains the traditionalProgram Files name without any additional qualifier. File system redirection is not used to maintain the separation; instead, WoW64 changesFOLDERID_ProgramFiles
and similar query results to point installer programs to the correct directory.[8]
A few new directories are also found on ARM64, where WOW64 handles not only the running of 32-bit x86 programs, but also 32-bit ARM programs, which usesSysArm32
instead. ARM64 also supports the so-called CHPE "compiled-hybrid-PE", which has ARM64 code in a x86 dll container (for more efficient, emulation-free compatibility); these dlls are found inSyCHPE32
.[9]
32-bit applications that include only 32-bit kernel-modedevice 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.
32-bit 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, odbcad32.exe, to registerODBC connections for 32-bit applications). 16-bitlegacy applications for MS-DOS and early versions of Windows are usually incompatible with 64-bit versions of Windows Vista, 7, 8, and 10, but can be run on a 64-bit Windows OS via virtualization software. 32-bit versions of Windows XP, Vista, 7, 8, and 10 on the other hand, can usually run 16-bit applications with few to no problems. 16-bit applications cannot be directly run under x64 editions of Windows, because the CPU does not supportVM86 mode when running in x64.
Internet Explorer is implemented as both a 32-bit and a 64-bit application because of the large number of 32-bitActiveX components on the Internet that would not be able to plug into the 64-bit version.
Previously, the 32-bit version was used by-default and it was difficult to set the 64-bit version to be the default browser. This changed in Internet Explorer 10, which ran 32-bit add-ons inside a 64-bit session, eliminating the need to switch between the two versions. If a user was to go into the 32-bit folder (typically C:\Program Files (x86)\Internet Explorer) and double-click the iexplore.exe file there, the 64-bit version will still load. In Internet Explorer 9 and previous, this would load only the 32-bit version.
As of 2010[update], a bug in the translation layer of the x64 version of WoW64[10][11] also renders all 32-bit applications that rely on theWindows API function GetThreadContext incompatible. Such applications include application debuggers, call stack tracers (e.g. IDEs displaying call stack) and applications that usegarbage collection (GC) engines. One of the more widely used but affected[12] GC engines is theBoehm GC. It is also used as the default garbage collector of the equally popularMono. 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 has been provided as of July 2016, although workarounds have been suggested.[13]
According to Microsoft, 32-bit software running under WOW64 (x64) has similar performance to executing under 32-bit Windows, but with fewer threads possible. On a non-x64 system, WOW64 incurs a performance overhead due to the software emulation involved.[5]
A 32-bit application can be given a full 4 gigabytes ofvirtual memory on a 64-bit system, whereas on a 32-bit system, some of this addressable memory is lost because it is used by thekernel and memory-mapped peripherals such as thedisplay adaptor, typically resulting in apps being able to use either 2GB or 3GB of RAM at most.
wow64.dll
,wow64win.dll
, andwow64cpu.dll
.Wow64cpu.dll
as part of the IA-64 implementation.