With the release of Windows 7 of 64-bits, there was a little change introduced in the normal allocation of folders in the Windows directory. Two new folders are included in the 64-bit edition of Windows 7, Windows 8 and Windows 10. They are Sysnative and SysWOW64 folders. This is only in 64-bit Windows. If you run a 32-bit Windows on a 64-bit machine, you won’t see them. Neither will you see them when running 32-bit Windows on a 32-bit machine.
There is another folder outside the Windows directory, and it is called Program Files (x86). We are used to the name of folder Program Files that houses the executables of our programs. In 64-bit systems, the 64-bit programs are stored in the Program Files folder while the 32-bit programs are housed in Program Files (x86). However, Windows uses something like an emulation for running 32-bit programs on a 64-bit machine. And hence, there is need to know and understand what are the system folders under Windows (64 bit) so that you know how to reach the file you want.
Unlike the 32-bit machines, where the 32-bit DLLs are stored in the System32 folder, the 64-bit version of Windows stores DLLs related to 64-bits in the System32 folder. This is to ease the programming purposes and to provide backward compatibility. That is, if a 64-bit program refers to System32 in its code, it will get the 64-bit DLL automatically when called. This helps developers as they don’t have to change the code in their programs for Windows 64-bit.
In short, Windows moved all the 32-bit DLLs from System32 folder in Windows directory to some other folder so that previous programs need not be recoded to get the proper DLLs even when using APIs – after upgrading to 64-bit. The problem occurs when a 32-bit application tries to access the System32 folder. In this case, the program will crash as it is not written to handle 64-bit DLLs.
SysWOW64 Folder in Windows 64-bit
All the 32-bit DLLs have been moved to the new SysWOW64 folder in the 64-bit version of Windows 7, Windows 8 and Windows 10, so when the 32-bit programs call upon 32-bit DLLs, they have to reach the SysWOW64 folder.
You may feel that the developers will have to scan their programs and applications to point the DLL functions to the SysWOW64 folder. But Microsoft has already taken care of it. If it is a 32-bit program that is calling C:\Windows\System32, an emulator will redirect the path to C:\Windows\SysWOW64. That is, to run 32-bit programs in Windows 64-bit, an emulator is used, so that there is proper backward compatibility and to avoid errors when calling DLL files.
Sysnative Folder in Windows 64-bit
There may be cases where a 32-bit program or application might need a 64-bit DLL. In that case, you will have to use the redirection folder Sysnative. You can consider the SysNative to be a virtual folder and an alias that points to the System32 folder. It doesn’t exist physically on your system, as such. So if your 32-bit program needs to access a 64-bit DLL, do not use C:\Windows\System32 because the 32-bit program emulator will take it to the 32-bit DLL folder called SysWOW64. Instead, use C:\Windows\SysNative as the path to the DLL program. Using Sysnative in the path will redirect it to System32 folder instead of SysWOW64 folder.
If you open File Windows Explorer, you will not find the Sysnative folder in C:\Windows. Even if you set Folder Options to show hidden and system folders. This is because, Windows File Explorer is a 64-bit program when running in a 64-bit Windows, and the Sysnative folder is visible and accessible from 32-bit programs only.
To sum up:
- System32 folders contain 64-bit DLL files.
- SysWOW64 contains 32-bit DLL files, and the 32-bit programs are auto-redirected to this folder
- Sysnative is a redirection folder that allows 32-bit programs to call 64-bit DLLs.
Additional read: MSDN.
Want to know the difference between System32 and SysWOW64 folders?