1

如何增加HMODULE返回的引用计数GetModuleHandle?我可以DuplicateHandle,或者我需要通过跳跃,检索模块的路径,然后LoarLibrary在该路径上吗?简而言之,我想在GetModuleHandleEx不使用此功能(即 XP+)的情况下进行模拟。

4

1 回答 1

1

您不能在 HMODULE 上使用 DuplicateHandle()。MSDN 库文章在备注部分列出了 DH 将接受的句柄类型,模块句柄不是其中之一。

一个原因是 HMODULE 实际上根本不是句柄,它是一个伪句柄。这背后有历史,早在 16 位版本的 Windows 中,它们实际上就是句柄。但这在 32 位版本中消失了,它们现在只是模块在内存中加载的地址。将代码地址转换为模块句柄的一个非常标准的技巧是使用 VirtualQuery() 并将返回的 MEMORY_BASIC_INFORMATION.BaseAddress 转换为 (HMODULE)。有时非常方便。

是的,增加引用计数的唯一其他方法是使用 LoadLibrary()。

于 2013-01-13T12:03:25.097 回答