当像java或python这样的32位应用程序尝试打开c:\windows\system32\bash.exe
时,根本找不到此文件。
然而,如果处理ir 64bit,它可以完美地工作。我创建了一个简单的C应用程序来检查它是如何工作的。
#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[]) {
char* path;
OFSTRUCT junk;
if (argc != 2) {
printf("provide path to file");
return 1;
}
path = argv[1];
if( fopen( path, "r")) {
printf("OK: Runtime reports file exists");
} else {
printf("ERR: Runtime reports file does not exist");
}
printf("\n");
if (OpenFile(path, &junk,OF_EXIST) != HFILE_ERROR) {
printf("OK: Win32API reports file exists");
} else {
printf("ERR: Win32API reports file does not exist");
}
return 0;
}
编译时报告OK / OK,并在编译为x86时链接为x64和ERR / ERR。怎么会这样?是否有某种方法可以在Windows中“隐藏”32位应用程序中的文件?
答案 0 :(得分:4)
这是行动中的file system redirector。
在大多数情况下,只要32位应用程序尝试访问%windir%\ System32,就会将访问权限重定向到%windir%\ SysWOW64。
因此,您的32位应用程序正在寻找C:\Windows\SysWOW64\bash.exe
,而这可能并不存在。
推荐的覆盖方式:
32位应用程序可以通过将%windir%\ Sysnative替换为%windir%\ System32来访问本机系统目录。 WOW64将Sysnative识别为一个特殊别名,用于指示文件系统不应重定向访问。
请注意,registry也有类似的重定向。