Windows重定向

System32与SysWow64

C:\Windows目录下,存在System32SysWOW64两个文件夹,而让人迷惑的是:

  • System32文件夹下存放的是64位DLL
  • SysWOW64文件夹下存放的是32位DLL

按照文件夹表面意思,System32应该存放32位dll,SysWoW64应该存放64位dll,微软为何要做出如此别扭的存放呢?
这都是为了兼容32位Windows系统造成的。

因为之前的32位机很多代码都是读写文件到System32目录下,而现在出现了64位机,如果按照System32存放32位dll,SysWoW64存放64位dll的方式,势必要修改以前的32位代码中的System32为SysWoW64,为了避免需要修改,干脆就采用了System32存放64位dll,SysWow64存放32位dll的方式。

重定向

而这样又会引发一个问题,64位程序可以直接从System32下读写64位dll了,但32位程序则需要从SysWow64下读写32位dll啊,同样我也不想修改程序中的System32,该怎么办?

这样微软就搞出来个System32重定向的机制,对程序中的%windir%/System32目录,根据编译目标(32位还是64位),重定向到对应目录,即编译32位程序重定向到SysWow64目录下,编译64位程序则还是System32目录。

于是如果你在程序中写出了类似代码:

// 注意需要以管理员权限运行,才有操作C:/Windows/System32的权限
FILE* fp = fopen("C:/Windows/System32/1.txt", "w");
if (fp){
    fputs("hello world!", fp);
    fclose(fp);
}

编译出32位程序,运行在64位Windows上,实际1.txt将被写入到SysWow64目录下。

猜你喜欢

转载自blog.csdn.net/GG_SiMiDa/article/details/81328451