ROSdll compatibility

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

Совместимость c dll Windows

ROSdll 2014-12-27 19.00.54.png
ROSdll 2014-12-27 19.26.37.png

Обсуждение этой темы на форуме 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.

Возможные сценарии применения:

  1. Выявление проблемных мест в ReactOS. Замена dll reactos на dll windows для выявления нереализованных функций в этих библиотеках и повышении стабильности и совместимости. Можно организовать список dll, что и какой версии можно заменить/добавить от windows. В WINE подобный подход использует скрипт WineTricks (и другие похожие утилиты).
  2. Обнаружение "узких мест" в dll ReactOS. Проверка функционирования dll ReactOS'а, посредством простой замены соответствующих dll'ек Windows. Оценка работоспособности Windows с "кусками" ReactOS. Различные эксперименты с Windows Research Kernel (cоздание "windows" с ограниченной функциональностью или узкой специализацией, такой как запуск только определенных приложений, например).
  3. "Вилка" dll. Использование некой "интерфейсной" dll, которая бы получала данные от программ, и передавала бы их сразу двум dll - из windows и reactos, а потом сравнивала бы возвращаемые ими результаты, и в случае их расхождения указывала бы на ошибки. Критика: уже есть тесты WINE, может быть нарушена "совместимость с документацией".

Внимание! "Перемешивание" библиотек и файлов из свободных и проприетарных ОС нарушает вопросы лицензий и авторских прав, поэтому мы настоятельно рекомендуем использовать этот подход только для исследовательских целей и не распространять подобный "винегрет".

Информация о совместимости с Windows Server 2003

Тестирование 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.

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