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 或更高版本

另请参阅

DbgHelp 函数

IMAGEHLP_MODULE64

SymInitialize

SymLoadModule64