Compatibility mode

Материал из Русский WINE
Перейти к: навигация, поиск
Режим совместимости в Wine

Режим совместимости

Некоторые программы в более новых версиях Windows работают некорректно или не работают вообще. Это происходит потому, что более новая версия функции API отличается от старой.

Для решения данной проблемы в Windows существует режим совместимости, который можно выбрать для каждой программы. Выбрав конкретную версию системы и определенные параметры, можно запустить программу, если по умолчанию она не запускается.

Такая же функция присутствует и в Wine. С помощью Winecfg можно выбрать, какую версию Windows API будет имитировать Wine для всей "системы" или для конкретной программы. Так же Wine может эмулировать виртуальный рабочий стол (например, для полноэкранного приложения) и выбрать какую библиотеку ему использовать: собственную, или стороннюю. Например, mfc42.dll: из Wine, или из установленного пользователем Microsoft Visual C++ 2008 Redistributable Package.

В ReactOS, которая на данный момент стремится к Windows NT 5.2 (Windows Server 2003), пока данная функция отсутствует и система, ни смотря на то, что в ней для реализации Windows API используется код Wine, данная функция отсутствует. Это потому, что реализация режима совместимости Wine отличается от NT-систем (например, некорректными цепочками вызовов в kernel32/ntdll [1]). Для всех программ она идентифицируется как Windows Server 2003 SP2 и несовместимые с этой системой приложения даже не запустятся.

Изучение и реализация системы управления версиями для ReactOS

  • CORE-11288 - В настоящее время ReactOS нацелен на совместимость с Windows Server 2003. Разработчик планирует реализовать механизм для использования API-интерфейсов Windows NT 6.0 и более поздних, при этом чтобы в ReactOS оставалась среда Windows Server 2003.
    • CORE-11289 - Исследование и документирование параметров совместимости Windows
    • CORE-11290 - Убедиться в том, что загрузчик соблюдает совместимость
    • CORE-11291 - Создание спек-файлов для основных библиотек Windows 7
    • CORE-11292 - Реорганизация ядра Win32 API
    • CORE-11293 - Исследование требований ядра для NT 6+ API пользовательского режима

Реализация режима совместимости

CORE-10366

NtApphelpCacheControl

Функция ядра NtApphelpCacheControl используемая AppHelp, чтобы сохранить список (200) недавно запущенных приложений в оперативной памяти для более быстрого поиска. При выходе список приложений сохраняется в реестре, а при загрузке подгружается обратно.

Реализация apphelp sdb

Реализация большинства SDB * API-интерфейсов, связанных с чтением и записью файлов SDB.

SDB файлы - базы данных совместимости приложений, содержащие информацию об известных "плохих приложениях", а также список «слоев», которые должны применяться к этим приложениям.

В качестве основы используется: http://github.com/krofna/wine/tree/master/dlls/apphelp

  • CORE-10367
  • в настоящий момент ведется работа над данным компонентом
Вкладка в свойствах ярлыка

Вкладка в explorer

В более новых версиях Windows реализована в виде расширения оболочки (acppage.dll). Использует функции SetPermLayerState, SdbGetPermLayerKeys.

На данный момент вкладка реализована вместе с функциональностью позволяющей применить необходимые «слои», но отключена.

Интеграция apphelp

Интеграция apphelp в создание процесса, COM, MSI и загрузку драйверов.

  • CORE-10368
    • 3 июня 2017 года была начата интеграция apphelp в создание процесса
      • 27 июня был опубликован первый патч
      • 29 июня года была реализована функция SdbpMatchExe
      • 1 июля произведена интеграция apphelp в создание процесса

Инфраструктура Shim

Реализует базовую инфраструктуру для эмуляции различных API.

Создание стандартных значений Shim

Предоставляет:

  • список "эмулируемых" версий API. (CORE-11299)
  • настройку разрешения экрана/глубины цвета/отключение тем (CORE-11927)

ShimLib

Выполняет вспомогательные функции для регистрации регулировочных слоев и для обработки общих задач.

Первый коммит - r73461.

Данные Shim в ярлыках

Применение окружения совместимости не для *.exe-файла, а для ярлыка.

Статус реализации

Управление через реестр

По адресу HKLM\Software\Policies\Microsoft\Windows\AppCompat находятся параметры, которыми управляется режим совместимости:

  • DWORD:DisableEngine
  • DWORD:DisablePropPage
  • DWORD:DisableWizard
  • DWORD:LogAppHelpEvents
  • DWORD:VDMDisallowed

Ссылки

ReactOS
Search.png
Доклады
О ReactOSARWINSSЧастовстречаемые заблуждения о ReactOS
Информация Новости Выпуски новостейПереводы блоговНовости проектаВидео про ReactOSReactOS на ХабреUSB от Вадима Галянта
Разработка Руководство по программированиюОтсутствующая функциональностьВетви разработкиКомпоненты системыReactOS и WineПлан работРазработчикиСовместимость с dll WindowsНаиболее значимые изменения за годИспользуемые проектыGoogle Summer of CodeИзвестные проблемы
Порты AMD64ARMXboxPowerPC
Компоненты Файловые системыРежим совместимостиОтчеты об ошибкахПечатьUSBЯдро
Загрузчик Восстановление MBRЗагрузка из GRUBПараметры загрузки
Прочее ARWINSSПриложения в ReactOSОформление ReactOS
Другое КоординаторыТипы ядерFreeWin95"Пасхальные яйца" в ReactOS
Помощь
RAM-диск ReactOS по PXEс жесткого диска
Разработка Стиль написания кодаСтандарты RC-файловРабота с документациейВенгерская нотацияGNU Indent • [ Subversion : ветвислияниеиспользование TortoiseSVN ] • Основы переводаОтправка патчей
Репорты Отладка в VirtualBoxОтладка на экранДобавление программы в менеджер приложенийОтправка отчетов
Отладка Com0comGDBKdbgRossym.gdbRoswin.gdbWinDBGРуководство по WinDBGВключение трассировки ядраКоды DPRINTУдалённый отладчик ReactOS
Сборка CMakeRBuildФайлы RBuildАвтоматическое копирование файловСборка MINGW-w64Сборка модулейСреда сборки
Тестирование VirtualBoxVMwareQEMUHyper-VНеобходимый объём дискаПеренос файлов на виртуальный дискУстановка ReactOSУстановка драйверов
Использование ПО в ReactOS Samba
Обновление ReactOSЗагрузочная флешкаЧем можно помочь проектуСоздание нового пользователяЗвук и сеть в VirtualBoxСъемка и публикация видеоIRC-каналОбщие папкиСторонние компоненты
Обзоры ОболочкаNTVDMWOWCommunity Edition