Wine 11.18 расширил NTOSKRNL и закрыл 21 ошибку

2026-09-19 41 комментарии
18 сентября 2026 года вышел двухнедельный выпуск Wine 11.18. В реализации NTOSKRNL добавлены PnP, идентификаторы контейнеров и вызовы для драйверов ядра, поправлены заголовки C. Закрыты 21 ошибка: Assassin’s Creed Rogue, Super Meat Boy, KOTOR, Adobe Creative Cloud, регрессии запуска и ARM64EC

вышел двухнедельный выпуск Wine 11.18. В нём расширена реализация NTOSKRNL для Windows-драйверов режима ядра, исправлены стандартные заголовки языка C и закрыта 21 зарегистрированная ошибка в играх и приложениях.

NTOSKRNL для драйверов режима ядра

Wine 11.18 продолжает реализацию NTOSKRNL. Слой совместимости не заменяет ядро Windows: в пользовательском пространстве добавляются те функции ядра, которые вызывают загружаемые Windows-драйверы при инициализации и опросе устройств.

NTOSKRNL – в Windows это исполняемый файл ядра ntoskrnl.exe: диспетчер процессов и памяти, абстракция оборудования и исполнительный слой NT. В Wine под тем же именем собрана пользовательская реализация этих вызовов.

Диспетчер PnP в 11.18 строит дерево устройств и формирует уникальный instance ID по родительскому устройству. Для устройств записываются дата первой установки, флаги возможностей SPDRP_CAPABILITIES и идентификатор контейнера: собственный, если драйвер его сообщает, либо назначенный Wine. Функция IoGetDeviceProperty() обрабатывает запрос DevicePropertyContainerID. Драйвер hidclass.sys получает большую часть instance ID от диспетчера PnP.

Отдельно реализованы функции, через которые драйвер запрашивает процесс и поток, основной токен, имя образа процесса, диапазоны физической памяти и путь к файлу образа. К этим вызовам добавлены тесты, включая сценарии с деревом PnP и отказом IRP_MJ_CREATE. Изменение относится к программам, которые загружают собственный драйвер режима ядра, а не только вызывают Win32 API из пользовательского режима.

Заголовки языка C и инициализация ntdll

В стандартных заголовках языка C устранены расхождения с Windows SDK и ожидаемым поведением компиляторов: макрос EXIT_FAILURE задан как 1, а не как -1, исправлен размер поля в структуре OUTLINETEXTMETRIC16. Закрыты ошибки корректности кода: двойное освобождение памяти, неверный расчёт длины строки и повреждение данных в обработчиках ошибок.

В ntdll изменена ранняя инициализация процесса. Образ основной программы отображается в память до выделения параметров запуска, начальные данные потока размещаются в верхней области адресного пространства, идентификатор сеанса и число процессоров хранятся в глобальных переменных. Часть этих правок вызвала регрессии; их устранили в том же выпуске.

Игры, Adobe и ввод

Из 21 закрытого отчёта значительная часть относится к играм. В Assassin's Creed Rogue на части текстур больше не накладывается эффект карты нормалей. В Super Meat Boy устранено периодическое искажение музыки. Версия Screamer 4x4 1.2 с GOG.com больше не завершается аварийно через 40–50 секунд в полноэкранном режиме при работе через XWayland.

В Star Wars: Knights of the Old Republic устранены графические наложения и искажение кадра в трёхмерных сценах после запуска или загрузки сохранения. В Return to Krondor восстановлены текст и графика на нескольких экранах меню. В The Bard's Tale IV Director's Cut исправлено воспроизведение MP4: ролики больше не оставляют чёрный экран и не приводят к зависанию. Регрессия в компоненте mfreadwrite больше не вызывает аварийное завершение In Sound Mind на вступительных видео.

Исправлена регрессия обработки кнопок мыши в нескольких играх, запущенных через Steam. Окна приложений Wine больше не реагируют на щелчки мыши вне клиентской области окна. В Enclave снова работает регулировка яркости.

Adobe Creative Cloud больше не требует нереализованную функцию KERNEL32.dll.SetThreadpoolTimerEx. Установщик Adobe Express Photos больше не завершается аварийно из-за отсутствующей KERNEL32.dll.PackageFullNameFromId. Также закрыты тихий выход 16-разрядного установщика QuickTime 2.x, повреждённая рамка окна в SlingPlayer 1.5, неверный разбор параметра /value в wmic и чтение за границами буфера в GDI+.

Запуск Wine, ARM64EC инорвежский язык

После переноса выделения начального TEB на момент после загрузки основного образа Wine в части конфигураций переставал запускаться. Та же правка вызывала сбой на системах ARM64EC. Оба отчёта закрыты в 11.18 вместе с регрессией, которая появилась после сохранения дескриптора главного модуля в глобальной переменной.

ARM64EC – ABI компании Microsoft для Windows on ARM. Часть кода выполняется как ARM64, часть остаётся в формате x64 и транслируется во время исполнения. Регрессия в ntdll проявилась в таких сборках.

Исправлена ошибка локали: при системной локали норвежского языка встроенные Regedit и Notepad выводили интерфейс на арабском языке.

Заключение

Wine 11.18 – очередной двухнедельный выпуск ветки 11.x. В играх и прикладных программах исправлены ввод, видеоролики и текстуры. Реализация NTOSKRNL пополнилась функциями, которые нужны загружаемым драйверам режима ядра.

Исходный код опубликован в релизе wine-11.18 на GitLab и в архиве wine-11.18.tar.xz. Текст анонса – в новости WineHQ от 18 сентября. Готовые пакеты для дистрибутивов Linux появятся на странице загрузок WineHQ и в репозиториях самих дистрибутивов.

© .
Комментарии и отзывы

Нашли ошибку?

Новое на сайте