Compatibility mode — различия между версиями
(→Поддержка API NT 6.0) |
|||
(не показано 28 промежуточных версии 2 участников) | |||
Строка 19: | Строка 19: | ||
**{{JIRA|11292}} - Реорганизация ядра Win32 API | **{{JIRA|11292}} - Реорганизация ядра Win32 API | ||
**{{JIRA|11293}} - Исследование требований ядра для NT 6+ API пользовательского режима | **{{JIRA|11293}} - Исследование требований ядра для NT 6+ API пользовательского режима | ||
+ | |||
+ | ---- | ||
+ | |||
+ | {{JIRA|11292}} - Реорганизация ядра Win32 API - [http://github.com/reactos/reactos/pull/397 PR-397] Timo Kreuzer реализует поддержку экспорта версий. | ||
+ | |||
+ | Реорганизации API со следующими целями: | ||
+ | *Использование статических библиотек / API-наборов [http://ru.wikipedia.org/wiki/MinWin MinWin] в качестве основы | ||
+ | *Комбинирование (объединение общеиспользуемых API наподобие kernel32/advapi32/... в единую DLL, типа MinWin API используемую в качестве основы) | ||
+ | *Возможность тестирования DLL в Windows (добавление пользовательских целей для автономных полных DLL на поддерживаемую целевую версию: kernel32_0x502 для 2k3) | ||
+ | *Управление конкретными версиями API | ||
+ | *DLL Naming (пользовательские имена DLL для основных DLL) | ||
+ | |||
+ | ''"Идея состоит в создании наборов «оберточных DLL», по одному для каждой версии ОС. Каждая из них обращается к "базовой версии" (например, «roskernelbase.dll»), за исключением тех, которые требуют специальной обработки. Все это можно сделать, не создавая полдюжины копий спек-файлов."'' - '''Timo Kreuzer''', PR-397 | ||
+ | |||
+ | ===Дистрибутив NT 6=== | ||
+ | Участник сообщества The_DarkFire [https://chat.reactos.org/reactos/pl/hbqmqftoepf4pxtoh1u4r1ofgy делает] [https://github.com/Ring-0-Productions/reactos/tree/PostReset-ReactOSLongHorn проект] по созданию ReactOS с функциями NT 6.1 - ReactOS Longhorn. | ||
+ | |||
+ | Наработки проекта по состоянию на 18.04.23 можно скачать по ссылке: https://disk.yandex.ru/d/4OJEHFtqnHG0mw | ||
==Реализация режима совместимости== | ==Реализация режима совместимости== | ||
Строка 39: | Строка 57: | ||
В более новых версиях Windows реализована в виде расширения оболочки (acppage.dll). Использует функции SetPermLayerState, SdbGetPermLayerKeys. | В более новых версиях Windows реализована в виде расширения оболочки (acppage.dll). Использует функции SetPermLayerState, SdbGetPermLayerKeys. | ||
− | На данный момент вкладка реализована вместе с функциональностью позволяющей применить необходимые «слои» | + | На данный момент вкладка реализована вместе с функциональностью позволяющей применить необходимые «слои». |
*<del>{{JIRA|10375}}</del> | *<del>{{JIRA|10375}}</del> | ||
Строка 51: | Строка 69: | ||
===Инфраструктура Shim=== | ===Инфраструктура Shim=== | ||
− | Реализует базовую инфраструктуру для | + | Реализует базовую инфраструктуру для работы со слоями совместимости. |
*{{JIRA|10370}} | *{{JIRA|10370}} | ||
Строка 57: | Строка 75: | ||
*{{JIRA|10369}} | *{{JIRA|10369}} | ||
Предоставляет: | Предоставляет: | ||
− | *список "эмулируемых" версий API | + | *список "эмулируемых" версий API (''VersionLie'') (<del>{{JIRA|11299}}</del>) |
*настройку разрешения экрана/глубины цвета/отключение тем (<del>{{JIRA|11927}}</del>) | *настройку разрешения экрана/глубины цвета/отключение тем (<del>{{JIRA|11927}}</del>) | ||
+ | *игнорировать песочницу Chrome {{JIRA|13409}} | ||
+ | *обработчик исключений WindowProc {{JIRA|12244}} | ||
===ShimLib=== | ===ShimLib=== | ||
− | *{{JIRA|11329}} | + | *<s>{{JIRA|11329}}</s> |
Выполняет вспомогательные функции для регистрации регулировочных слоев и для обработки общих задач. | Выполняет вспомогательные функции для регистрации регулировочных слоев и для обработки общих задач. | ||
− | Первый коммит - [http:// | + | Первый коммит - [http://github.com/reactos/reactos/commit/3da415c457d68745c20dc32c6be37bfe8d83bfb1 r73461]. |
===Данные Shim в ярлыках=== | ===Данные Shim в ярлыках=== | ||
Строка 71: | Строка 91: | ||
==Статус реализации== | ==Статус реализации== | ||
− | *5 сентября 2015 года в ядре [http:// | + | *5 сентября 2015 года в ядре [http://github.com/reactos/reactos/commit/2565dcba2634cdf76559f7e85fcf91596a1ba1cc был реализован] компонент '''NtApphelpCacheControl''' (<del>{{JIRA|9914}}</del>) |
− | *31 марта 2016 года [http:// | + | *31 марта 2016 года [http://github.com/reactos/reactos/commit/3a5f8b5d7eee1d38d1484a8033a6614399e6db08 была добавлена] библиотека '''apphelp.dll''' (<del>{{JIRA|10367}}</del>) |
− | *28 мая 2016 года [http:// | + | *28 мая 2016 года [http://github.com/reactos/reactos/commit/cc1a5a5932b1f599459948cdecd0214d010933ce был добавлен] список "эмулируемых" версий API (<del>{{JIRA|11299}}</del>) |
− | *16 декабря 2016 года [http:// | + | *16 декабря 2016 года [http://github.com/reactos/reactos/commit/b7add401e93e88e15f10a0f3108ae93e35a26e72 была] [http://github.com/reactos/reactos/commit/f3f43843fe5a102367bd581b90f28323bf271ff3 добавлена] [http://github.com/reactos/reactos/commit/71d5b09683e6f97b36aa9fe4ae8c32345205770b настройка] '''разрешения экрана'''/'''глубины цвета'''/'''отключения тем''' (<del>{{JIRA|11927}}</del>) |
− | *22 апреля 2017 года - [http:// | + | *22 апреля 2017 года - [http://github.com/reactos/reactos/commit/20756892b7414163fd56df7de1d70dbf42ff5257 реализация] пользовательского выбора режима совместимости в виде расширения оболочки '''acppage''' |
− | *19 мая 2017 года [http:// | + | *19 мая 2017 года [http://github.com/reactos/reactos/commit/bbe72b0163cfee85b8cdd63f64b31fc459ccb26e была добавлена] начальная реализация интеграции apphelp в создание процесса, COM, MSI и загрузку драйверов ({{JIRA|10368}}) |
− | *29 июня 2017 года [http:// | + | *29 июня 2017 года [http://github.com/reactos/reactos/commit/af9601337012b0e6338dec15bdad7bede9e6ef53 была реализована] функция '''SdbpMatchExe''', позволяющая сопоставить файлы/приложения в соответствии с параметрами ({{JIRA|13284}}) |
*1 июля 2017 года: | *1 июля 2017 года: | ||
− | **[http:// | + | **[http://github.com/reactos/reactos/commit/1fa3c1a922e132061dda703b00cca986d8695271 была полностью реализована] вкладка для проводника |
**было реализовано большинство необходимых функций apphelp sdb. Остальные будут реализованы когда понадобятся | **было реализовано большинство необходимых функций apphelp sdb. Остальные будут реализованы когда понадобятся | ||
− | **[http:// | + | **[http://github.com/reactos/reactos/commit/711a1cb3414768c59419bb0454a1265403f7a5a6 произведена] интеграция [http://jira.reactos.org/browse/CORE-13284 apphelp] в создание процесса |
− | *17 августа 2017 года режим совместимости [http:// | + | *30 июля 2017 года была завершена разработка ShimLib |
− | + | *17 августа 2017 года режим совместимости [http://github.com/reactos/reactos/commit/9d8fe6f2381db5c877cc9d1858fae209bb77eb97 был включен] по-умолчанию (при этом он не может применяться на системные файлы - в '''system32''' и '''WinSxS''') | |
− | + | *10 января 2018 был реализован [http://github.com/reactos/reactos/commit/63a3a2cbb8d67c1afe8b283880e75e0e5b5bed01 запуск] [http://github.com/reactos/reactos/pull/273 NT6-приложений] (информация в [http://www.reactos.org/archives/public/ros-general/2018-January/002984.html списке рассылки]) (Colin Finck) | |
− | + | *24 февраля 2018: | |
− | + | **были реализованы ''VersionLie'' для '''WIN8''' и '''WIN81'''[http://github.com/reactos/reactos/commit/9b55e647fae5c899f22699a6f432ae44e2c11146][http://github.com/reactos/reactos/commit/2ffc6846996748c7d81bd569ba44ffd8bf858bc4] | |
− | * | + | **в acppage добавлены системы NT6+[http://github.com/reactos/reactos/commit/9b55e647fae5c899f22699a6f432ae44e2c11146] |
− | * | + | *2019 |
− | * | + | **начата работа по поддержке пользовательских установщиков shim |
− | * | + | **приложения могут получить версии Windows 7 SP1, 8 или 8.1 |
− | * | + | **исправлены некоторые сбои движка shim[https://reactos.org/wiki/Community_Changelog-0.4.12] |
− | -- | + | *23 августа 2019 - [https://github.com/reactos/reactos/pull/1872 PR-1872] - Система управления версиями для DLL |
+ | *28 мая 2020 - [http://github.com/reactos/reactos/pull/2872 PR-2872] - Начальная реализация движка Kernel Shim Engine | ||
==База совместимости== | ==База совместимости== | ||
Приложения работающие через режим совместимости: | Приложения работающие через режим совместимости: | ||
− | *VMware Horizon Client for 32-bit Windows[http:// | + | *VMware Horizon Client for 32-bit Windows[http://github.com/reactos/reactos/commit/1eee5db1a53b0ff65a7bbe938d5be82f0aa7c845][http://vk.com/wall-1086956_45871] |
+ | *Windows Media Player 6.4[http://vk.com/wall-1086956_50195] | ||
+ | *Windows Media Player 7[http://vk.com/wall-1086956_50259] | ||
+ | *Krita 3.2.1.0[http://reactos.org/forum/viewtopic.php?f=2&t=10972&start=1125#p129165] | ||
+ | *QuickTime Player 7.7.9[http://reactos.org/forum/viewtopic.php?f=2&t=10972&start=1125#p129166] | ||
+ | *Sound Forge Pro 11.0 build 299[http://www.reactos.org/forum/viewtopic.php?f=2&t=10972&start=1140#p131866] | ||
==*_vista-библиотеки== | ==*_vista-библиотеки== |
Текущая версия на 22:50, 18 апреля 2023
Содержание
[убрать]Режим совместимости
Application Compatibility Framework (фреймворк совместимости приложений) - механизм, предназначенный для работы с ошибками в приложениях. После обновления операционной системы некоторые приложения внезапно перестают работать. Общей причиной этого является то, что приложение используют в своей работе исправленную ошибку в операционной системе. И после исправления данной ошибки приложение, без вмешательства автора, больше не будет работать. Поскольку автор может быть недоступен для создания обновления (или может даже не знать о проблеме), в приложении Application Compatiblity Framework есть средства для устранения распространенных ошибок.
Наиболее известной для пользователя является вкладка «Совместимость», находящаяся в диалоговом окне свойств.
В ReactOS аналог данной функции разрабатывает Mark Jansen.
Поддержка API NT 6.0
- 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-11292 - Реорганизация ядра Win32 API - PR-397 Timo Kreuzer реализует поддержку экспорта версий.
Реорганизации API со следующими целями:
- Использование статических библиотек / API-наборов MinWin в качестве основы
- Комбинирование (объединение общеиспользуемых API наподобие kernel32/advapi32/... в единую DLL, типа MinWin API используемую в качестве основы)
- Возможность тестирования DLL в Windows (добавление пользовательских целей для автономных полных DLL на поддерживаемую целевую версию: kernel32_0x502 для 2k3)
- Управление конкретными версиями API
- DLL Naming (пользовательские имена DLL для основных DLL)
"Идея состоит в создании наборов «оберточных DLL», по одному для каждой версии ОС. Каждая из них обращается к "базовой версии" (например, «roskernelbase.dll»), за исключением тех, которые требуют специальной обработки. Все это можно сделать, не создавая полдюжины копий спек-файлов." - Timo Kreuzer, PR-397
Дистрибутив NT 6
Участник сообщества The_DarkFire делает проект по созданию ReactOS с функциями NT 6.1 - ReactOS Longhorn.
Наработки проекта по состоянию на 18.04.23 можно скачать по ссылке: https://disk.yandex.ru/d/4OJEHFtqnHG0mw
Реализация режима совместимости
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 в создание процесса
- 3 июня 2017 года была начата интеграция apphelp в создание процесса
Инфраструктура Shim
Реализует базовую инфраструктуру для работы со слоями совместимости.
Создание стандартных значений Shim
Предоставляет:
- список "эмулируемых" версий API (VersionLie) (
CORE-11299) - настройку разрешения экрана/глубины цвета/отключение тем (
CORE-11927) - игнорировать песочницу Chrome CORE-13409
- обработчик исключений WindowProc CORE-12244
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)
- 1 июля 2017 года:
- была полностью реализована вкладка для проводника
- было реализовано большинство необходимых функций apphelp sdb. Остальные будут реализованы когда понадобятся
- произведена интеграция apphelp в создание процесса
- 30 июля 2017 года была завершена разработка ShimLib
- 17 августа 2017 года режим совместимости был включен по-умолчанию (при этом он не может применяться на системные файлы - в system32 и WinSxS)
- 10 января 2018 был реализован запуск NT6-приложений (информация в списке рассылки) (Colin Finck)
- 24 февраля 2018:
- 2019
- начата работа по поддержке пользовательских установщиков shim
- приложения могут получить версии Windows 7 SP1, 8 или 8.1
- исправлены некоторые сбои движка shim[4]
- 23 августа 2019 - PR-1872 - Система управления версиями для DLL
- 28 мая 2020 - PR-2872 - Начальная реализация движка Kernel Shim Engine
База совместимости
Приложения работающие через режим совместимости:
- VMware Horizon Client for 32-bit Windows[5][6]
- Windows Media Player 6.4[7]
- Windows Media Player 7[8]
- Krita 3.2.1.0[9]
- QuickTime Player 7.7.9[10]
- Sound Forge Pro 11.0 build 299[11]
*_vista-библиотеки
В исходном коде ReactOS есть библиотеки advapi32_vista, kernel32_vista, ntoskrnl_vista и ntdll_vista. Может показаться, что они существуют для реализации vista-API в ReactOS, однако, это не так. Они предназначены для предоставления необходимых функций для линкинга [i] используемых Wine-библиотек.
Ссылки
- Обсуждение на форуме: [12], [13];
- Управление версиями в списке рассылки
- One-Core-Api - слой совместимости NT6 для Windows XP/2003 на базе Wine и ReactOS
- Wined3D, [14] - обертка основанная на Wine, транслирующая вызовы DirectX 1-11 в OpenGL, являющаяся полной реализацией DirectX для старых версий Windows.
- О режиме совместимости на сайте Microsoft (англ.)
- Режим совместимости на официальной вики