ROS Newsletter99

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

Выпуск новостей ReactOS №99

Оболочка

За время, прошедшее с момента выхода предыдущего выпуска новостей, Яннис Адамопулос (Giannis Adamopoulos) выполнил свои обязательства по контракту на разработку, и, несмотря на то, что более подробный отчёт об этом контракте будет опубликован чуть позже, сейчас вполне можно подвести краткий итог его работы. Результаты этой работы выражаются в том, что на данный момент explorer_new успешно запускается в ReactOS и позволяет пользователю просматривать содержимое директорий на дисках. В ходе работы над оболочкой Яннис использовал программный код, в своё время написанный Эндрю Хиллом (Andrew Hill), однако ему всё же пришлось потратить немало времени на то, чтобы разобраться в принципах работы различных меню, встроенных в оболочку.

Меню оболочки в действительности представляют собой панели инструментов, и включают в себя не только те меню, которые мы привыкли видеть при выполнении операций над файлами, но даже меню Пуск. Меню оболочки являются довольно гибким компонентом и в качестве данных для отображения они могут использовать не только объекты типа "меню", но также и объекты типа "папка". Кроме того, поскольку изначально они являются всё же панелями инструментов, в меню оболочки вполне возможно организовать перетаскивание элементов (drag and drop). С небольшой помощью, Яннис смог разобраться во внутреннем устройстве меню в shell32 и создал несколько тестов для их проверки. Следующим его шагом будет создание классов меню оболочки.

Следует заметить, что предстоит выполнить ещё немало работы до того, как в ReactOS появится полноценная оболочка, которая будет сравнима по совместимости и стабильности с используемой в Windows. В имеющейся на данный момент оболочке ReactOS отсутствует так много всего, что вполне можно назвать чудом тот факт, что она всё же предоставляет такое большое количество функций и, несомненно, за это Мартин Фукс (Martin Fuchs) заслуживает аплодисментов. Сейчас Яннис занимается доработкой других элементов пользовательского интерфейса, чтобы explorer_new, как минимум, выглядел более или менее сносно.

Службы аварийного управления

Одной из наименее известных простым пользователям функций Windows является возможность подключиться к системе при помощи последовательного порта и контролировать её работу используя Службы аварийного управления (Emergency Management Services). EMS впервые была представлена в Windows Server 2003, и Алекс Ионеску (Alex Ionescu) занялся разработкой подобного функционала в ReactOS. EMS обеспечивает прямой доступ к Специальной административной консоли (Special Administrative Console), по своей сути являющейся командной строкой, предоставляемой ядром, и поддерживающей всё то, что в обычных условиях можно сделать с помощью командной строки при непосредственном входе в систему, а также много чего ещё.

Одним из ключевых преимуществ EMS и SAC является то, что при установке ReactOS при помощи них не требуются ни видеокарта, ни клавиатура, ни мышь. Во многих случаях эта возможность может оказаться полезной. К примеру, в настоящий момент тестирование системы на регрессии происходит на различных виртуальных машинах, программный код которых был несколько модифицирован с целью обеспечения возможности проверки правильности работы в них ReactOS. Однако, если все необходимые данные можно получить через последовательный порт, то необходимость в этих модификациях пропадает. Другая, более интересная, возможность может позволить упростить загрузку версий ReactOS для различных платформ, например для ARM. Последовательный порт довольно универсален и позволяет получить полный контроль над установкой ReactOS, при этом для проверки базовых функций системы даже не потребуется запускать драйверы видеокарты, клавиатуры и мыши.

Хотя работа над основными компонентами и интерфейсами EMS и SAC завершена, кое-что всё-таки ещё требует доработки, это касается, например, службы пользовательского режима, которая необходима SAC для предоставления полнофункциональной командной строки. Однако, значительная часть функций всё же прекрасно работает, и EMS можно начать тестировать уже сейчас, для этого нужно лишь выбрать соответствующий пункт в меню загрузчика операционной системы.

SVCHOST

SVCHOST – это интересный маленький компонент. Он позволяет множеству служб запускать один и тот же процесс, что приводит к экономии ресурсов системы. В ReactOS имелась довольно примитивная реализация этого компонента, не обеспечивающая должный уровень безопасности и терявшая загружаемые ею службы. Алекс решил исправить эту ситуацию и разработал новую версию этого компонента, и теперь в ReactOS, по его словам, «может работать на 20% больше вредоносных программ».

В SVCHOST имеется несколько особенностей, привлекающих внимание разработчиков вредоносных программ. Поскольку службы, запускаемые SVCHOST являются динамическими библиотеками DLL, то становится намного сложнее обнаружить вредоносную DLL, проникшую в систему извне, а затем загруженную SVCHOST. Прежде всего ключи реестра, управляющие загрузкой SVCHOST служб, далеко не так очевидны, как ключи, отвечающие за автозагрузку во время входа в систему. Далее, поскольку SVCHOST загружает службы как DLL, единственным видимым запущенным процессом является лишь сам SVCHOST. Более того, как только DLL была загружена, операционная система считает её не используемой и разрешает её удалить, тем самым позволяя устранить ещё один признак наличия вредоносного кода. Некоторые наиболее продвинутые вирусы используют эти особенности компонента и копируют в систему свою псевдо-легитимную DLL, которая впоследствии загружается SVCHOST, и вот теперь такому способу атаки стала уязвима и ReactOS. В то же время в программном дизайне SVCHOST нет ничего плохого. Все те проблемы, о которых говорилось выше, являются лишь штатным использованием заявленной функциональности SVCHOST, необходимой для экономии ресурсов путём запуска нескольких служб в одном процессе. Невозможно достичь такой функциональности не предоставив возможность проведения атаки такого типа на систему, а не предоставлять такую функциональность вовсе тоже нельзя, поскольку основной целью ReactOS является обеспечение совместимости с NT5.2. Наличие такой возможности атаковать систему может оказаться полезным для исследователей безопасности, поскольку она позволяет им использовать ReactOS для моделирования большего числа угроз. По крайней мере, с учётом стоимости лицензий на Windows, аквариум с вредоносным ПО будет стоить намного дешевле.

CreateProcess

Полагаю, что большинство разработчиков нативных приложений для Windows знакомы с функцией CreateProcess, поскольку, как понятно из её названия, это функция, создающая новый процесс в какой-либо программе. По сравнению со своими аналогами в мире Linux/Unix, CreateProcess предоставляет куда больше возможностей управления созданием нового процесса: от установки уровня полномочий до работы с флагами совместимости. Предыдущая реализация функции CreateProcessInternalW, в действительности выполняющая всю работу по обработке и использованию передаваемых ей параметров, работала аналогично такой же функции в Windows 2000, и раньше это не было проблемой, поскольку целью проекта на то время являлось обеспечение совместимости с NT5. Поскольку в настоящее время целью проекта является обеспечение совместимости с архитектурой NT5.2, имевшаяся в ReactOS реализация этой функции нас более не устраивала. Именно поэтому Алекс создал новую реализацию, которая учитывает большее количество передаваемых ей флагов и параметров. Кроме корректной поддержки таких вещей, как флаги совместимости, таких параметров запуска на выполнение, как размер страницы памяти и ключи отладки, а также настроек безопасности, в новой реализации этой функции Алекс также использовал улучшенную поддержку путей в NTDLL и библиотеке времени выполнения. Кроме всего этого, новая реализация не только функционально более правильная, она ещё и закладывает основу для последующей работы над различными системами совместимости, необходимыми для поддержки устаревших приложений, такими, например, как NTVDM и SxS.

Загрузка DLL в Windows

Одной из наиболее недооценённых целей развития ReactOS является возможность использования в системе динамических библиотек DLL из Windows, и это та цель, в достижении которой Алекс добился существенных результатов. Теперь стало возможным загружать ReactOS с использованием не модифицированных библиотек kernel32 и/или ntdll, взятых из Windows 2003 SP1. Это достижение стало кульминацией довольно длительной работы Алекса по исправлению множества проблем во взаимодействии подсистемы клиент/сервер времени выполнения (Client/Server Runtime Subsystem) с различными системными библиотеками и вызываемыми ими службами. Важность этого достижения проявляется во многих формах. Имея возможность использовать библиотеки Windows в ReactOS, мы можем намного лучше понять причину успешной или не успешной работы того или иного кода по сравнению с его работой с аналогичной библиотекой ReactOS. В случае возникновения различий можно быстро отследить вызвавший их компонент, для этого всего лишь нужно посмотреть, какие библиотеки были заменены аналогами из Windows, а какие – нет. Кроме того, во все DLL в Windows встроены отладочные символы, которые можно использовать для изучения взаимодействия этих библиотек с собственными компонентами ReactOS, что позволяет лучше понять то, как эти компоненты должны работать вместе. В то же время, подход замены любой библиотеки ReactOS её аналогом из Windows может применяться и наоборот, так что библиотеку ReactOS вполне можно попытаться использовать в установленной Windows 2003 SP1. В этом случае будет возможно использовать все те же самые способы тестирования и поиска ошибок, а также проверить правильность взаимодействия библиотек из ReactOS с другими компонентами операционной системы.

Для того, чтобы воспользоваться этим достижением, Пьер Швейцер (Pierre Schweitzer) и Олаф Сейка (Olaf Siejka) добавили в систему тестирования две дополнительные тестовые среды, позволяющие использовать ntdll из Windows 2003 SP1 при запуске тестов на регрессии. Это позволит производить сравнение между базовой версией ReactOS и версией, которая теоретически будет лучше имитировать Windows 2003 SP1. Всё это вместе взятое должно помочь разработчикам обнаружить скрытые недостатки и ошибки и помочь дальнейшему улучшению совместимости ReactOS.

Newsletters
30-39 #30#31#32#33#34#35#36#37#38#39
40-49 #40#41#42#43#44#45#46#47#48#49
50-59 #50#51#52#53#54#55#56#57#58#59
60-69 #60#61#62#63#64#65#66#67#68#69
70-79 #70#71#72#73#74#75#76#77#78#79
80-89 #80#81#82#83#84#85#86#87#88#89
90-99 #90#91#92#93#94#95#96#97#98#99