winevdm: эмулятор запускает 16-битные программы Windows в 64-битной системе

winevdm: эмулятор запускает 16-битные программы Windows в 64-битной системе

Источник, README проекта winevdm на GitHub. Это изменённая версия winevdm, эмулятора 16-битной Windows, портированная на 64-битную Windows. В строке заголовка в качестве примеров названы Windows 1.x, 2.x, 3.0, 3.1 и «т. д.»; какие именно версии реально работают, текст не уточняет.

Установка по README: скачать готовую сборку или собрать самому, затем запустить ярлык «install» либо щёлкнуть правой кнопкой по install.inf и выбрать «Install». После этого, как сказано в README, 16-битные (Win16) программы можно запускать напрямую. Запуск: перетащить исполняемый файл Win16 на otvdm.exe или открыть otvdmw.exe. Если при старте появляется ошибка об отсутствии VCRUNTIME140.dll, нужно поставить 32-битный Microsoft Visual C++ Redistributable для Visual Studio 2017. Если реестр был сброшен Windows Update, процедуру установки нужно повторить. Удалить программу можно через uninstall.reg, настройки лежат в otvdm.ini. Из командной строки вызов выглядит так: winevdm.exe [--app-name app.exe] командная строка (пример в README, winevdm.exe CALC.EXE).

Сборка из исходников: установить Visual Studio 2017, отредактировать PropertySheet.props и скомпилировать; либо склонировать репозиторий и выполнить cmake и make в каталоге build.

Что внутри проекта, по списку из README: эмулятор процессора; код преобразования Win16 в Win32 на основе wine; эмуляция DOS для Win16; преобразование 16-битных и «родных» дескрипторов (HANDLE); исправления проблем совместимости. Про эмулятор процессора сказано, что 64-битная Windows не может изменять LDT: вызов NtSetInformationProcess с ProcessLdtInformation всегда возвращает ошибку. Переходные процедуры из 16-битного кода в 32-битный генерируются автоматически инструментом convspec; в README приведён пример для функции DestroyWindow16.

Отдельные приёмы совместимости. Когда 64-битная Windows обнаруживает 16-битный установщик, у неё есть механизм запуска альтернативного, не 16-битного установщика, и программа этим механизмом пользуется. Некоторые программы Win16 пытаются сохранять настройки в INI-файл в %WINDIR%, а в современной Windows запись туда запрещена, поэтому проект перенаправляет такие записи.

Проект умеет и запускать исполняемые файлы DOS, на манер DOS-эмулятора; версию DOS можно задать переменной окружения VDMDOSVER. При этом README прямо предупреждает: эмуляция DOS неполная, лучше использовать DOSBox или MS-DOS Player. Рядом со ссылкой на скачивание последней версии стоит пометка «unstable» (нестабильная).

Ключевые факты

  • winevdm, изменённая версия эмулятора 16-битной Windows, портированная на 64-битную Windows (по README проекта на GitHub).
  • После установки программы Win16 запускаются напрямую: перетащить файл на otvdm.exe или открыть otvdmw.exe.
  • Среди частей проекта README называет эмулятор процессора (64-битная Windows не может изменять LDT), а вызовы из 16-битного кода в 32-битный генерирует инструмент convspec.
  • Есть перенаправление записи INI-файлов из %WINDIR% и использование механизма замены 16-битных установщиков.
  • DOS-программы тоже запускаются, но README называет эмуляцию DOS неполной и советует DOSBox или MS-DOS Player; последняя версия для скачивания помечена как нестабильная.

Почему это важно

64-битные версии Windows не запускают 16-битные программы, и README проекта объясняет одну из причин: система не позволяет менять LDT, а соответствующий вызов всегда возвращает ошибку. winevdm обходит это эмуляцией процессора и преобразованием вызовов Win16 в Win32. Для тех, кто держит старый софт эпохи Windows 3.x, это способ запускать его на современной системе без виртуальной машины. Это нишевый ретро-инструмент, к ИИ он отношения не имеет.

Кому это важно

Тем, кому нужно запускать старые 16-битные программы Windows на 64-битной системе: любителям ретро-софта, тем, кто сохраняет старые приложения. Тем, кому нужен именно DOS, README сразу советует другие средства, DOSBox или MS-DOS Player.

Как это применить

Скачать готовую сборку или собрать проект самому (Visual Studio 2017, правка PropertySheet.props, компиляция; либо git clone, затем cmake и make в каталоге build). Затем запустить ярлык «install» или выбрать «Install» в контекстном меню install.inf. После этого перетащить файл Win16 на otvdm.exe или открыть otvdmw.exe. Если не хватает VCRUNTIME140.dll, поставить 32-битный Visual C++ Redistributable для Visual Studio 2017. Если реестр сбросил Windows Update, установку нужно повторить. Для удаления есть uninstall.reg, параметры хранятся в otvdm.ini. Сведений о цене и лицензии в тексте нет.

Можно ли доверять

Весь пересказ основан на README самого проекта, то есть на описании, которое дал автор программы. Независимых проверок, замеров и списка протестированных программ там нет. Имя автора в тексте не указано, дата релиза и номер версии тоже. Надёжность видна лишь из пометки: последняя версия для скачивания названа нестабильной.

Риски и подводные камни

Последняя версия помечена как нестабильная, что именно это значит, не объяснено. Какие версии 64-битной Windows поддерживаются и какие программы Win16 действительно работают, из текста не ясно. Windows Update может сбросить реестр, и тогда установку придётся делать заново. Эмуляция DOS, по словам самого README, неполная. Установка меняет настройки системы (запуск через install.inf и реестр), поэтому перед этим разумно прочитать инструкции.