x86 应用如何访问 64 位的 System32

date
Dec 14, 2023
slug
how-x86-access-system32-of-64bit
status
Published
tags
WOW64
Windows Internals
summary
在64位的Windows系统中,有一个神秘的文件夹叫做"Sysnative",它在Explorer中无法访问,但在兼容32位应用的情况下扮演重要角色。在64位系统上,一些32位应用需要访问特殊文件夹,例如System32,但直接访问会被重定向到SysWOW64文件夹。为了解决这个问题,可以使用"SysNative"虚拟文件夹,允许32位应用访问64位文件。这个特殊文件夹对于兼容性很重要,因为它允许32位应用与64位应用交互。
type
Post
在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位应用做了一些特殊的文件夹:
notion image
这里需要提到的就是 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
  1. https://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm
  1. https://learn.microsoft.com/en-us/windows/win32/winprog64/file-system-redirector
 

© Frend Guo 2022 - 2024