最近,我试图在驾驶员中使用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

简单地说 - 整个系统的大多数Windows组件和驱动程序一次都加载了一次,而UI管理,GDI等等内容是每个会话加载的。

在运行时,GDI驱动程序在运行时可能有一个棘手的可能性,可以获取指针来进行NTOSKRNL功能并使用它们,反之亦然-WDM驱动程序一定的努力可能会使用Win32K功能(这将适用于“当前”会话)。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top