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+).
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 に答える