DDK/WDMは、wink32.libをドライバーにインポートします
-
30-09-2019 - |
質問
最近、私はドライバーで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にのみ静的にリンクできます。
その理由は、Wind32K.Sysがいわゆる「セッションスペース」にロードされるのに対し、Windowsの内部のほとんどがグローバルメモリスペースにロードされているためです。いくつかの情報はこちらです:
http://www.tar.hu/wininternals/ch07lev1sec4.html
簡単な言葉では、ほとんどのWindowsコンポーネントとドライバーはシステム全体に1回ロードされますが、UI管理、GDIなどのものはセッションごとにロードされます。
GDIドライバーがntoskrnl関数へのポインターを取得して使用するランタイム中には、厄介な可能性があり、その逆の努力のあるWDMドライバーはWin32K関数を使用する場合があります(「現在」セッションで機能します)。
とにかく、なぜwin32kにリンクしたいのですか?どのような機能が必要ですか?
所属していません StackOverflow