質問

最近、私はドライバーで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にリンクしたいのですか?どのような機能が必要ですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top