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


Функция SymGetModuleInfo (dbghelp.h)

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

Синтаксис

BOOL IMAGEAPI SymGetModuleInfo(
  [in]  HANDLE           hProcess,
  [in]  DWORD            dwAddr,
  [out] PIMAGEHLP_MODULE ModuleInfo
);

Параметры

[in] hProcess

Дескриптор процесса, который изначально был передан в функцию SymInitialize .

[in] dwAddr

Виртуальный адрес, содержащийся в одном из модулей, загруженных функцией SymLoadModule64 .

[out] ModuleInfo

Указатель на структуру IMAGEHLP_MODULE64 . Для элемента SizeOfStruct необходимо задать размер структуры IMAGEHLP_MODULE64 . Недопустимое значение приведет к ошибке.

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

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

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

Комментарии

В таблице модулей выполняется поиск модуля, содержащего dwAddr. Модуль находится в зависимости от адреса нагрузки и размера каждого модуля. Если найден допустимый модуль, параметр ModuleInfo заполняется сведениями о модуле.

Размер структуры IMAGEHLP_MODULE64 , используемой этой функцией, с годами менялся. Если вызывается версия DbgHelp.dll, которая старше dbgHelp.h, используемой для компиляции вызывающего кода, эта функция может завершиться ошибкой с кодом ERROR_INVALID_PARAMETER. Чаще всего это происходит при вызове версии системы (%WinDir%\System32\DbgHelp.dll). Код, вызывающий системную версию DbgHelp.dll, должен быть скомпилирован с помощью соответствующего пакета SDK для этого выпуска Windows или пакета SDK для предыдущего выпуска.

Рекомендуемая модель — распространить требуемую версию DbgHelp.dll вместе с вызывающим программным обеспечением. Это позволяет вызывающей объекту использовать наиболее надежные версии DbgHelp.dll а также упростить обновления. Последнюю версию DbgHelp.dll всегда можно найти в пакете Средства отладки для Windows . Как правило, код, скомпилированный для работы с более старыми версиями, всегда будет работать с более новыми версиями.

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

Чтобы вызвать версию этой функции в Юникоде, определите DBGHELP_TRANSLATE_TCHAR. SymGetModuleInfoW64 определяется следующим образом в DbgHelp.h.


BOOL
IMAGEAPI
SymGetModuleInfoW64(
    __in HANDLE hProcess,
    __in DWORD64 qwAddr,
    __out PIMAGEHLP_MODULEW64 ModuleInfo
    );

#ifdef DBGHELP_TRANSLATE_TCHAR
#define SymGetModuleInfo64   SymGetModuleInfoW64
#endif

Эта функция заменяет функцию SymGetModuleInfo . Дополнительные сведения см. в разделе Обновленная поддержка платформы. SymGetModuleInfo определяется следующим образом в DbgHelp.h.

#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define SymGetModuleInfo   SymGetModuleInfo64
#define SymGetModuleInfoW  SymGetModuleInfoW64
#else
BOOL
IMAGEAPI
SymGetModuleInfo(
    __in HANDLE hProcess,
    __in DWORD dwAddr,
    __out PIMAGEHLP_MODULE ModuleInfo
    );

BOOL
IMAGEAPI
SymGetModuleInfoW(
    __in HANDLE hProcess,
    __in DWORD dwAddr,
    __out PIMAGEHLP_MODULEW ModuleInfo
    );
#endif

Требования

   
Целевая платформа Windows
Header dbghelp.h
Библиотека Dbghelp.lib
DLL Dbghelp.dll
Распространяемые компоненты DbgHelp.dll 5.1 или более поздней версии

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

Функции DbgHelp

IMAGEHLP_MODULE64

SymInitialize

SymLoadModule64