Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get 64bit system folder in a 32bit application?

In a 32bit application, I have to copy a file to the 64bit system folder
(C:\Windows\System32\ instead of C:\Windows\SysWOW64\)

For this, I tried to get the folder using the WinAPI function SHGetKnownFolderPath with parameter FOLDERID_ProgramFilesX64 (GUID: 6D809377-6AF0-444b-8957-A3773F02200E).

But unfortunately, this is not allowed (as mentioned in the remarks section) and the function result correctly is 'file not found'.

Is there a way to accomplish this?

like image 300
joe Avatar asked Feb 13 '23 00:02

joe


1 Answers

You are requesting the PROGRAM FILES folder, not the SYSTEM folder. Look at FOLDERID_System and FOLDERID_SystemX86 instead.

Alternatively, use FOLDERID_Windows to get the Windows installation folder, and then append the special SysNative alias to the end of it, let the File System Redirector locate the actual folder for you, per the documentation:

32-bit applications can access the native system directory by substituting %windir%\Sysnative for %windir%\System32. WOW64 recognizes Sysnative as a special alias used to indicate that the file system should not redirect the access. This mechanism is flexible and easy to use, therefore, it is the recommended mechanism to bypass file system redirection. Note that 64-bit applications cannot use the Sysnative alias as it is a virtual directory not a real one.

like image 164
Remy Lebeau Avatar answered Feb 15 '23 13:02

Remy Lebeau