реклама
В прошлом месяце один энтузиаст провел интересный эксперимент, который наглядно продемонстрировал отличную обратную совместимость ОС Windows, где в качестве примера использовалось программное обеспечение Office. Похожий эксперимент, но в гораздо более глобальном масштабе, провел YouTube-блогер MattKC. Он взялся за сложную миссию - воскресить "тысячи приложений" для работы на Windows 95, операционной системе, выпущенной 28 лет назад. Главным инструментом для этой задачи стала среда .NET Framework, но ее внедрение было лишь первой частью испытания.
реклама
Первым препятствием стала изначальная несовместимость .NET Framework с Windows 95, так как данная технология дебютировала лишь в версии Windows 98. Энтузиаст MattKC взялся за "бэкпортирование" программной платформы .NET, то есть перенос его функционала на более старую систему.
В этом отношении KernelEx, открытый слой совместимости для запуска современных приложений на Windows 98, к сожалению особо не помог. Другая проблема заключалась в отсутствии необходимых DLL-файлов, даже после переноса всех DLL с помощью специальной утилиты, .NET Framework по-прежнему не функционировал.
Дальнейшее расследование выявило виновника - устаревший драйвер Windows под названием "ndphlpr". Несмотря на то, что в Windows 98 он казался ненужным, именно он являлся обязательным компонентом для платформы .NET и провоцировал сбои. К тому же, обойти его работу не представлялось возможным.
На помощь пришел инструмент WinDbg, предназначенный для отладки .NET Framework. После кропотливой диагностики ютубер MattKC наконец-то добился успеха: ему удалось обнаружить фрагмент кода, указывающий на отсутствие в Windows API, необходимого для определенных функций щелчка мышью.
F2 0F 10 44 24 08 F2 05 2C CO
Как бы просто это ни звучало, но на самом деле все было куда сложнее. Ведь в то время WinDbg еще не существовал, так что пришлось преодолевать многочисленные проблемы совместимости.
При декодировании выяснилось, что проблема была вызвана отсутствием функции "NotifyWinEvent" в библиотеке user32.dll. Ситуацию дополнительно запутывала функция SSE2, маскирующая одну из инструкций в коде. Тем не менее, MattKC попытался исправить SSE2, но это по-прежнему не решало проблему.
Наконец, ютубер вручную создал метод отображения сообщений об ошибках в видимом окне, что позволило ему исправить все оставшиеся проблемы совместимости DLL. Его настойчивость принесла свои плоды: он раскрыл скрытые секреты устаревшего кода и доказал, что даже системы, чей возраст исчисляется десятилетиями, способны на большее, чем можно себе представить.