识别Windows中进程加载的所有模块

时间:2013-06-05 14:59:10

标签: c winapi

我正在编写一个C ++程序,需要告诉我给定进程加载的所有模块。我开始研究EnumProcessModules,但它警告:“EnumProcessModules函数不检索使用LOAD_LIBRARY_AS_DATAFILE标志加载的模块的句柄。有关更多信息,请参阅LoadLibraryEx。”

不幸的是,LoadLibraryEx没有提供任何关于如何识别以这种方式加载的进程的见解。它只提供将其作为数据文件加载不会阻止任何其他进程更改库。

是否有办法识别动态加载LoadLibraryEx的库?

2 个答案:

答案 0 :(得分:2)

  1. 使用VirtualQueryEx枚举进程的虚拟内存。

  2. 对于每个MEM_MAPPEDMEM_IMAGE范围,使用GetMappedFileName查询映射的文件名(自Windows 7起在kernel32中;对于PSAPI.DLL中可用的旧版本)。

答案 1 :(得分:1)

CreateToolhelp32Snapshot的文档没有提到这个限制(但是有其他问题),所以值得一试。