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


Функция EnumProcessModules (psapi.h)

Извлекает дескриптор для каждого модуля в указанном процессе.

Чтобы определить, перечисляет ли 64-разрядное приложение 32-разрядные, 64-разрядные модули или модули обоих типов, используйте функцию EnumProcessModulesEx .

Синтаксис

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

Параметры

[in] hProcess

Дескриптор процесса.

[out] lphModule

Массив, получающий список дескрипторов модуля.

[in] cb

Размер массива lphModule в байтах.

[out] lpcbNeeded

Количество байтов, необходимых для хранения всех дескрипторов модуля в массиве lphModule .

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Функция EnumProcessModules в основном предназначена для использования отладчиками и аналогичными приложениями, которые должны извлекать сведения о модуле из другого процесса. Если список модулей в целевом процессе поврежден или еще не инициализирован или если список модулей изменяется во время вызова функции в результате загрузки или выгрузки библиотек DLL, EnumProcessModules может завершиться ошибкой или вернуть неверные сведения.

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

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

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

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

Если эта функция вызывается из 32-разрядного приложения, работающего в WOW64, она может перечислить только модули 32-разрядного процесса. Если процесс является 64-разрядным, эта функция завершается сбоем и последний код ошибки ERROR_PARTIAL_COPY (299).

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

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

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

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

Примеры

Пример см. в разделах Перечисление всех процессов или Перечисление всех модулей для процесса.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header psapi.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

EnumProcessModulesEx

EnumProcesses

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

Функции PSAPI