/ Windows / 23浏览

x86 应用如何访问 64 位的 System32

在64位的Windows系统中,有个非常神秘的文件夹“Sysnative”,你无法通过 Explorer 去访问它,甚至你都无法找到它,但它却扮演了一个非常重要的角色。下面我们就来聊聊它。

32位和64位的Windows

在广泛使用X86架构的CPU时代,用的系统、应用都是32位的(可能32位还算高的),随着科技的发展,AMD X64 和 64位的Windows/应用逐渐出现在我们的生活中。64位Windows凭借其支持大内存的特性,迅速占领市场。

但早期几乎没什么64位的应用,如果在64位的操作系统上不兼容32位应用的话,可能会浪费了Windows生态近几十年的发展,所以在64位操作系统上兼容32位应用是必须要做的事。

那Windows是怎么来做的呢?

当你在64位的Windows上启动一个32位的应用的时候,一个32位的模拟器就会被叫起来执行这个32位的应用,这个模拟器会让这个应用认为自己运行在一个32位的Windows上,所有的功能都是可以正常使用的。看起来一切都可以正常的使用了,但是问题来了,如果这个应用要访问一些特殊文件夹呢?

在此之前,我们需要了解到Windows为了兼容32位应用做了一些特殊的文件夹:

这里需要提到的就是 System32 这个文件夹,别看他后面有个 32,实质上它是用来放64位应用的。(据说是因为以前的程序很多都是对 System32 硬编码的,所以微软为了方便各大开发者将32位应用迁移到64位就直接保留了这个名称);SysWOW64 其实是用来装32位应用的文件夹。WOW64 的全程是:Windows on Windows64。

好,回到我们刚才的那个问题,如果这个 32 位应用想要访问真实的 System32 文件夹了该怎么办?(直接在 32 位应用中访问 System32 文件夹会被重定向到 SysWOW64 文件夹去)

答案自然是:SysNative

比如我想在32位应用中访问到64位的 SystemSettingsAdminFlows.exe ,那我实质上在代码里面要写的应该是:%windir%/sysnative/SystemSettingsAdminFlows.exe

Sysnative 有什么特殊的?

  • 该文件夹其实是一个虚拟文件夹,不同于 WOW64 是一个真实存在的文件夹
  • Sysnative 不可见,很大一部分原因是因为 explorer.exe 是64位的应用
  • 因为有了 Sysnative ,也可以在32位应用的代码里面访问64位应用了
  • 注册表中也有类似 WOW64 的结构
  • 支持 Windows Vista 及其以上版本

参考链接:

  1. https://www.samlogic.net/articles/32-64-bit-windows-folder-x86-syswow64.htm
  2. https://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm
  3. https://learn.microsoft.com/en-us/windows/win32/winprog64/file-system-redirector
如何通过 C++ 实时监听 ETW 事件
如何通过 C++ 实时监听 ETW 事件
【译】调查并确定 Windows 运行速度变慢问题
【译】调查并确定 Windows 运行速度变慢问题
【译】丢失的 WPA 文档 —— 磁盘使用
【译】丢失的 WPA 文档 —— 磁盘使用
【译】丢失的 WPA 文档 —— CPU 调度
【译】丢失的 WPA 文档 —— CPU 调度
【译】丢失的 WPA 文档 —— CPU 采样
【译】丢失的 WPA 文档 —— CPU 采样
如何通过 PDH(Performance Data Helper) 获取性能计数器的值

0

  1. This post has no comment yet

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注