Рубрики NewsSoftware

The enthusiast ported «thousands of programs» to Windows 95 — he ported the .NET Framework from Windows 98

Опубликовал
Андрей Русанов

Video blogger MattKC, in his own words, has migrated «thousands of programs» to Windows 95 by porting an important Windows 98 feature — the .NET Framework. The main limitation of Windows 95 compared to Windows 98 is the lack of the .NET Framework — in most other aspects, Windows 98 is very close to its predecessor in design and function.

In this 51-minute video, MattKC discusses how to get the .NET Framework to work properly in Windows 95. There are a lot of missing DLL files, but using a dump tool allows you to identify the names of the missing files so that they can be replaced or ignored. Even after transferring all the missing files, .NET still doesn’t work. It took more registry keys in Windows 95 than there are seconds in this video — the total number of keys needed was 5409.

Even after porting, .NET cannot properly debug JIT (Just In Time) in Windows 95. The cause seems to be ndphlpr, a mysterious legacy Windows driver that is not used in Windows 98 but is required for correct operation because .NET crashes without it. MattKC determines that fooling the PC into thinking that ndphlpr is present works, but after his research reveals that no one knows what the file is.

This, in turn, causes a machine code exception error. The WinDebug tool doesn’t support .NET natively (because it didn’t exist yet), so MattKC still has to deal with some compatibility issues when testing Windows 95 and 98 in parallel. Both systems were run on WinDebug for several days to find the problem.

Eventually MattKC found a closed block of code that WinDebug could not read. Once decrypted, the code was as follows:

F2 0F 10 44 24 08 F2 05 2C CO

This erroneous code referred to the lack of Windows APIs for some functions. The exception was that it couldn’t find «NotifyWinEvent in user32.dll», and SSE2 obfuscated the instruction in the code. I had to patch .NET to eliminate the dependency on SSE2, but this did not fix the compatibility, only the .NET debugger itself.

After considerable debugging of Lego Island, MattKC eventually hand-wrote the method code to exceptionally report the error to print in the window instead of where he can’t see it. This works and fixes the last part of the DLL compatibility. After that, the Rebuilder for Lego Island and the special, more modernized screenshot program now worked fine on Windows 95.

Source: Tom`s Hardware

Disqus Comments Loading...