DDK / WDM импортирует wink32.lib в драйвер - PullRequest
1 голос
/ 15 октября 2010

Недавно я пытался использовать 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. Но я уверен, что другие драйверы также могут ссылаться на эту библиотеку (но я не знаю как) Я был бы очень признателен, если бы Вы могли помочь.

1 Ответ

1 голос
/ 15 октября 2010

Это правда. Только драйверы GDI могут использовать win32k.sys, и наоборот - драйверы GDI могут быть статически связаны только с win32k.sys.

Причина этого заключается в том, что большинство внутренних компонентов Windows загружаются в глобальное пространство памяти, тогда как win32k.sys загружается в так называемое «пространство сеанса». Некоторая информация здесь:

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

Проще говоря - большинство компонентов Windows и драйверов загружаются один раз для всей системы, тогда как такие вещи, как управление пользовательским интерфейсом, GDI и т. Д., Загружаются за сеанс.

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

В любом случае, зачем вам ссылаться на win32k? Какой функционал вам нужен?

...