如何增加HMODULE
返回的引用计数GetModuleHandle
?我可以DuplicateHandle
,或者我需要通过跳跃,检索模块的路径,然后LoarLibrary
在该路径上吗?简而言之,我想在GetModuleHandleEx
不使用此功能(即 XP+)的情况下进行模拟。
问问题
670 次
1 回答
1
您不能在 HMODULE 上使用 DuplicateHandle()。MSDN 库文章在备注部分列出了 DH 将接受的句柄类型,模块句柄不是其中之一。
一个原因是 HMODULE 实际上根本不是句柄,它是一个伪句柄。这背后有历史,早在 16 位版本的 Windows 中,它们实际上就是句柄。但这在 32 位版本中消失了,它们现在只是模块在内存中加载的地址。将代码地址转换为模块句柄的一个非常标准的技巧是使用 VirtualQuery() 并将返回的 MEMORY_BASIC_INFORMATION.BaseAddress 转换为 (HMODULE)。有时非常方便。
是的,增加引用计数的唯一其他方法是使用 LoadLibrary()。
于 2013-01-13T12:03:25.097 回答