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 系统版本的代码必须使用适用于该 Windows 版本的相应 SDK 或以前版本的 SDK 进行编译。
建议的模型是将所需版本的 DbgHelp.dll 与调用软件一起重新分发。 这允许调用方使用最可靠的 DbgHelp.dll 版本以及简化的升级。 始终可以在 Windows 调试工具 包中找到最新版本的 DbgHelp.dll。 一般情况下,编译为使用较旧版本的代码将始终适用于较新版本。
所有 DbgHelp 函数(例如此函数)都是单线程的。 因此,从多个线程调用此函数可能会导致意外行为或内存损坏。 若要避免这种情况,必须将多个线程中的所有并发调用同步到此函数。
若要调用此函数的 Unicode 版本,请定义 DBGHELP_TRANSLATE_TCHAR。 DbgHelp.h 中的 SymGetModuleInfoW64 定义如下。
BOOL
IMAGEAPI
SymGetModuleInfoW64(
__in HANDLE hProcess,
__in DWORD64 qwAddr,
__out PIMAGEHLP_MODULEW64 ModuleInfo
);
#ifdef DBGHELP_TRANSLATE_TCHAR
#define SymGetModuleInfo64 SymGetModuleInfoW64
#endif
此函数取代 SymGetModuleInfo 函数。 有关详细信息,请参阅 更新的平台支持。 DbgHelp.h 中的 SymGetModuleInfo 定义如下。
#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 |
标头 | dbghelp.h |
Library | Dbghelp.lib |
DLL | Dbghelp.dll |
可再发行组件 | DbgHelp.dll 5.1 或更高版本 |