System32 and SysWOW64 on Windows 7
Executive summary
Microsoft does things backwards sometimes, and this is yet another example of this. System32
is the 64-bit Windows system directory and SysWOW64
is the 32-bit Windows system directory — entirely the opposite way around to what the directory names would suggest.
Details
In Windows, there is a "Windows" directory and a "System" directory, and this has been true all of the way back to when Windows was 16-bit.
Windows programs are supposed to locate them using system API functions such as SHGetKnownFolderPath()
and GetSystemDirectory()
; and if everyone had done that the world would be quite different at this point. But too many people foolishly hardwired the actual name of the directory, \Windows\System32
, into their programs, and then ported those programs from 32-bit Windows to 64-bit Windows. As a consequence, a whole lot of programs were looking for 64-bit executables and libraries in the \Windows\System32
directory, whose name they had hardwired. (Ironically, there was the same issue when migrating from 16-bit Windows to 32-bit Windows. The 16-bit "System" directory was \Windows\System
, usually.)
So the people at Microsoft chose to make \Windows\System32
the directory that native, 64-bit, Windows programs would find the 64-bit executables and libraries in, and, since 32-bit programs run on top of a shim layer anyway in 64-bit Windows, accesses to the "System" directory by 32-bit programs are redirected to a new \Windows\SysWOW64
directory.
Hence the bizarre situation that now obtains.
WoW64 stands for Windows 32 on Windows 64:
WoW64 (Windows 32-bit On Windows 64-bit) is a subsystem of the Windows operating system that is capable of running 32-bit applications and is included on all 64-bit versions of Windows — including Windows 2000 Limited Edition, 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, and Windows 7.
It means System Windows(x32) on Windows x64. It contains all x32 system files for compatibility. It runs so 32 bit apps can.