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


Сведения о модуле

Модуль представляет собой исполняемый файл или библиотеку 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, эти функции могут завершиться ошибкой или вернуть неверные сведения.