Last month, we reported on an interesting experiment which demonstrated the excellent backward compatibility of Windows with the help of Office.
A similar experiment was done by a YouTuber MattKC but on a much grander scale where he embarked on a mission to resurrect “thousands of apps” for Windows 95, which was released 28 years ago. This was managed mainly with the help of .NET Framework, but this was also the first part of the challenge.
In case you may not know, .NET had not debuted until Windows 98 came around and hence it was not compatible with 95. So the first big part of the experiment was to backport .NET to make it work with Windows 95.
In this regard, KernelEx, an open-source compatibility layer for running modern apps on Windows 98, did not help much. Another problem was missing DLL files though even after porting all the necessary DLLs using a dumping tool, .NET did not work.
After further digging, it was found that a legacy Windows driver named “ndphlpr” was the culprit as it turned out to be a required component for .NET which was causing it to crash, even though it was seemingly obsolete in Windows 98. There was also no way in sight to bypass this driver either.
This was when the YouTuber resorted to using the WinDbg tool to help "debug" the issue with .NET Framework, and at long last, the troubleshooting paid off as a code snippet related to a missing Windows API for certain click functions was discovered.
F2 0F 10 44 24 08 F2 05 2C CO
As easy as we made it sound here, it was anything but, as WinDbg did not exist at that time which meant several compatibility issues had to be overcome.
Decoding revealed that the issue was apparently caused by the absence of “NotifyWinEvent” in the user32.dll library, and this was further complicated by SSE2 obfuscating an instruction within the code. Regardless, MattKC tried patching the SSE2 out of it though this still did not resolve the issue.
Finally, though the YouTuber manually crafted a method to display the error messages in a visible window, allowing him to fix all the remaining DLL compatibility quirks. His persistence paid off, revealing the hidden secrets of legacy code and proving that even decades-old systems could be pushed beyond their limits; a fairly impressive accomplishment indeed.
This article summaries very briefly what was achieved and the full video linked above is well worth the watch.