DDK / WDM импортирует wink32.lib в водитель
-
30-09-2019 - |
Вопрос
Недавно я пытался использовать 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? Какие функциональные возможности вам нужны?