Вопрос

Недавно я пытался использовать W32PserviCletable в моем водитене. Я сделал импорт 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 загружаются один раз для всей системы, тогда как вещи, такие как менеджмент пользовательского интерфейса, GDI и т. Д. - загружаются на сеанс.

Во время выполнения драйверов GDI есть сложная возможность для выполнения драйверов GDI, чтобы получить указатели на функции ntoSkrnl и использовать их, и наоборот - драйверы WDM с некоторыми усилиями могут использовать функции Win32K (которые будут работать для «текущей» сеанса).

Во всяком случае, почему вы хотите ссылаться на Win32k? Какие функциональные возможности вам нужны?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top