Недавно я пытался использовать W32pServiceTable в своем драйвере. Я импортировал wink32.lib в ИСТОЧНИКОВ:DDK/WDM импорт 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. Но я уверен, что другие драйверы также могут ссылаться на эту библиотеку (но я не знаю, как это сделать). Я был бы очень благодарен, если бы вы могли помочь.
Большое спасибо, это очень полезно. Не могли бы вы рассказать мне больше об этом трюке, я имею в виду подсказку, чтобы я мог искать по этой теме (извините за мой английский). Кто-то сказал мне, что я не могу использовать win32 в Kernel. Я слышал, что есть лучшие способы сделать это (задокументировано), но использование win32k более захватывающее. – Vasilij
Меня зовут Владислав, поэтому мой английский как ваш :) – valdo
Трюк состоит в том, чтобы написать два драйвера: один драйвер GDI и один драйвер WDM. При инициализации драйвера GDI вы можете использовать «EngLoadImage» и «EngFindImageProcAddress», чтобы получить указатель на функцию драйвера WDM, чтобы они могли общаться. – valdo