Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Kernel Draw через GDI на DWM — как фиксить обновление кадра?

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
507
Реакции
13
Здарова, мужики. Подкатил вопрос по низкоуровневой отрисовке. Пытаюсь выводить графику через GDI прямо из ядра, аттачнувшись к dwm.exe, но столкнулся с классической бедой — картинка просто «залипает» на экране и не хочет обновляться автоматически.

Юзаю стандартный набор сисколлов:
Код:
Expand Collapse Copy
hdc = NtUserGetDC(0);
brush = NtGdiCreateSolidBrush(RGB(255, 255, 255), NULL);
NtGdiSelectBrush(hdc, brush);
NtGdiPatBlt(hdc, x, y, w, h, PATCOPY);
NtGdiFlush();
NtGdiDeleteObjectApp(brush);
NtUserReleaseDC(hdc);

Пробовал даже хукать NtGdiDdDDISubmitCommand и DxgkPresent, но результат нулевой — отрисовки либо нет вообще, либо она висит мертвым грузом.

Система — Windows 11 24H2. Похоже, в этой сборке мелкомягкие опять что-то перекрутили в логике композитора. Раньше NtGdiFlush хватало за глаза, а теперь DWM класть хотел на эти вызовы.

Кто-нибудь уже воевал с обновлением кадра на последних билдах винды? Есть идеи, как заставить DWM перерисовывать регион или принудительно пушить буфер?

Кто уже сталкивался с таким на 24H2?
 
Назад
Сверху Снизу