Функция 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 или более поздней версии |