Том Уэллинг стал героем вирусного обсуждения после публикации фото из отеля История Ивана Капкова: эмиграция, внутренний кризис и трагический финал ITMS объявила о смене названия на BFT «ПСЖ» обыграл «Манчестер Сити» со счётом 4:2 в Лиге чемпионов «Ростелеком» изучает создание корпоративного LLM-фаервола На фестивале «Маяк» показали фильмы Тимы Анисимова, Никиты Троценко и Павла Лунгина В Кемерово продолжается расследование смерти Татула Петросяна Музыкальные сервисы начали менять названия и тексты песен из-за новых требований закона Что такое «Mar-a-Lago face» и почему в нём увидели политический стиль Блогер Егорик сравнил работу с зумерами и миллениалами В Нигерии умерла актриса и победительница конкурса красоты Тения Абрахам Эмулятор KytyPS5 запустили на Xbox в режиме разработчика Зеленский согласился провести выборы при 60-дневном перемирии Конор Кеннеди и Джулия Бе сыграли свадьбу в Рио-де-Жанейро Юра Борисов стал членом Американской киноакадемии накануне премьеры в Лондоне Кабардино-Балкарский высокогорный заповедник: ледники, экотропы и Дыхтау В России насчитали 7,88 млн единиц коммерческого транспорта «Девочка из 90-ых»: как семейный проект стал интернет-хитом Игра Cancel Your Subscription превращает отмену подписки в испытание Семья Ивана Гудкова предупредила о мошенническом сборе денег на похороны
Лента новостей
Технологии

Windows 11 сохранила механизм совместимости из эпохи Windows 95

В Windows 11 обнаружили EmulateHeap — механизм, созданный для запуска старых программ и основанный на коде менеджера памяти Windows 95.

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 на своём ПК, нужно выполнить следующие шаги:

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

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

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

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

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

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

Источник