Windows on Windows

Windows on Windows，常指16位WOW、WOWEXEC或简称WOW。它是一个Microsoft Windows NT操作系统家族中32位版本的兼容层，目的是扩展以为运行为Windows 3.x编写的旧式Win16应用程序提供有限支持。64位系统上的“WOW”通常指在64位Windows上支持32位应用程序的WOW64。

 背景 
许多16位Windows（Win16）旧式应用程序可以无需更改运行在较新的32位Windows版本。原因是设计者允许应用程序开发者在行业从Windows 3.1x过渡到Windows 95及更新版本期间纠正他们的应用程序，在所有客户使用的应用程序被妥善解决前，不限制客户升级到新版本的操作系统。

Windows 9x系列的操作系统的根基采用DOS， 本质上采用16/32位混合的系统，底层的操作系统不完全是32位，因此原生运行Win16应用程序不需要特殊的仿真。而基于Windows NT的操作系统与Windows 9x的结构有很大不同，需要一个更复杂的解决方案。为了使16位应用程序能未经修改地运行在基于NT的32位Windows系统上（少许运行时限制），有两个独立策略被采用：形实替换（thunking）和垫片（shimming）。

 形实替换 
操作系统的WOWEXEC子系统会形实替换（）旧的16位API到较新的32位环境，以提供16位指针、内存模型和地址空间的支持。

所有16位应用程序默认使用共享内存空间运行在一个中。但它们也可以被配置为使用单独的内存空间运行，这种设置下每个16位进程都有自己的专用的虚拟机。单独的内存空间可以增加应用程序稳定性，防止16位应用程序互相干扰，但也增加16位IPC和使用更多内存。

Win16子系统在32位版本的Windows NT, 2000, XP, Server 2003, Vista, Server 2008, 7和8中可用。64位版本的Windows中也有它，但不包括WoW Win16支持的子系统，因此无法运行Win16应用程序，也没有提供NTVDM模拟器。DOS和16位Windows应用程序因此不能运行在64位版本的Windows上，除非使用第三方模拟软件（例如DOSBox）或虚拟机软件运行任何32位Windows、Windows XP Mode或DOS本身。

Windows NT系统中的WOWEXEC.EXE进程用于辅助Windows-on-Windows。此外Windows-on-Windows还模拟了Windows 95和Windows 98内核，WIN.COM文件模拟了一个Windows 3.x内核中的，在Windows NT上运行16位基于DOS的Windows应用程序。

 垫片 

应用程序的兼容性问题，不仅有长文件名、多用户和最小特权概念的问题，其他部分也可能导致某些应用程序无法正常运作，例如错误地在NTFS安全情况下认为对整个文件系统有写入权限。

在Windows 95操作系统设计时，一项关键要求就是文件系统要保持对8.3文件名的向后兼容，以允许旧款应用程序继续在平台上正常运行。因而Windows 95和之后的操作系统在文件分配表（FAT）中支持一个兼容性模式，同时存储长文件名和短文件名。

另外，试图直接访问硬件的旧款应用程序在用户模式中不能这样做。如果DOS和Windows 9x的系统配置文件在Windows NT为基础的内核中不存在，旧款应用程序也可能失败。因此0字节的AUTOEXEC.BAT和文件在后续的、不使用它们的操作系统上继续存在。

在之后的Windows版本中，有相当多的垫片以拦截和修改旧款应用程序的API调用。这些修复在不断更新，以解决仍在流行的旧款应用程序的问题。

 参见 
 Wine

 参考资料 

 外部链接 
 Windows NT子系统
 什么是NTVDM和WOW?
 监测16位Windows应用程序
 优化Windows 7如何运行16位和MS-DOS的程序 

Category:Windows组件