我需要在Windows中的32位WOW进程中检索64位进程的所有模块,如所述,EnumProcessModules将失败:
如果该函数是从运行在WOW64上的32位应用程序调用的,它只能枚举32位进程的模块。如果进程是64位进程,则此函数将失败,最后一个错误代码是ERROR_PARTIAL_COPY (299)。
如EnumProcessModulesEx和CreateToolhelp32Snapshot。
你对如何实现这个目标有什么想法吗?
谢谢。
发布于 2010-09-27 06:27:25
如果不使用无文档的API,就无法做到这一点。通常,由于地址空间的差异,从32位进程读取64位进程的内存将无法工作。
EnumProcessModulesEx
有LIST_MODULES_32BIT
和LIST_MODULES_64BIT
过滤器标志,它可以这样说:
此功能主要用于64位应用程序.如果在WOW64下运行的32位应用程序调用该函数,则忽略dwFilterFlag选项,该函数提供与EnumProcessModules函数相同的结果。
您可以通过将您的程序转换为64位,使用separate 64位COM服务器(特别是使用DLL代理,或者有一个单独的与您通信的进程)来做到这一点。或者,根据进程相对于目标进程的启动时间,您可以使用WMI获取模块加载事件。查看Win32_ModuleLoadTrace
事件。
过程资源管理器,一个32位的exe,可以向您展示32位和64位进程的模块,但是它确实是一个烟雾和镜像:32位的exe包含64位版本的自身,它被写到磁盘上并在64位机器上执行。
https://stackoverflow.com/questions/3801517
复制相似问题