GetModuleFileNameA返回奇怪的结果

时间:2011-04-16 06:58:22

标签: c++ windows getmodulefilename

我正在尝试使用GetModuleFileNameA获取在另一个进程中加载​​的模块的名称 我已经使用dbgHelp加载了一个符号并得到了它的模块基地址,但发生了两件奇怪的事情:
1.有时GetModuleFileNameA返回系统错误代码5:访问被拒绝 2.它返回错误的模块名称。对于我知道在模块A中的函数,我得到模块B的名称......:/

有人能帮帮我吗? 感谢:)

2 个答案:

答案 0 :(得分:3)

请阅读文档。在GetModuleFileName页面右侧显示

  

要找到由另一个进程加载的模块的文件,请使用GetModuleFileNameEx函数。

GetModuleFileName仅对流程中的模块有意义。即使两个进程都加载了模块,它也可能位于不同的基址。你有效地提供GetModuleFileName垃圾。重申一下,您需要使用GetModuleFileNameEx

答案 1 :(得分:0)

如果您的流程想要访问其他流程,则需要有权这样做。这意味着您的流程需要提升权限,或者必须是其他流程的所有者。

如果输入错误的名称,可能使用了错误的句柄。这也可能解释了为什么有时会拒绝访问。如果将句柄传递给错误的模块,即使您有权访问要知道名称的模块,也可能无法访问该模块。