上个月,我们报道了一个有趣的实验,该实验证明了 Windows 在Office 的帮助下具有出色的向后兼容性。YouTuber MattKC 也做过类似的实验,但规模要大得多,他着手复活28年前发布的 Windows 95 的"数千个应用程序"。这主要是在 .NET Framework 的帮助下完成的,但这也是挑战的第一部分。
您可能不知道,.NET 直到 Windows 98 出现时才首次有了这个概念,因此与 Windows 95 系统并不兼容。因此,实验的第一个重要部分就是反向移植.NET,使其与 Windows 95 兼容。
在这方面,用于在 Windows 98 上运行现代应用程序的开源兼容层 KernelEx 并没有起到多大作用。另一个问题是缺少 DLL 文件,即使使用转储工具移植了所有必要的 DLL,.NET 也无法运行。
经过进一步调查,发现一个名为"ndphlpr"的传统 Windows 驱动程序是罪魁祸首,因为它是 .NET 的一个必要组件,在旧系统运行时会导致 .NET 崩溃,尽管它在 Windows 98 中似乎已经过时。此外,也没有办法绕过这个驱动程序。
这时,YouTuber 不得不使用 WinDbg 工具来帮助"调试".NET Framework 中的问题,最后,故障排除终于有了回报,因为他发现了一个与某些点击功能缺失的 Windows API 有关的代码片段。
F20F 10 44 24 08F205 2CCO
虽然我们在这里说得很轻松,但实际上并非如此,因为当时还没有 WinDbg,这意味着必须克服几个兼容性问题。
解码后发现,问题是由于 user32.dll 库中缺少"NotifyWinEvent"造成的,而 SSE2 在代码中混淆了一条指令,使得问题变得更加复杂。不管怎样,MattKC 尝试对 SSE2 进行了修补,但仍然没有解决问题。
最后,这位 YouTuber 手工制作了一种方法,在可见窗口中显示错误信息,从而修复了所有剩余的 DLL 兼容性怪癖。他的坚持终于得到了回报,揭示了遗留代码的秘密,证明了即使是几十年前的系统也可以超越其极限;这的确是一项相当了不起的成就。
这篇文章简要总结了所取得的成果,而上面的完整视频也非常值得一看。