ROSdll compatibility
Содержание
Совместимость c dll Windows
Обсуждение этой темы на форуме ReactOS
В конце 2013 (билд 59985) появилась первая информация о совместимости (и заменяемости) kernel32.dll и ntdll.dll из ReactOS с Windows Server 2003 SP1. Эта информация (59985 коммит) многими была воспринята, как знак полной функциональной взаимозаменимости этих файлов в ReactOS и Windows, однако это ошибочное суждение. Данный факт свидетельствует, в первую очередь, о совместимости этих dll на уровне интерфейсов и "общего каркаса" системы. С точки зрения функциональной полноты, эти dll различаются достаточно сильно.
Справа на этой странице скриншоты ReactOS с подсистемой Win32 из Windows 2003, (т.е. файлы gdi32.dll, user32.dll, win32k.sys) по состоянию на 27.12.2014.
Возможные сценарии применения:
- Выявление проблемных мест в ReactOS. Замена dll reactos на dll windows для выявления нереализованных функций в этих библиотеках и повышении стабильности и совместимости. Можно организовать список dll, что и какой версии можно заменить/добавить от windows. В WINE подобный подход использует скрипт WineTricks (и другие похожие утилиты).
- Обнаружение "узких мест" в dll ReactOS. Проверка функционирования dll ReactOS'а, посредством простой замены соответствующих dll'ек Windows. Оценка работоспособности Windows с "кусками" ReactOS. Различные эксперименты с Windows Research Kernel (cоздание "windows" с ограниченной функциональностью или узкой специализацией, такой как запуск только определенных приложений, например).
- "Вилка" dll. Использование некой "интерфейсной" dll, которая бы получала данные от программ, и передавала бы их сразу двум dll - из windows и reactos, а потом сравнивала бы возвращаемые ими результаты, и в случае их расхождения указывала бы на ошибки. Критика: уже есть тесты WINE, может быть нарушена "совместимость с документацией".
Внимание! "Перемешивание" библиотек и файлов из свободных и проприетарных ОС нарушает вопросы лицензий и авторских прав, поэтому мы настоятельно рекомендуем использовать этот подход только для исследовательских целей и не распространять подобный "винегрет".
Информация о совместимости с Windows Server 2003
- Информация о компонентах Windows Server 2003, запущенных в ReactOS на официальной вики.
- CORE-7481 - отчет в багтрекере
Тестирование ReactOS-компонентов режима пользователя в Windows
Оригинал: http://www.reactos.org/forum/viewtopic.php?f=11&t=8164
Для сравнения функционала, в Windows можно использовать user-mode компоненты ReactOS (приложения, dll, cpl и пр.)
Цель данного действия - обнаружение багов и четкое их разграничение того, что является его причиной - само приложение, используемые ею dll или еще глубже.
В примере будет использоваться приложение "Блокнот".
Имеются:
- папка, в которой лежит периодически компилируемый, исходный код ROS [D:\trunk4build]
- ноутбук, с установленной в папку C:\WINDOWS, Windows XP
Требуется: чтобы после каждой компиляции определенные файлы из РОС "копировались" в соответствующую папку в Windows.
Сделать это можно несколькими способами:
- написать .cmd-скрипт, выполняющий копирование, вручную запускаемый после компиляции, либо прикрученный к RosBE
- сделать символьные ссылки, т.е. перенаправить запросы идущие к приложениям, находящимся в C:\WINDOWS, в приложения, находящиеся в D:\trunk4build.
Оба метода имеют недостатки:
- копирование увеличивает размер (хотя вместо него можно использовать хардлинк), но это не спасает от того, что "копирование" будет происходить только поле выполнения компиляции.
- если вдруг кто-то запостит коммит, нарушающий сборку приложения, например notepad-а, на который вы сделали симлинк, то вы временно останетесь без стандартного блокнота.
Далее будет рассматриваться второй вариант.
Чтобы не остаться без оригинальных windows-приложений, скопируйте их exe-файлы в отдельную директорию (например, C:\c\WINDOWS).
Для того, чтобы файл C:\WINDOWS\system32\notepad.exe не восстанавливался после перемещения, необходимо заранее удалить его копию из C:\WINDOWS\system32\dllcache (Удаляйте осторожно. Убедитесь, что у вас все еще есть копия этого файла в C:\WINDOWS\system32 или в C:\c\WINDOWS\system32)
Если Windows начнет ругаться на отсутствие системных компонентов отключите WFP с помощью Windows-File-Protection-Switcher.
После его запуска нам будет предложено выключить WFP и перезагрузиться.
Т.к. в Windows XP нет симлинков для файлов, необходимо воспользоваться утилитой symlink, оформленной в виде драйвера, консольного приложения, запускающего драйвер, и собственно консольного приложения, создающего симлинки:
Все что надо - это распаковать 3 файла из архива, прописать их в PATH (или банально скопировать в C:\WINDOWS), поставить в автозагрузку senable.exe и, чтобы лишний раз не перезагружаться, запустить его же.
После этого из консоли можно будет создавать симлинки вот так:
ln -s существующий_файл создаваемый_файл
И заодно хардлинки:
ln существующий_файл создаваемый_файл
Для нашего примера это выглядит так:
ln -s D:\trunk4build\output-i386\base\applications\notepad\notepad.exe C:\WINDOWS\system32\notepad.exe
В результате получим файл C:\WINDOWS\system32\notepad.exe имеющий нулевой размер, который не удаляется при удалении исходного notepad.exe, а просто ругается...
Затем при необходимости компилим ROS целиком или отдельно notepad - и симлинк просто работает.
Собственно указанным выше способом можно без проблем заменять:
- приложения из D:\trunk4build\output-i386\base\applications
- cpl-ки из D:\trunk4build\output-i386\dll\cpl
и всевозможные dll-ки...
Подобный способ тестирования рекомендуется тем, кто хочет начать кодить/присылать патчи в ROS, но не сильно знаком с режимом ядра и пока не хочет далеко лезть в ядро и kernel-mode.
Даже если приложение будет использовать функции, которые еще не реализованы в ROS, или неправильно работают - всегда можно закомментить эти места, но при этом будет видно чего и где не хватает или где закралась ошибка.
Тестовая пересадка донорских Dll от Windows XP/2003 для ReactOS
Сторонние компоненты, которые могут понадобиться для запуска, тестирования и улучшения работы ReactOS и запущенных в нем программ.
компонент | откуда | зачем | от кого |
---|---|---|---|
hdaudbus.sys | из Windows Server 2003 | Нужен для корректной работы драйвера Realtek High Definition Audio. Работает с незначительными ошибками. Вручную скопируйте с заменой в папку system32\drivers и перезагрузите систему перед установкой аудиодрайвера. | Олег Дубинский © |
portcls.sys | из Windows Server 2003 | способствует улучшению звука в ReactOS (Уменьшение рывков и хрипов во время работы приложений). | ??? Illen © |
usbuhci.sys, usbohci.sys, usbehci.sys[1] | из Windows XP/W2003 | для тестирования usb стека ReactOS. | Вадим Галянт © |
ATMLIB.dll | Для корректной работы Adobe Reader с заполняемыми PDF-формами в ReactOS | Администрация ReactOS © | |
BORdbk70.dll, DCC70.DLL | Delphi 7 с минимальными возможностями. После установки скопируйте файлы в "C:\Program Files\Common Files\Borland Shared\Debugger", выполните регистрацию BORdbk70.dll, перезагрузите систему. | Николай Бурштын © | |
dsound.dll | из Windows Server 2003 | Нужна для работы звука в некоторых приложениях и играх, использующих DirectSound в качестве ввода/вывода звука. Иногда может вызывать незначительные ошибки. Вручную скопируйте с заменой в папку system32. | Олег Дубинский © |
mpglib.dll | нужна для работы плеера 1by1 1.87. | Ярослав Денисов © | |
mfc42u.dll | из Windows XP/W2003 | нужна для запуска ShadowUser Pro. Вручную скопируйте в папку system32. Перезагрузите ReactOS. | Андрей Шаталов © |
Изменение реализации Windows server 2003 на Windows xp с помощью реестра ReactOS
Как заставить ReactOS "прикинутся" десктопом вместо сервера и тем самым увеличить количество рабочих в ней программ. Рассказал Олег Дубинский.
1. Зажать win+r прописать regedit, и выполнить.
2. Удалить Terminal Server (оставить поле пустым); в этой же ветке изменить значение ProductType с ServerNT на WinNT (идентично ХР).
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptions\ProductSuite
3. В данной ветке выставить значение с 0 на 1.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ReactOS\Settings\Version\ReportAsWorkstation
4. Перезагрузить ReactOS.