1

How can I increment refcount of the HMODULE returned by the GetModuleHandle? Can I DuplicateHandle, or I need to go through hops, retrieve module's path and then LoarLibrary on that path? In short, I want to emulate GetModuleHandleEx without using this function (which is XP+).

4

1 に答える 1

1

HMODULE で DuplicateHandle() を使用することはできません。MSDN ライブラリの記事には、DH が受け入れるハンドルの種類が [備考] セクションに一覧表示されていますが、モジュール ハンドルはそれらの 1 つではありません。

この理由の 1 つは、HMODULE が実際にはまったくハンドルではなく、疑似ハンドルであることです。これには歴史があり、Windows の 16 ビット バージョンでは実際にはハンドルでした。しかし、それは 32 ビット バージョンではなくなり、メモリにロードされるモジュールのアドレスになりました。コード アドレスをモジュール ハンドルに変換する非常に標準的な方法の 1 つは、VirtualQuery() を使用して、返された MEMORY_BASIC_INFORMATION.BaseAddress を (HMODULE) にキャストすることです。時々とても便利です。

はい、参照カウントをインクリメントする他の唯一の方法は、LoadLibrary() を使用することです。

于 2013-01-13T12:03:25.097 に答える