最近我试图在我的驱动程序中使用W32pServiceTable。我在SOURCES中导入了wink32.lib:
TARGETNAME=exp
TARGETTYPE=DRIVER
TARGETLIB=$(DDK_LIB_PATH)\win32k.lib
SOURCES=Experimental.cpp
MSC_WARNING_LEVEL=/W3
我在源文件中声明:
extern PDWORD W32pServiceTable;
但我得到的符号尚未解决。我读过,只有GDI驱动程序可以使用wink32.lib。但我很确定其他驱动程序也可以链接到该库(但我不知道如何)。如果你能提供帮助,我将非常感激。
答案 0 :(得分:1)
这是事实。只有GDI驱动程序可以使用win32k.sys,反之亦然--GDI驱动程序只能静态链接到win32k.sys。
原因是大多数Windows内部都加载到全局内存空间,而win32k.sys加载到所谓的“会话空间”。一些信息在这里:
http://www.tar.hu/wininternals/ch07lev1sec4.html
简单来说 - 大多数Windows组件和驱动程序都会为整个系统加载一次,而UI管理,GDI等等则会在每个会话中加载。
在运行时期间GDI驱动程序获取指向ntoskrnl函数的指针并使用它们是非常棘手的,反之亦然 - WDM驱动程序可能会使用win32k函数(这将适用于'当前'会话)。
无论如何,你为什么要链接到win32k?你需要什么功能?