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


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

Модуль — это исполняемый файл или библиотека DLL. Каждый процесс состоит из одного или нескольких модулей. Список дескрипторов модуля для процесса можно получить, вызвав функцию EnumProcessModules . Эта функция заполняет массив значений HMODULE дескрипторами модуля для указанного процесса. Первый модуль — это исполняемый файл. Помните, что эти дескрипторы модулей, скорее всего, относятся к другому процессу, поэтому их нельзя использовать с такими функциями, как GetModuleFileName. Однако функции PSAPI можно использовать для получения сведений о модуле из другого процесса.

В следующей процедуре описывается получение сведений о модуле из другого процесса.

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

  1. Вызовите функцию GetModuleBaseName . Эта функция принимает дескриптор процесса и дескриптор модуля в качестве входных данных и заполняет буфер базовым именем модуля (например, Kernel32.dll). Связанная функция GetModuleFileNameEx принимает те же параметры, что и входные данные, но возвращает полный путь к модулю (например, C:\Windows\System32\Kernel32.dll).
  2. Вызовите функцию GetModuleInformation . Эта функция принимает дескриптор процесса и дескриптор модуля и заполняет структуру MODULEINFO адресом нагрузки модуля, размером занимаемого им линейного адресного пространства и указателем на его точку входа.

Если приложению требуются сведения о модуле для текущего процесса, оно должно использовать функцию GetModuleFileName вместо функций модуля PSAPI. Это помогает повысить производительность приложения двумя способами: функция GetModuleFileName более эффективна, чем функции модуля PSAPI, и приложение может избежать загрузки psapi.dll, если оно не использует функции PSAPI.

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