Функция 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
Критерии фильтра. Этот параметр может принимать одно из указанных ниже значений.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав 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 |