Compatibility mode — различия между версиями
(→Статус реализации) |
(→Интеграция apphelp) |
||
Строка 45: | Строка 45: | ||
**3 июня 2017 года была начата интеграция apphelp в [http://jira.reactos.org/browse/CORE-13284 создание процесса] | **3 июня 2017 года была начата интеграция apphelp в [http://jira.reactos.org/browse/CORE-13284 создание процесса] | ||
***27 июня был опубликован первый патч | ***27 июня был опубликован первый патч | ||
+ | ***29 июня 2017 года была реализована функция SdbpMatchExe | ||
===Инфраструктура Shim=== | ===Инфраструктура Shim=== |
Версия 22:35, 29 июня 2017
Содержание
[убрать]Режим совместимости
Некоторые программы в более новых версиях 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 пользовательского режима
Реализация режима совместимости
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 июня 2017 года была реализована функция SdbpMatchExe
- 3 июня 2017 года была начата интеграция apphelp в создание процесса
Инфраструктура Shim
Реализует базовую инфраструктуру для эмуляции различных API.
Создание стандартных значений Shim
Предоставляет:
- список "эмулируемых" версий API. (
CORE-11299) - настройку разрешения экрана/глубины цвета/отключение тем (
CORE-11927)
ShimLib
Выполняет вспомогательные функции для регистрации регулировочных слоев и для обработки общих задач.
Первый коммит - r73461.
Данные Shim в ярлыках
Применение окружения совместимости не для *.exe-файла, а для ярлыка.
Статус реализации
- 5 сентября 2015 года в ядре был реализован компонент NtApphelpCacheControl (
CORE-9914) - 31 марта 2016 года была добавлена библиотека apphelp.dll (
CORE-10367) - 28 мая 2016 года был добавлен список "эмулируемых" версий API (
CORE-11299) - 16 декабря 2016 года была добавлена настройка разрешения экрана/глубины цвета/отключения тем (
CORE-11927) - 22 апреля 2017 года - реализация пользовательского выбора режима совместимости в виде расширения оболочки acppage
- 19 мая 2017 года была добавлена начальная реализация интеграции apphelp в создание процесса, COM, MSI и загрузку драйверов (CORE-10368)
- 29 июня 2017 года была реализована функция SdbpMatchExe, позволяющая сопоставить файлы/приложения в соответствии с параметрами (CORE-13284)
Ссылки
- Обсуждение на форуме
- Управление версиями в списке рассылки
- One-Core-Api - слой совместимости NT6 для Windows XP/2003 на базе Wine и ReactOS
- Wined3D, [2] - обертка основанная на Wine, транслирующая вызовы DirectX 1-11 в OpenGL, являющаяся полной реализацией DirectX для старых версий Windows.