上個月,我們報道一個有趣的實驗,該實驗證明Windows在Office的幫助下具有出色的向後兼容性。YouTuberMattKC也做過類似的實驗,但規模要大得多,他著手復活28年前發佈的Windows95的"數千個應用程序"。這主要是在.NETFramework的幫助下完成的,但這也是挑戰的第一部分。
您可能不知道,.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 兼容性怪癖。他的堅持終於得到回報,揭示遺留代碼的秘密,證明即使是幾十年前的系統也可以超越其極限;這的確是一項相當不起的成就。
這篇文章簡要總結所取得的成果,而上面的完整視頻也非常值得一看。