2

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

4

1 回答 1

2

这是真实的。只有 GDI 驱动程序可以使用 win32k.sys,反之亦然 - GDI 驱动程序只能静态链接到 win32k.sys。

原因是大部分 Windows 内部都加载到全局内存空间中,而 win32k.sys 加载到所谓的“会话空间”中。一些信息在这里:

http://www.tar.hu/wininternals/ch07lev1sec4.html

简而言之——大多数 Windows 组件和驱动程序为整个系统加载一次,而 UI 管理、GDI 等内容——每个会话加载一次。

GDI 驱动程序在运行时有一个棘手的可能性来获取指向 ntoskrnl 函数的指针并使用它们,反之亦然 - WDM 驱动程序可能会使用 win32k 函数(这将适用于“当前”会话)。

无论如何,你为什么要链接到win32k?你需要什么功能?

于 2010-10-15T09:53:56.807 回答