У меня вопрос: чем реально являются указанные в subj. дескрипторы? На адреса участков памяти не похоже. И можно ли напрямую получать (а может даже и устанавливать) значения цвета/атрибутов и т.д. непосредственно из этих дескрипторов, а не через вызов соответствующих функций GDI. Само собой, под user-mode. Вопрос не праздный, а очень даже практический. Всем заранее спасибо!!!
это хендлы. в таблице объектов процесса typedef HANDLE HPEN; из юзермода вряд ли ты чтото сделаешь сам
Great А можно по ним получить параметры самих объектов? Если да, то как? Заодно и задать сами параметры (хотя бы цвет). Я сейчас изучаю работу функции GetObject(). Может из нее что узнаю.
В итоге все уперлось в Код (Text): MOV EAX, 1090 MOV EDX, 7FFE0300 CALL NEAR DWORD PTR DS:[EDX] ; ntdll.KiFastSystemCallRet Получается, что и правда никак. :-(
ну а ты как хотел? Ядро защищает свои объекты от прямого доступа, а графич. подсистема уже стала частью ядра
На сколько я помню, Руссинович писал, что почти всё GDI перенесено в XP в user-mode, - чтоб из-за утечки GDI страдал сам процесс, а HPEN, HBRUSH... это даже уже и не HANDLE, а так - номера для GDI.
Feng Yuan "Windows Graphics Programming" Chapter 3. GDI /DirectDraw Internal Data Structures 3.2 DECODING GDI OBJECT HANDLES Part of HGDIOBJ Is a GDI ObjectType
Great Настолько знаю, kernel32, user32, gdi32 выполняются под user-mode. Думал, что и данные хранятся аналогично и к ним есть доступ. IceStudent Какие именно вопросы там для меня полезны? Я что-то ничего стоящего не нашел. kero О чем-то подобном я догадывался, т.к. часто накладываются маски для выделения разных частей значения (тестировал для HPEN)