DDK / WDM将wink32.lib导入驱动程序

时间:2010-10-15 09:31:39

标签: windows device-driver wdm

最近我试图在我的驱动程序中使用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。但我很确定其他驱动程序也可以链接到该库(但我不知道如何)。如果你能提供帮助,我将非常感激。

1 个答案:

答案 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?你需要什么功能?