我正在尝试使用GetModuleFileNameA
获取在另一个进程中加载的模块的名称
我已经使用dbgHelp加载了一个符号并得到了它的模块基地址,但发生了两件奇怪的事情:
1.有时GetModuleFileNameA
返回系统错误代码5:访问被拒绝
2.它返回错误的模块名称。对于我知道在模块A中的函数,我得到模块B的名称......:/
有人能帮帮我吗? 感谢:)
答案 0 :(得分:3)
请阅读文档。在GetModuleFileName页面右侧显示
要找到由另一个进程加载的模块的文件,请使用GetModuleFileNameEx函数。
GetModuleFileName仅对流程中的模块有意义。即使两个进程都加载了模块,它也可能位于不同的基址。你有效地提供GetModuleFileName垃圾。重申一下,您需要使用GetModuleFileNameEx
答案 1 :(得分:0)
如果您的流程想要访问其他流程,则需要有权这样做。这意味着您的流程需要提升权限,或者必须是其他流程的所有者。
如果输入错误的名称,可能使用了错误的句柄。这也可能解释了为什么有时会拒绝访问。如果将句柄传递给错误的模块,即使您有权访问要知道名称的模块,也可能无法访问该模块。