symEnumSymbols 函数 (dbghelp.h)

枚举进程中的所有符号。

语法

BOOL IMAGEAPI SymEnumSymbols(
  [in]           HANDLE                         hProcess,
  [in]           ULONG64                        BaseOfDll,
  [in, optional] PCSTR                          Mask,
  [in]           PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
  [in, optional] PVOID                          UserContext
);

参数

[in] hProcess

进程的句柄。 此句柄必须以前传递给 SymInitialize 函数。

[in] BaseOfDll

模块的基址。 如果此值为零且 Mask 包含感叹号 (!) ,则函数将跨模块进行查找。 如果此值为零且 Mask 不包含感叹号,则函数将使用 SymSetContext 函数建立的范围。

[in, optional] Mask

一个通配符字符串,指示要枚举的符号的名称。 文本可以选择包含通配符“*”和“?”。

若要指定特定模块或模块集,请以指定模块的通配符字符串开头文本,后跟感叹号。 指定模块时,将忽略 BaseOfDll

含义
Foo
如果 BaseOfDll 不为零,则 SymEnumSymbols 将查找名为“foo”的全局符号。

如果 BaseOfDll 为零,则 SymEnumSymbols 将在最近调用 SymSetContext 函数所建立的范围内查找名为“foo”的本地符号。

Foo?
如果 BaseOfDll 不为零,则 SymEnumSymbols 将查找一个全局符号,该符号以“foo”开头,然后包含一个额外的字符,例如“傻瓜”和“foot”。

如果 BaseOfDll 为零,则 SymEnumSymbols 将查找一个以“foo”开头并随后包含一个额外字符的符号,例如“傻瓜”和“foot”。 搜索将在最近一次调用 SymSetContext 函数所建立的范围内。

foo*!bar
SymEnumSymbols 将在每个以文本“foo”开头的已加载模块中查找名为“bar”的符号。 它可以查找匹配项,例如“foot!bar”、“footlocker!bar”和“fool!bar”。
*!*
SymEnumSymbols 将枚举每个已加载模块中的每个符号。

[in] EnumSymbolsCallback

接收符号信息的 SymEnumSymbolsProc 回调函数。

[in, optional] UserContext

传递给回调函数的用户定义值,或 NULL。 应用程序通常使用此参数来传递指向为回调函数提供上下文的数据结构的指针。

返回值

如果函数成功,则返回值为 TRUE

如果函数失败,则返回值为 FALSE。 若要检索扩展的错误信息,请调用 GetLastError

备注

所有 DbgHelp 函数(例如此函数)都是单线程的。 因此,从多个线程调用此函数可能会导致意外行为或内存损坏。 若要避免这种情况,必须将多个线程中的所有并发调用同步到此函数。

若要调用此函数的 Unicode 版本,请定义 DBGHELP_TRANSLATE_TCHAR

示例

有关示例,请参阅枚举符号

要求

   
目标平台 Windows
标头 dbghelp.h
Library Dbghelp.lib
DLL Dbghelp.dll
可再发行组件 DbgHelp.dll 5.1 或更高版本

另请参阅

DbgHelp 函数

SymEnumSymbolsProc