
Windows中的sysnative文件夹
本文最后更新于 2025-03-15,文章内容可能已经过时。
Windows中的sysnative文件夹
在工作过程中,通常会碰到木马告警信息路径中有sysnative文件夹的路径存在,但是一般情况下输入cmd或者文件管理器进入这个文件夹通常是显示找不到的。
比如这里我模拟运行一个123.txt的文件(假设123.txt这个文件存在
通常会显示这个sysnative文件夹找不到或者文件不存在
哪这个文件夹究竟是做什么用的呢?
先上结论:
其实%WINDIR%\SysNative文件夹是不存在的,它只是64位Windows系统提供的一种重定向机制。
在windows运行32位程序过程中,实际会调用windows的WoW64技术
(直接在32位应用中访问System32文件夹会被重定向到SysWOW64文件夹去)
此时,被wow64技术模拟运行的32位程序会使用SysNative文件夹,来实现在64位windows上运行32程序和访问64位的文件夹或者文件
32位和64位的Windows
在广泛使用X86架构的CPU时代,用的系统、应用都是32位的(可能32位还算高的),随着科技的发展,AMD X64 和 64位的Windows/应用逐渐出现在我们的生活中。64位Windows凭借其支持大内存的特性,迅速占领市场。
但早期几乎没什么64位的应用,如果在64位的操作系统上不兼容32位应用的话,可能会浪费了Windows生态近几十年的发展,所以在64位操作系统上兼容32位应用是必须要做的事。
Windows x86文件系统
通常在装好window后,在装好64位的Windows之后,能在系统盘(通常是C盘)下看到这么一个文件夹,
它比我们都知道的Program Files文件夹多出来个”(x86)“的后缀。那这个带”x86″的文件夹和不带”x86″的有什么区别呢?
简单来说:Program Files (x86)存放了一些32位的系统文件。它和正常的Program Files以及Windows文件夹一样,都属于系统文件夹,请勿随意改动。
window的WOW64机制
64位Windows中提供了一种技术,Windows on Windows 64(即WoW64)。它可以使32位的应用程序正常地运行在64位的Windows中,这样用户在从32位到64位过渡的过程中,不会感受到很大的不便。为了能让32位的程序正常运行,64位的Windows中自带了一大部分的32位的系统文件,当32位程序运行的时候,系统会给它虚拟出一个32位的环境,这样32位程序会以为自己运行在32位Windows中。
Windows的系统文件主要是存放在%SystemDrive%\Program Files
和%Windir%\System32
中(即通常的C:\Program Files
和C:\Windows\System32
)。
64位系统中,这两个文件夹存放的是64位的系统文件,为了存放32位的同名系统文件,64位系统中有另外两个文件夹与之对应,%SystemDrive%\Program Files (86)
和%Windir%\SysWoW64
(即通常的C:\Program Files (86)和C:\Windows\SysWoW64)。
当32位程序需要访问Program Files或者System32中的文件时,系统会自动转向到Program Files (x86)或者SysWoW64中,这样32位的程序就可以正常的在64位Windows中运行了。类似的情况也发生在应用程序安装的时候,64位的程序一般都会被安装到Program Files中,而32位的程序则是装在Program Files (x86)中。
从64位系统的角度来说,WoW64只是提供了兼容32位程序的方法,而系统本身则完全是64位的,所以把Program Files (x86)和SysWoW64这两个文件夹删除,并不会影响系统的正常运行,但是这种做法是非常不推荐的。现在64位应用程序的普及率并不高,很多厂商不愿意在64位方面投入大量精力,比如常用的聊天工具和多媒体播放工具等。在实际使用过程中,很难避免使用32位的应用程序,所以还是把WoW64留着吧。
32位和64位系统有什么差异?
请看这里。
所以说
当你在64位的Windows上启动一个32位的应用的时候,一个32位的模拟器就会被叫起来执行这个32位的应用,这个模拟器会让这个应用认为自己运行在一个32位的Windows上,所有的功能都是可以正常使用的。
Windows为了兼容32位应用做了一些特殊的文件夹如下表:
这里需要提到的就是System32这个文件夹,别看他后面有个32,实质上它是用来放64位应用的。(据说是因为以前的程序很多都是对System32硬编码的,所以微软为了方便各大开发者将32位应用迁移到64位就直接保留了这个名称);SysWOW64其实是用来装32位应用的文件夹。WOW64的全程是:Windows on Windows64。
在命令行(DOS)下如何进行Program Files (x86)文件夹?
现代的Windows都支持长文件名了,可以直接
CD “Program Files”
或者CD “Program Files (x86)”,注意加引号。
SysWow64文件夹和System32文件夹
我们已经知道64位Windows通过System32和SysWoW64两件文件夹来区分64位和32位的系统文件,当32位的应用程序尝试访问System32文件夹的时候,系统会自动把它转到SysWoW64文件夹,这样32位应用程序在32位系统和64位系统就都可以运行了,(而不需要为了64位系统而把System32改成SysWoW64)。
这样就出现了一个问题,32位的应用程序怎么访问真正的System32文件夹呢,即存放64位系统文件的文件夹?答案就是通过SysNative文件夹。这个文件夹并不存在,即在资源管理器中找不到,但当32位的应用程序尝试访问这个文件夹时,64位的Windows会把它重定向到真正的System32文件夹,从而提供了一种让32位应用程序访问64位系统文件的方法。
SysNative文件夹
好,回到我们刚才的那个问题,如果这个被模拟的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及其以上版本
参考链接:
- 感谢你赐予我前进的力量