Compatibility mode — различия между версиями
(→Реализация apphelp sdb) |
(→Статус реализации) |
||
Строка 48: | Строка 48: | ||
==Статус реализации== | ==Статус реализации== | ||
*5 сентября 2015 года в ядре [http://code.reactos.org/changelog/reactos?cs=69022 был реализован] компонент '''NtApphelpCacheControl''' (<del>{{JIRA|9914}}</del>) | *5 сентября 2015 года в ядре [http://code.reactos.org/changelog/reactos?cs=69022 был реализован] компонент '''NtApphelpCacheControl''' (<del>{{JIRA|9914}}</del>) | ||
− | *31 марта 2016 года [http://code.reactos.org/changelog/reactos?cs=71084 была | + | *31 марта 2016 года [http://code.reactos.org/changelog/reactos?cs=71084 была добавлена] библиотека '''apphelp.dll''' (<del>{{JIRA|10367}}</del>) |
==Ссылки== | ==Ссылки== | ||
*[https://reactos.org/forum/viewtopic.php?f=2&t=14589 Обсуждение на форуме] | *[https://reactos.org/forum/viewtopic.php?f=2&t=14589 Обсуждение на форуме] | ||
{{ReactOS}} | {{ReactOS}} |
Версия 11:00, 2 мая 2016
Содержание
[убрать]Режим совместимости
Некоторые программы в более новых версиях 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-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 и загрузку драйверов.
Инфраструктура Shim
Реализует базовую инфраструктуру для эмуляции различных API.
Создание стандартных значений Shim
Предоставляет список "эмулируемых" версий API.
Статус реализации
- 5 сентября 2015 года в ядре был реализован компонент NtApphelpCacheControl (
CORE-9914) - 31 марта 2016 года была добавлена библиотека apphelp.dll (
CORE-10367)