關于Windows中System32及其相關文件夾的簡單辨析
很多人都覺得,“System32”就是存放32位系統(tǒng)文件的。這個誤區(qū)已經(jīng)存在了很久,我認為這是望文生義所導致的。
首先我們需要指出,System32文件夾在不同位數(shù)、不同架構的操作系統(tǒng),所存放的內容是不一樣的。

32位操作系統(tǒng):里面存放的是32位系統(tǒng)文件。
顧名思義,很好懂吧?
不過這么一句話就結束這個部分了嗎?
相信很多稍微懂一些的朋友肯定要問了,32位系統(tǒng)還有一個16位子系統(tǒng),用來兼容DOS乃至早期版本W(wǎng)indows程序,這些文件在哪里呢?在“System”文件夾當中。
悄悄喵一句:這里面的東西最遲更新到Windows 3.2。

64位操作系統(tǒng):System32里面存放的是64位系統(tǒng)文件。
看到這很多人就要問了,微軟為啥不改個名,怎么還叫System32?
嗯,說白了還是處于兼容性考量,程序需要調取.NET Framework或者VC運行庫,都需要到System32下面讀取文件,大家肯定見過這樣的提示框:

如果要求程序開發(fā)者全部把調取文件的路徑改掉,他們肯定不樂意,而且即使改了,問題也會有很多,于是微軟索性就繼續(xù)用這個名字了。
所以,在64位系統(tǒng)中,64位的文件還在System32里面。
那么有些同學又要問了:SysWoW64又是個啥?為啥名字帶一個64?
嗯,問得好。SysWoW64是64位系統(tǒng)中的32位子系統(tǒng),這個子系統(tǒng)(WoW64)的官方名稱是Microsoft Windows-32-on-Windows-64。
翻譯成白話,SysWoW就是在64位系統(tǒng)中,運行32位程序的一個兼容層。如果你覺得名字怪怪的只能怪微軟了。
簡單介紹一下:這是2007年微軟推出的一項技術,通過Wow64Cpu.dll的轉譯讓32位程序在64位系統(tǒng)上運行,然后將32位應用程序或系統(tǒng)組件需要的動態(tài)鏈接庫放入SysWoW64文件夾內,在注冊表內新建Wow6432Node項單獨存放32位的相關注冊表,以此與64位的系統(tǒng)文件和注冊表隔離開來,系統(tǒng)會通過Wow64.dll自動重定向32位程序請求的動態(tài)鏈接庫(DLL)的路徑到SysWoW64。優(yōu)點很明顯,它就像一個沙盒一樣,但是這不意味著你可以隨意刪除或者更改它,它仍然與Windows保持著較高的集成度。*
注:如果未來的x86_64架構移除了32位指令集,32位程序仍然可以在Windows上運行。

*在Windows 11 Build 22621以后,系統(tǒng)對SysWoW64的依賴似乎減輕了,對其進行一定的替換和更改不會再影響到系統(tǒng)本身的運行,但你的32位程序還是會死翹翹的。

Windows RT:只存在ARM32架構的系統(tǒng)文件
Windows 10 版本1709及以后:System32下存放ARM64架構的系統(tǒng)文件,SysArm32下存放ARM32的系統(tǒng)文件,SysWoW64存放的是標準x86架構的系統(tǒng)文件。
系統(tǒng)會使用xtajit.dll對x86指令進行翻譯。
關于ARM架構對x86_64的兼容:微軟沒有選擇新開文件夾,而是把ARM64的文件動了動手腳,把自己模仿成x86_64,騙過程序進行調用,稱為ARM64EC,微軟還塞了些還有原始x86_64的內容,與ARM64EC配合使用,配合使用的整個體系叫做ARM64X,它們都在System32下,并且,文件還是那個文件,只是把東西裝進去了而已,不同架構的的App調用其中不同的內容,就像一幅圖片,有的人看見兔子,有的人看見鴨子。
不過,也有其對應的xtajit,也就是xtajitx64.dll。

好了,相信這篇文章會加深你對Windows 系統(tǒng)文件的認識,如果你覺得我寫得不錯還請多多支持。本文用到了部分網(wǎng)絡資源,如果認為有我不應使用的內容,請?zhí)岢鼋簧妗?/p>
參考資料:
Arm64X PE 文件 | Microsoft Learn
Windows11 操作系統(tǒng) SysWOW64 文件夾的作用 - 知乎 (zhihu.com)
WOW64 實現(xiàn)詳細信息 - Win32 apps | Microsoft Learn