ROS Newsletter52

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

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

Продолжение работы над Win32

Тимо Кройцер (Timo Kreuzer) продолжает свою работу над исправлением подсистемы Win32, в последнее время занимаясь функциями SetWindowExtEx и SetViewportExtEx. Первым шагом стало их перемещение из win32, где эти операции изначально производились, в gdi32, где они должны производиться. У Джима Табора (Jim Tabor) имелся код, реализующий это, но он требовал правки. Хотя работа ещё не завершена, Тимо уже исправил некоторые ошибки. Это две функции для установки размеров контекста устройства, по одной для окна и проекции соответственно. Окно представляет собой набор логических координат, задающих GDI регион для прорисовки, в то время, как проекция - это набор координат устройства, в которые преобразуются логические координаты при выводе изображения на экран. В зависимости от используемого режима, существуют различные способы преобразования логических координат в координаты устройства. Тимо исправил некоторые режимы, однако в данный момент изотропный режим не функционирует. Изотропия требует одинаковых размеров по вертикали и горизонтали. Приложение, в котором наиболее заметна эта проблема - редактор ресурсов в Visual Basic 6.

Джим Табор, помимо того, работал над исправлением структуры ThreadInfo, пытаясь исправить работу таймеров, что позволит исправить меню, а также другие проблемы с прорисовкой, и, в конечном итоге, исправить проблему, из-за которой необходимо двигать мышью для загрузки страниц в Firefox. Это отличный пример того, как проблемы в одном компоненте способны каскадом создавать массу ошибок-долгожителей, таких, как проблема с Firefox, которая существовала не менее года. Другое следствие этой ошибки - меню в GIMP неверно отрисовывается, а работа самого GIMP при определённых действиях завершается с критической ошибкой. Проблема состоит в том, что таймеры сохраняются в очереди сообщений, хотя должны они сохраняться в фиксированном списке. Адрес очереди в настоящий момент хранится в структуре данных ClientThreadInfo, однако адрес, по которому таймеры должны находиться в действительности, сохраняется в совершенно другом месте. На самом деле это место находится по правильному адресу, а в ClientThreadInfo записан неправильный адрес, что приводит к несоответствию, вызывая ошибку в пользовательском режиме и завершение работы приложения.

Поддержка отладки

Почти два года прошло с первого упоминания о поддержке WinDBG и разработчики продолжают работать над её улучшением. Ряд проблем не даёт WinDBG корректно функционировать в ReactOS, и Стефан Гинсберг (Stefan Ginsberg) с Тимо Кройцером независимо друг от друга работали над находящимися под вопросом компонентами. Стефан нашел ошибку в HAL и KDCOM, связанную с функцией KdComPortInUse. Эта функция определёна в HAL, но из-за особенностей компилятора это было сделано неверно. Затем в KDCOM был добавлен хак, позволявший устранить проблему, однако один из параметров настройки RBuild удалял хак. Стефан активировал этот параметр, что предсказуемо привело к поломке. К несчастью, даже после исправления определения этой функции, оставшаяся часть KDCOM всё ещё недостаточно полно реализована, чтобы WinDBG мог корректно функционировать, однако, на данный момент для целей отладки можно использовать KDCOM из Windows Server 2003. Поэтому, Тимо сейчас занимается доработкой KDCOM.

В данный момент ReactOS использует компонент под названием kdbg, который просто перенаправляет отладочные сообщения на любой терминал, соединённый с первым последовательным портом. С другой стороны, Windows использует KDCOM для отладочного ввода/вывода и обладает гораздо более сложным отладочным протоколом. KDCOM представляет из себя библиотеку, используемую для вывода отладочной информации из ядра системы через последовательный порт. Для целей портирования на платформу x64, Тимо пришлось заняться переписыванием KDCOM. Исходная версия в транке была крайне устаревшей, однако, для соединения с WinDBG, в ReactOS необходимо наличие версии KDCOM как минимум совместимой с Windows 2003 Server. Существует несколько реализаций KDCOM, но Тимо считает, что все они были разработаны методом прямого реверс-инжиниринга. Поэтому он написал свою версию почти с нуля, воспользовавшись методом "чёрного ящика", т.е. изучив входные и выходные данные аналогичного компонента в Windows. Написанный Тимо KDCOM уже позволяет WinDBG соединяться, дизассемблировать, читать память и некоторые другие вещи, которые должен уметь делать отладчик. Однако, это всё существует в ветке для портирования на платформу x64, и Тимо ещё не пытался перенести эти изменения обратно в транк.

FOSDEM

Проект ReactOS, как обычно, будет участвовать в FOSDEM (встреча европейских разработчиков свободного и открытого ПО, Free and Open Source Software Developers European Meeting) с несколькими разработчиками у нашего стенда. Поскольку в Европе живёт много разработчиков ReactOS, то им гораздо проще собраться на именно на этой конференции, чем на любой другой. Разработчики, которые планируют посетить FOSDEM - это Эндрю Гринвуд (Andrew Greenwood), Алексей Брагин, Стефан Гинсберг, KJK::Hyperion, Колин Финк и Пьер Швейцер (Pierre Schweitzer). Так что непременно загляните, поприветствуйте их и возьмите компакт-диск с 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