WoW64
WoW64(Windows 32-bit on Windows 64-bit)是Microsoft Windows操作系统的一个子系统,它提供在所有Windows 64位系统上运行32位元应用程序的能力——这包括Windows XP Professional x64 Edition、IA-64和Windows Server 2003的64位版本,以及Windows Vista、Windows Server 2008、Windows 7、Windows 8、Windows Server 2012、Windows 8.1和Windows 10的64位版本。在Windows Server 2008 R2 Server Core中它成为了可选组件,并在Nano Server中不再提供。WoW64旨在解决32位与64位Windows中的许多差异,特别是涉及到Windows本身的结构变化。
转换库
WoW64子系统由一个轻量级兼容层组成,其在所有64位Windows版本上有类似的接口。它的目的是创建一个32位环境,为未修改的32位Windows应用程序在64位系统上运行提供一个必需的接口。在技术上,WoW64使用三个动态链接库(DLL)实现:
Wow64.dll
,通往Windows NT内核的核心接口,它转换32位与64位调用,包括指针和调用栈操作。Wow64win.dll
,为32位应用程序提供适当的入口点。Wow64cpu.dll
,负责解决进程从32位切换到64位模式。
架构
尽管表面上看它在所有64位Windows版本上都表现相同,但WoW64的实现取决于目标处理器架构。举例来说,面向Intel Itanium 2处理器(即IA-64架构)开发的64位Windows版本,会使用Wow64win.dll
在Itanium 2的独有指令集中设置x86指令的仿真。这种仿真会比 Wow64win.dll
的函数在x86-64架构(也称“Intel 64”或“AMD64”)上的计算代价更昂贵,因为当有必要执行32位线程时,处理器硬件必须从64位模式切换到兼容模式,然后再切换回64位模式。
注册表和文件系统
WoW64子系统也处理其他运行32位应用程序所必需的关键问题。它参与32位应用程序与Windows组件的互动,例如注册表,64位与32位应用程序会使用不同的键。举例来说,HKEY_LOCAL_MACHINE\Software\Wow6432Node 是 HKEY_LOCAL_MACHINE\Software 的32位环境版本,并且32位应用程序不会感觉到这种重定向。有些注册表键是等效从64位映射到32位,还有些则是内容镜像,这取决于Windows的版本。
操作系统使用%SystemRoot%\system32
目录放置其64位函数库和可执行文件。这样做的原因是考虑到向后兼容性,许多旧款程序采用硬编码使用该路径。当执行32位应用程序时,WoW64会将32位透明重定向到 %SystemRoot%\SysWoW64
,那里放着32位函数库和可执行文件。32位应用程序不会知道自己在64位操作系统上运行。32位应用程序可以通过伪目录%SystemRoot%\sysnative
访问真实的存有64位函数库和可执行文件的文件夹%SystemRoot%\System32
。
你会看到有两个Program Files目录可见,里面分别放着32位和64位应用程序。存储32位文件的目录名为 Program Files (x86) 以区分两者,而64位目录使用原有的 Program Files 为名,不附加任何限定名称。
应用程序兼容性
只包含32位内核模式驱动程序,或者插入组件到仅64位实现的组件进程(例如Windows Explorer)的内存空间的32位应用程序不能在64位平台上执行。32位服务程序是支持的。SysWOW64文件夹位于操作系统所在分区的Windows文件夹,其包含许多支持32位应用程序的程序(例如cmd.exe、odbcad32.exe,为32位应用程序注册ODBC连接等)。面向MS-DOS和Windows早期版本的16位应用程序通常不兼容64位版本的Windows Vista、7和8,但可以通过Windows Virtual PC或DOSBox运行在16位或32位的Windows操作系统上。32位版本的Windows XP、Vista、7和8在另一方面通常也可以几乎无问题地运行16位应用程序。16位应用程序不能直接运行在x64版本的Windows上,因为CPU在x64模式下运行时不支持VM86。
Internet Explorer实现了32位与64位两个应用程序版本,因为互联网上有许多32位ActiveX组件,而它们不可能在64位版本上运行。Internet Explorer的32位版本被定为默认版本,并且64位版本不能被设置为默认浏览器。
WoW64 64位版本中透明层的一个程序错误[1][2]导致所有依赖Windows API函数GetThreadContext的32位应用程序不兼容。此类应用包括应用程序调试器、调用堆栈跟踪器(例如IDE显示调用堆栈)和使用垃圾收集(GC)引擎的应用程序。受影响最广泛的一个GC引擎是Boehm GC[3],它被同样流行的Mono作为默认的垃圾收集引擎。虽然Mono截至2010年10月有一种新的、可选的GC(称作SGen-GC),但它与Boehm GC执行堆栈扫描的方式相同,因此它也不兼容WoW64。截至2010年11月15日,微软没有提供修复计划或变通解决方案。
性能
据微软介绍,运行在WOW64下的32位软件与在32位Windows上的执行性能相近,但可能增加少许线程和其他开销[4]。
一个32位应用程序在64位系统上可以完全使用4GB虚拟内存,而在32位系统上,部分可寻址内存无法使用,因为那会被内核和内存映射的外部设备(如显卡)使用。
参见
- Windows on Windows
- 使用者帳戶控制也有一个机制,将旧款程序写入到特定区域的文件处理到新位置。无管理员权限的进程将文件写入到system32将被重定向到一个虚拟存储目录。
- 垫片
参考资料
- ^ Saw, Zach. WOW64 bug: GetThreadContext() may return stale contents. Zach Saw's Blog. November 13, 2010 [2010-11-15]. (原始内容存档于2021-07-02).
- ^ WOW64 OS bug: Old 32-bit XP apps failing under Win7 WOW64. Microsoft Developer Network. November 11, 2010 [2010-11-15]. (原始内容存档于2010-11-21).
- ^ Discussions about the Boehm Garbage Collector (Boehm GC).. [2010-11-25]. (原始内容存档于2011-07-16).
- ^ Performance and Memory Consumption Under WOW64. Microsoft. [2013-05-06]. (原始内容存档于2013-03-07).
外部链接
- 查
- 论
- 编
- 3D 檢視器
- 闹钟与时钟
- 小算盤
- 字元對應表
- Cortana
- DVD播放器
- Edge
- 傳真和掃描
- 意见反映中枢
- 取得協助(英语:Get Help)
- Groove
- Internet Explorer
- 放大鏡
- 郵件
- 地圖
- Media Player
- MSN應用(新聞,天氣,體育,財經)
- 電影與電視
- 行動中心
- 朗讀程式
- 记事本
- 日历
- OneDrive
- OneNote
- 小畫家 3D
- 小畫家
- 人脉
- 照片
- 遠端協助(英语:Quick Assist)
- 剪取工具
- 語音辨識
- 便笺
- 应用商店
- 提示(英语:Microsoft Tips)
- 錄音機
- Windows Ink
- WordPad
- Xbox
- XPS查看器
- 手机链接
- 網域(英语:Windows domain)
- Active Directory
- DNS(英语:Microsoft DNS)
- 组策略
- 漫游用户配置文件
- 資料夾重新導向(英语:Folder redirection)
- 分散式交易協調器
- MSMQ
- Windows Media服務
- 活动目录权限管理服务(英语:Active Directory Rights Management Services)
- IIS
- 遠端桌面服務
- WSUS
- SharePoint
- 網路存取保護
- PWS
- 文件复制服务(英语:File Replication Service)
- 遠端差異壓縮(英语:Remote Differential Compression)
- 適用於UNIX的列印服務(英语:Print Services for UNIX)
- Windows部署服務(英语:Windows Deployment Services)
- 系統資源管理員(英语:Windows System Resource Manager)
- Hyper-V
- 伺服器核心
- Windows NT的架構
- 啟動處理程序(英语:Windows startup process)
- csrss.exe
- 桌面視窗管理員
- 可攜式格式
- 增强写入筛选器(英语:Enhanced Write Filter)
- 圖形裝置介面
- hal.dll
- I/O请求数据包
- Windows镜像文件格式
- 核心交易管理員
- 函数庫
- 邏輯磁碟管理
- lsass
- MinWin(英语:MinWin)
- NTLDR
- Windows開機管理程式
- ntoskrnl.exe
- 物件管理
- Open XML紙張規範
- 注册表
- Windows资源保护
- 安全性帳戶管理員(英语:Security Account Manager)
- 伺服器訊息區
- 磁碟區陰影複製服務
- SMSS
- 系统空闲进程
- 使用者(英语:Windows USER)
- WHEA(英语:Windows Hardware Error Architecture)
- Win32主控台
- Winlogon
- 华生医生(英语:Dr. Watson (debugger))
- COMMAND.COM
- DOS虚拟机(英语:Virtual DOS machine)
- Windows on Windows
- WoW64
- 适用于 Linux 的 Windows 子系统
- 動態指令碼處理(英语:Active Scripting)
- COM
- ActiveX
- ActiveX文档(英语:ActiveX Document)
- COM结构化存储
- DCOM
- OLE
- OLE自动化(英语:OLE Automation)
- Transaction Server
- DirectX
- .NET Framework
- Windows Holographic
- Windows Runtime
- 通用Windows平台(UWP)
遊戲 |
|
---|---|
应用程序 |
|
其他 |
|