最近我试图在我的驱动程序中使用W32pServiceTable。 我在源代码中导入了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。 但我很确定其他驱动程序也可以链接到该库(但我不知道如何)。 如果你能帮忙,我将不胜感激。
这是真的。 只有GDI驱动程序可以使用win32k.sys,反之亦然 – GDI驱动程序可以静态链接到win32k.sys。
其原因是大多数Windows内部被加载到全局内存空间,而win32k.sys被加载到所谓的“会话空间”。 一些信息在这里:
http://www.tar.hu/wininternals/ch07lev1sec4.html
简单地说 – 大部分的窗口组件和驱动程序都是在整个系统中加载一次,而像UI管理,GDI等这样的东西则是在每个会话中加载的。
在运行时,GDI驱动程序可能会获得指向ntoskrnl函数的指针并使用它们,反之亦然 – WDM驱动程序可能会使用win32k函数(可用于“当前”会话)。
无论如何,你为什么要链接到win32k? 你需要什么功能?