enumProcessModulesEx 函数 (psapi.h)

检索指定进程中满足指定筛选条件的每个模块的句柄。

语法

BOOL EnumProcessModulesEx(
  [in]  HANDLE  hProcess,
  [out] HMODULE *lphModule,
  [in]  DWORD   cb,
  [out] LPDWORD lpcbNeeded,
  [in]  DWORD   dwFilterFlag
);

参数

[in] hProcess

进程的句柄。

[out] lphModule

接收模块句柄列表的数组。

[in] cb

lphModule 数组的大小(以字节为单位)。

[out] lpcbNeeded

lphModule 数组中存储所有模块句柄所需的字节数。

[in] dwFilterFlag

筛选条件。 此参数的取值可为下列值之一:

含义
LIST_MODULES_32BIT
0x01
列出 32 位模块。
LIST_MODULES_64BIT
0x02
列出 64 位模块。
LIST_MODULES_ALL
0x03
列出所有模块。
LIST_MODULES_DEFAULT
0x0
使用默认行为。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

EnumProcessModulesEx 函数主要用于调试器和必须从另一个进程提取模块信息的类似应用程序。 如果目标进程中的模块列表已损坏或尚未初始化,或者模块列表在函数调用期间由于加载或卸载 DLL 而更改, 则 EnumProcessModulesEx 可能会失败或返回不正确的信息。

此函数主要用于 64 位应用程序。 如果函数由 WOW64 下运行的 32 位应用程序调用,则 忽略 dwFilterFlag 选项,并且该函数提供与 EnumProcessModules 函数相同的结果。

最好指定大型 HMODULE 值数组,因为调用 EnumProcessModulesEx 时很难预测进程中有多少个模块。 若要确定 lphModule 数组是否太小,无法容纳进程的所有模块句柄,请将 lcbNeeded 中返回的值与 cb 中指定的值进行比较。 如果 lcbNeeded 大于 cb,请增大数组的大小,然后再次调用 EnumProcessModulesEx

若要确定通过调用 EnumProcessModulesEx 枚举了多少个模块,请将 lafterNeeded 参数中的结果值除以 sizeof(HMODULE)

EnumProcessModulesEx 函数不会检索使用 LOAD_LIBRARY_AS_DATAFILE 标志加载的模块的句柄。 有关详细信息,请参阅 LoadLibraryEx

不要对此函数返回的任何句柄调用 CloseHandle 。 信息来自快照,因此没有要释放的资源。

若要获取指定进程以及这些进程使用的堆、模块和线程快照,请使用 CreateToolhelp32Snapshot 函数。

从 Windows 7 和 Windows Server 2008 R2 开始,Psapi.h 为 PSAPI 函数建立版本号。 PSAPI 版本号会影响用于调用程序必须加载的函数和库的名称。

如果 PSAPI_VERSION 为 2 或更大,则此函数在 Psapi.h 中定义为 K32EnumProcessModulesEx ,并在 Kernel32.lib 和 Kernel32.dll 中导出。 如果 PSAPI_VERSION 为 1,则此函数在 Psapi.h 中定义为 EnumProcessModulesEx ,并在 Psapi.lib 中导出,Psapi.dll 为调用 K32EnumProcessModulesEx 的包装器。

必须在早期版本的 Windows 以及 Windows 7 及更高版本上运行的程序应始终以 EnumProcessModulesEx 的形式调用此函数。 为确保符号正确解析,请将 Psapi.lib 添加到 TARGETLIBS 宏,并使用 –DPSAPI_VERSION=1 编译程序。 若要使用运行时动态链接,请加载 Psapi.dll。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 psapi.h (包括 Windows.h)
Library Windows 7 和 Windows Server 2008 R2 上的 Kernel32.lib;如果 Windows 7 和 Windows Server 2008 R2 上的 PSAPI_VERSION=1) ,则 Psapi.lib (;Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP 上的 Psapi.lib
DLL Windows 7 和 Windows Server 2008 R2 上的 Kernel32.dll;如果 Windows 7 和 Windows Server 2008 R2 上的 PSAPI_VERSION=1) ,则为 Psapi.dll (;Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP 上的 Psapi.dll

另请参阅

CreateToolhelp32Snapshot

EnumProcesses

模块信息

PSAPI 函数