GDI对象存储和查看lib文件导出函数
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对象表,可以通过未有文档的函数GdiQueryTable查询到:此函数存在于GDI32中;
上述内容在一些资料中有,在 Windows图形编程 一书中也有提到;涉及到图形编程时可能会有用,记一下;
下面来看一下,Gdi32.lib文件的导出函数中,是否包含GdiQueryTable;查看DLL导出函数可使用一些工具;查看lib文件导出函数可使用VS带的Dumpbin命令行; 把系统目录的Gdi32.lib拷贝一份到当前目录;然后,执行:dumpbin /exports /out:gditest.dmp Gdi32.lib;
生成的文件如下;里面没有 GdiQueryTable 函数;