Информация об изменениях

Сообщение Re[15]: GDI+ - супер тормоз? от 29.10.2022 3:35

Изменено 29.10.2022 7:16 Pavel Dvorkin

Re[15]: GDI+ - супер тормоз?
Здравствуйте, Философ, Вы писали:

Ф>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>https://learn.microsoft.com/en-us/windows-hardware/drivers/display/gdi-from-the-driver-s-perspective


Ф>Посмотри в каком разделе ты это читаешь:

The Windows 2000 Display Driver Model (XDDM) is the legacy display/graphics driver architecture that was used for Windows 2000 through Windows Vista and Windows 7.


Да, тут ты прав.

Ф>Сейчас картина выглядит иначе:


А вот это для меня не новость. То, что есть user mode драйверы Direct3D и OpenGL — это я знаю. Но мы не о них говорим, а о GDI.

Ф>Если смотреть что из себя представляет Win32k.sys то обнаруживается, что его функции не так просто найти, но таки можно, и там полностью отсутствует что-либо связанное с регионами, полигонами, брашами, карандашами и тем более шрифтами. Это говорит о том, что всё это теперь за пределами ядра.


Ох, что-то не то.

То, что ты дал по ссылке — это результат какой-то grep для какой-то drsyscall. Естественно, там не все.

Ищем в Windows win32k.sys. У меня их FAR нашел 12 штук , в разных подкаталогах C:\Windows\WinSxS. Некоторые из них имеют размер в 300-400 байт, но есть и иного размера.

Честно говоря, не в курсе, какой из них действующий

Но вот, например

Содержимое папки C:\Windows\WinSxS\amd64_microsoft-windows-win32k_31bf3856ad364e35_10.0.19041.2006_none_2dc8ed424fad4d24

<skipped>
14.09.2022 10:12 596 992 win32k.sys
14.09.2022 10:12 3 813 376 win32kfull.sys
14.09.2022 10:12 133 784 win32u.dll


Получить его экспорты совсем не проблема

dumpbin.exe win32k.sys /EXPORTS >l

Вот кусочки оттуда

371 172 000138E0 __win32kstub_NtGdiBRUSHOBJ_DeleteRbrush
372 173 000138F0 __win32kstub_NtGdiBRUSHOBJ_hGetColorTransform
373 174 00013900 __win32kstub_NtGdiBRUSHOBJ_pvAllocRbrush
374 175 00013910 __win32kstub_NtGdiBRUSHOBJ_pvGetRbrush
375 176 00013920 __win32kstub_NtGdiBRUSHOBJ_ulGetBrushColor

413 19C 000125F0 __win32kstub_NtGdiCreatePen
414 19D 000128A0 __win32kstub_NtGdiCreateRectRgn
415 19E 00013A70 __win32kstub_NtGdiCreateRoundRectRgn
673 2A0 00012AC0 __win32kstub_NtGdiExtCreatePen


732 2DB 00012D30 __win32kstub_NtGdiGetFontData
733 2DC 00014C60 __win32kstub_NtGdiGetFontFileData
734 2DD 00014C70 __win32kstub_NtGdiGetFontFileInfo
735 2DE 00014C80 __win32kstub_NtGdiGetFontResourceInfoInternalW
736 2DF 00014C90 __win32kstub_NtGdiGetFontUnicodeRanges

Да, судя по именам, это стабы какие-то


Но там еще есть win32kfull.sys, и у него , например

1289 508 0014F5C0 NtGdiCreateDIBBrush
1290 509 00022FA0 NtGdiCreateDIBSection
1291 50A 00022B40 NtGdiCreateDIBitmapInternal
1292 50B 0029ED10 NtGdiCreateEllipticRgn
1293 50C 00120270 NtGdiCreateHalftonePalette
1294 50D 002B67C0 NtGdiCreateHatchBrushInternal
1295 50E 001573E0 NtGdiCreateMetafileDC
1296 50F 00116A90 NtGdiCreatePaletteInternal
1297 510 00126EC0 NtGdiCreatePatternBrushInternal
1298 511 000A7770 NtGdiCreatePen
1299 512 0007E440 NtGdiCreateRoundRectRgn


1250 4E1 0027C710 NtGdiAddEmbFontToDC
1251 4E2 002AD7A0 NtGdiAddFontMemResourceEx
1252 4E3 00105620 NtGdiAddFontResourceW
1253 4E4 00088790 NtGdiAddInitialFonts
1254 4E5 00289E40 NtGdiAddRemoteFontToDC

1299 512 0007E440 NtGdiCreateRoundRectRgn
1397 574 000EE8F0 NtGdiGetBoundsRect


Правда, есть там еще win32u.dll, и в ней тоже полно аналогичных экспортов. Увы, непонятно, для какого она режима — user mode или kernel mode — импорты ее dumpbin не показывает.
Re[15]: GDI+ - супер тормоз?
Здравствуйте, Философ, Вы писали:

Ф>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>https://learn.microsoft.com/en-us/windows-hardware/drivers/display/gdi-from-the-driver-s-perspective


Ф>Посмотри в каком разделе ты это читаешь:

The Windows 2000 Display Driver Model (XDDM) is the legacy display/graphics driver architecture that was used for Windows 2000 through Windows Vista and Windows 7.


Да, тут ты прав.

Ф>Сейчас картина выглядит иначе:


А вот это для меня не новость. То, что есть user mode драйверы Direct3D и OpenGL — это я знаю. Но мы не о них говорим, а о GDI.

Ф>Если смотреть что из себя представляет Win32k.sys то обнаруживается, что его функции не так просто найти, но таки можно, и там полностью отсутствует что-либо связанное с регионами, полигонами, брашами, карандашами и тем более шрифтами. Это говорит о том, что всё это теперь за пределами ядра.


Ох, что-то не то.

То, что ты дал по ссылке — это результат какой-то grep для какой-то drsyscall. Естественно, там не все.

Ищем в Windows win32k.sys. У меня их FAR нашел 12 штук , в разных подкаталогах C:\Windows\WinSxS. Некоторые из них имеют размер в 300-400 байт, но есть и иного размера.

Честно говоря, не в курсе, какой из них действующий

Но вот, например

Содержимое папки C:\Windows\WinSxS\amd64_microsoft-windows-win32k_31bf3856ad364e35_10.0.19041.2006_none_2dc8ed424fad4d24

<skipped>
14.09.2022 10:12 596 992 win32k.sys
14.09.2022 10:12 3 813 376 win32kfull.sys
14.09.2022 10:12 133 784 win32u.dll


Получить его экспорты совсем не проблема

dumpbin.exe win32k.sys /EXPORTS >l

Вот кусочки оттуда

371 172 000138E0 __win32kstub_NtGdiBRUSHOBJ_DeleteRbrush
372 173 000138F0 __win32kstub_NtGdiBRUSHOBJ_hGetColorTransform
373 174 00013900 __win32kstub_NtGdiBRUSHOBJ_pvAllocRbrush
374 175 00013910 __win32kstub_NtGdiBRUSHOBJ_pvGetRbrush
375 176 00013920 __win32kstub_NtGdiBRUSHOBJ_ulGetBrushColor

413 19C 000125F0 __win32kstub_NtGdiCreatePen
414 19D 000128A0 __win32kstub_NtGdiCreateRectRgn
415 19E 00013A70 __win32kstub_NtGdiCreateRoundRectRgn
673 2A0 00012AC0 __win32kstub_NtGdiExtCreatePen


732 2DB 00012D30 __win32kstub_NtGdiGetFontData
733 2DC 00014C60 __win32kstub_NtGdiGetFontFileData
734 2DD 00014C70 __win32kstub_NtGdiGetFontFileInfo
735 2DE 00014C80 __win32kstub_NtGdiGetFontResourceInfoInternalW
736 2DF 00014C90 __win32kstub_NtGdiGetFontUnicodeRanges

Да, судя по именам, это стабы какие-то


Но там еще есть win32kfull.sys, и у него , например

1289 508 0014F5C0 NtGdiCreateDIBBrush
1290 509 00022FA0 NtGdiCreateDIBSection
1291 50A 00022B40 NtGdiCreateDIBitmapInternal
1292 50B 0029ED10 NtGdiCreateEllipticRgn
1293 50C 00120270 NtGdiCreateHalftonePalette
1294 50D 002B67C0 NtGdiCreateHatchBrushInternal
1295 50E 001573E0 NtGdiCreateMetafileDC
1296 50F 00116A90 NtGdiCreatePaletteInternal
1297 510 00126EC0 NtGdiCreatePatternBrushInternal
1298 511 000A7770 NtGdiCreatePen
1299 512 0007E440 NtGdiCreateRoundRectRgn


1250 4E1 0027C710 NtGdiAddEmbFontToDC
1251 4E2 002AD7A0 NtGdiAddFontMemResourceEx
1252 4E3 00105620 NtGdiAddFontResourceW
1253 4E4 00088790 NtGdiAddInitialFonts
1254 4E5 00289E40 NtGdiAddRemoteFontToDC

1299 512 0007E440 NtGdiCreateRoundRectRgn
1397 574 000EE8F0 NtGdiGetBoundsRect


Правда, есть там еще win32u.dll, и в ней тоже полно аналогичных экспортов. Увы, непонятно, для какого она режима — user mode или kernel mode — импорты ее dumpbin не показывает.

Но вот здесь сказано

win32u.dll is a link for System calls between User mode (Ring 3) and Kernel mode (Ring 0) : Ring 3 => Ring 0

https://learn.microsoft.com/en-us/answers/questions/213495/win32udll-vs-user32dll.html

Так что все же GDI работает в ядре.