Windows 11 继续携带功能完整的 Windows 95 内核片段,以维持对旧版软件的向后兼容性。这是通过一种被称为 EmulateHeap 的兼容性修复实现的。当程序依赖 Windows 95 的“宽容”特性——特别是它处理内存分配和释放的方式时,该机制会为旧版应用程序提供 Windows 95 特有的内存管理行为。

Windows 11 EmulateHeap 兼容性修复的概念图。
EmulateHeap 机制允许现代 Windows 版本通过模拟 Windows 95 堆管理器来运行旧版应用程序。www.windowslatest.com

这张图片展示了 EmulateHeap 机制,它为旧版应用程序提供 Windows 95 特有的内存管理行为。

这一技术债的历史可以追溯到 Windows 95 时代。例如,最初的 SimCity for Windows 3.x 包含一个“释放后使用”的漏洞,游戏会读取已经被释放的内存。由于 Windows 95 不会立即回收这些内存,游戏仍能正常运行。当该游戏在 Windows 95 测试版上崩溃时,微软修改了操作系统,使其能够识别 SimCity 并以特殊模式运行其内存分配器。更广泛地说,许多其他应用程序也依赖这些特定的特性。为了解决这个问题,微软开发了 EmulateHeap,它将应用程序的堆调用(如 HeapCreate 和 LocalLock)重定向到模拟 Windows 95 环境的替代程序。

SimCity 2000 Special Edition 在 Windows 95 上运行的截图。
SimCity 2000 是一个需要特定内存管理特性才能正常运行的旧版游戏示例。www.windowslatest.com

文章提到 SimCity for Windows 3.x 是依赖 Windows 95 宽容内存分配的软件主要示例。

从技术上讲,EmulateHeap 的工作原理是在 Windows 应用程序兼容性框架中包含一份重新编译的 Windows 95 堆管理器源代码。虽然这意味着很大一部分 Windows 95 内核存在于现代 Windows 11 中,但这些代码仅在为特定应用程序专门启用 EmulateHeap 时才从硬盘加载。这确保了操作系统不会为每个进程在后台运行 Windows 95 代码。然而,这种遗留支持并不完美;用户报告称,某些游戏(如 GTA Vice City)在启用此补丁时会出现声音丢失或崩溃,这说明在现代架构中完美复制 30 年前的内存行为存在固有困难。

这种遗留代码的持续存在突显了微软兼容性策略的核心原则。虽然公司正同时利用 WinUI 3 现代化用户界面,但它仍保留这些“隐藏”的内核组件,以确保旧有的、通常是任务关键型的软件仍能正常运行。这种权衡意味着必须维护庞大的兼容性基础设施,即使自 20 世纪 90 年代中期以来,底层的硬件和软件范式已经发生了巨大变化。这种方法允许旧软件用户实现无缝过渡,即使这意味着需要将数十年前的代码带入现代时代。

用户和管理员可以使用 Compatibility Administrator 工具来验证这些修复程序的存在,该工具是 Windows Assessment and Deployment Kit (ADK) 的一部分。通过搜索此工具中的自定义数据库,用户可以在各种“shims”(旨在拦截 API 调用的微小代码片段)中找到 EmulateHeap,这些 shim 是微软提供的用于弥合现代操作系统与旧版软件需求之间差距的工具。

Compatibility Administrator 工具在兼容性 shim 列表中显示 EmulateHeap 修复。
可以在 Compatibility Administrator 工具的兼容性修复数据库中识别出 EmulateHeap shim。www.windowslatest.com

用户和管理员可以使用 Compatibility Administrator 工具验证这些修复程序的存在,其中 EmulateHeap 列在各种 shim 之中。