With the release of Windows Vista / Windows Server 2008, Microsoft introduce a couple of significant changes that affect how the runtime environment is presented to a program that is running based on the 32/64 bit aspect of the program as well as whether it is running with or without elevation [admin rights] or if any application compatibility settings have been set for the program to make it think it's running on an older release of Windows. UAC [User Account Control] is heavily involved in this behavior along with the "virtualization" that it provides.
In a nutshell, 64-bit application programs, which first gained full support with Vista / 2008, are expected to be 100% fully compliant with "how things get done properly on 64-bit Windows".
32-bit application programs, on the other hand, are effectively treated as a dumpster fire in need of being tamed when it comes to their behavior. Prior to Vista and UAC, most 32-bit apps simply assumed that the user had full admin rights and they operated as if they should have carte blanche access to anything & everything in the file system and registry. The moment that UAC stripped away admin rights and forced most programs to run under a restricted access token as a normal user, those programs would begin to break in various & sundry ways. To compensate for this and to minimize the "breakage", Microsoft introduced some mini-filter drivers that intercept all access to the file system and registry that is performed by 32-bit applications and it selectively redirects those accesses to locations that are part of the user's profile instead of common/shared "system" areas that are now subjected to much more restrictive permissions. One of the most common issues to be dealt with had to do with INI files and the API functions that are used to access them. Many applications assumed they could write to any INI file in or under "C:\Windows", which is now disallowed. So, any time a 32-bit application attempted to write to a INI file in/under "C:\Windows", the I/O operations got redirected to a location under "C:\Users\<profile-name>\AppData\...". Likewise, 32-bit applications attempting to read/write the registry get selectively redirected to a "WOW6432Node" subkey that is an immediately subordinate of a key that shouldn't be accessed without "awareness" of the overall 64-bit runtime environment. For example, "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node" is where a 32-bit app is redirected to when it attempts to access "HKEY_LOCAL_MACHINE\SOFTWARE".
Just do some Google searches for "Windows", "UAC" and "Virtualization" and then do some reading.