Поделиться через


Функция 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-разрядных приложений. Если функция вызывается 32-разрядным приложением, работающим в WOW64, параметр dwFilterFlag игнорируется и функция предоставляет те же результаты, что и функция EnumProcessModules .

Рекомендуется указать большой массив значений HMODULE , так как трудно предсказать, сколько модулей будет в процессе на момент вызова EnumProcessModulesEx. Чтобы определить, слишком ли мал массив lphModule для хранения всех дескрипторов модуля для процесса, сравните значение, возвращаемое в lpcbNeeded, со значением, указанным в cb. Если значение lpcbNeeded больше cb, увеличьте размер массива и снова вызовите EnumProcessModulesEx .

Чтобы определить, сколько модулей было перечислено вызовом EnumProcessModulesEx, разделите результирующее значение в параметре lpcbNeeded на sizeof(HMODULE).

Функция EnumProcessModulesEx не извлекает дескрипторы для модулей, загруженных с флагом LOAD_LIBRARY_AS_DATAFILE . Дополнительные сведения см. в разделе LoadLibraryEx.

Не вызывайте CloseHandle ни для одного из дескрипторов, возвращаемых этой функцией. Информация поступает из snapshot, поэтому ресурсы для освобождения отсутствуют.

Чтобы получить snapshot указанных процессов, а также кучи, модули и потоки, используемые этими процессами, используйте функцию CreateToolhelp32Snapshot.

Начиная с Windows 7 и Windows Server 2008 R2, Psapi.h устанавливает номера версий для функций PSAPI. Номер версии PSAPI влияет на имя, используемое для вызова функции, и библиотеку, которую должна загрузить программа.

Если PSAPI_VERSION имеет значение 2 или больше, эта функция определяется как K32EnumProcessModulesEx в Psapi.h и экспортируется в Kernel32.lib и Kernel32.dll. Если PSAPI_VERSION равно 1, эта функция определяется как EnumProcessModulesEx в Psapi.h и экспортируется в Psapi.lib и Psapi.dll в качестве оболочки, которая вызывает K32EnumProcessModulesEx.

Программы, которые должны выполняться в более ранних версиях Windows, а также Windows 7 и более поздних версий, всегда должны вызывать эту функцию как EnumProcessModulesEx. Чтобы обеспечить правильное разрешение символов, добавьте Psapi.lib в макрос TARGETLIBS и скомпилируйте программу с параметром –DPSAPI_VERSION=1. Чтобы использовать динамическое связывание во время выполнения, загрузите Psapi.dll.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header psapi.h (включая Windows.h)
Библиотека Kernel32.lib в Windows 7 и Windows Server 2008 R2; Psapi.lib (если PSAPI_VERSION=1) в Windows 7 и Windows Server 2008 R2; Psapi.lib в Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP
DLL Kernel32.dll в Windows 7 и Windows Server 2008 R2; Psapi.dll (если PSAPI_VERSION=1) в Windows 7 и Windows Server 2008 R2; Psapi.dll в Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP

См. также раздел

CreateToolhelp32Snapshot

EnumProcesses

Информация модуля

Функции PSAPI