GetModuleFileNameA返回奇怪的结果

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

有人可以帮我吗?
谢谢:)

请阅读文档。 它说在GetmoduleeFileName的页面上

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

GetmoduleeFileName只适用于你的过程中的模块。 即使这两个进程已经加载模块,它可能在不同的基地址。 你有效地喂养GetmoduleeFileName垃圾。 只是重申,你需要使用GetmoduleeFileNameEx

如果您的流程想要访问另一个流程,则需要有权这样做。 这意味着您的流程需要较高的权利,或者必须是其他流程的所有者。

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