В Windows 11 до сих пор присутствует диспетчер памяти из Windows 95

Актуальная Windows 11 до сих пор использует фрагмент кода Windows 95, вышедшей более 30 лет назад. Исправление совместимости под названием EmulateHeap предоставляет старым приложениям доступ к менеджеру памяти Windows 95. Этот механизм можно найти и в Windows 11 26 H2.

История совместимости старых программы в Windows началась с оригинальной SimCity. Игра Maxis работала в Windows 95 только благодаря коду, который корпорация написала специально для SimCity. Приложения запрашивают у Windows память во время работы и освобождают её после завершения. Если приложение продолжает обращаться к памяти после её освобождения, это баг, известный как use‑after‑free. Именно такой баг был в оригинальной версии SimCity для Windows 3.x.

В 2 000 году эту историю рассказал сооснователь Stack Overflow и бывший инженер Microsoft Джоэл Спольски, ссылаясь на Джона Росса, создавшего ту версию SimCity. Последний случайно допустил ошибку, из‑за которой игра считывала память, которую сама же только что освободила. В Windows 3.x игра работала нормально, поскольку память после освобождения никуда не исчезала, объяснил Спольски.

Когда SimCity перестала работать в бета‑версиях Windows 95, Microsoft добавила специальный код, который искал запущенную SimCity. Если операционная система находила игру, менеджер памяти переходил в особый режим и не освобождал память сразу. Microsoft пошла на этот шаг, не дожидаясь исправленной версии градостроительного симулятора.

Обходное решение для SimCity было единичным случаем, но другие старые приложения также имели похожие зависимости. В 2 010 году инженер Microsoft Рэймонд Чен объяснил, что некоторые программы использовали особенности работы кучи в Windows. Например, приложения обращались к освобождённой памяти, рассчитывая, что прежние значения сохранятся. 

Однако в более поздних версиях Windows такие приложения стали аварийно завершаться, поскольку там память управляется иначе.

Решением стал EmulateHeap — механизм совместимости, который перенаправляет вызовы API для работы с кучей, в том числе HeapCreate, LocalLock и GlobalReAlloc, на альтернативные реализации, воспроизводящие поведение Windows 95. Microsoft просто взяла копию исходного кода Windows 95 Heap Manager, перекомпилировала его и добавила в инфраструктуру совместимости, рассказал Чен.

По словам Чена, старый код загружается с жёсткого диска только тогда, когда EmulateHeap включён для конкретного приложения. При этом ПК не запускает Windows 95 в фоновом режиме.

EmulateHeap можно найти в утилите Compatibility Administrator, которая перечисляет исправления совместимости, входящие в состав Windows. Microsoft описывает исправление совместимости как «небольшой фрагмент кода, который перехватывает вызовы API из приложений». Compatibility Administrator входит в Windows Assessment and Deployment Kit (ADK).

Чтобы обнаружить EmulateHeap на своём ПК, нужно выполнить следующие шаги:

  1. Загрузить Windows ADK с сайта Microsoft и запустить установщик.

  2. Выбрать из списка компонентов только Application Compatibility Tools и завершить установку.

  3. Найти в меню «Пуск» Compatibility Administrator и открыть 32-битную версию, поскольку большинство приложений эпохи Windows 95 имели такую архитектуру.

  4. В разделе Custom Databases нужно кликнуть правой кнопкой мыши по New Database, а затем выбрать Create New > Compatibility Mode.

  5. Прокрутить список доступных исправлений совместимости до EmulateHeap.

После выхода Windows 11 22 H2 пользователи сообщали, что в GTA: Vice City пропал звук, а Need for Speed: Most Wanted вылетала при включённом EmulateHeap.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев