GDI对象存储
C++对象通常存储在栈、堆或者由应用程序通过定制的新操作符分配的任何地址空间里。基本上,它总是存放在用户模式的地址空间里,除非我们正在讨论内核模式设备驱动程序。
Windows NT/2000的图形系统可分为三个部分:用户模式客户端的GDI32.DLL;内核模式的图形引擎WIN32K.SYS;各种内核模式中的设备驱动程序。
在Windows NT/2000下,GDI对象通常有两个存储部分,即用户模式对象和内核模式对象。用户模式对象提供快速访问,内核模式对象提供信息独立处理的存储。
GDI句柄表一般存储在内核模式的地址空间里以使图形引擎能够很容易地访问它。通过一定的技巧,将为每个使用GDI的进程在用户模式存储空间里建立表的只读视图。
GDI句柄表的每一个入口都是一个16字节的结构,
typedef struct
{
void * pKernel;
unsigned short nProcess;
unsigned short nCount;
unsigned short nUpper;
unsigned short nType;
void * pUser;
}GdiTableCell;
GDI对象有一个指向它的内核模式对象的指针、一个指向其用户模式对象的指针、一个进程ID、一个种类的计数、一个类型标识符;
存在着GDI对