PDEBUG_EXTENSION_KNOWN_STRUCT回调函数 (dbgeng.h)

引擎调用 KnownStructOutput 回调函数来请求有关扩展 DLL 可以格式化用于打印的结构的信息。 引擎出于以下原因调用此函数。

  • 获取 DLL 可以为打印设置格式的结构的列表。
  • 获取特定结构的单行表示形式。
  • 询问特定结构的名称是否应与其单行表示形式一起打印。
'''cpp CALLBACK* PDEBUG_EXTENSION_KNOWN_STRUCT KnownStructOutput;'''

语法

PDEBUG_EXTENSION_KNOWN_STRUCT PdebugExtensionKnownStruct;

HRESULT PdebugExtensionKnownStruct(
  [in]      ULONG Flags,
  [in]      ULONG64 Offset,
  [in]      PSTR TypeName,
  [out]     PSTR Buffer,
  [in, out] PULONG BufferChars
)
{...}

参数

[in] Flags

以下值之一,具体取决于引擎想要从扩展 DLL 获取的信息。

说明
DEBUG_KNOWN_STRUCT_GET_NAMES 获取结构名称的列表。
DEBUG_KNOWN_STRUCT_SUPPRESS_TYPE_NAME 询问结构是否应打印其名称。
DEBUG_KNOWN_STRUCT_GET_SINGLE_LINE_OUTPUT 获取 结构的单行表示形式。

[in] Offset

获取名称列表时: 闲置。

询问是否应打印名称时: 闲置。

获取单行表示形式时: 指定要打印的结构的目标内存地址空间中的位置。

[in] TypeName

获取名称列表时: 闲置。

询问是否应打印名称时: 指定结构的名称。 这是从DEBUG_KNOWN_STRUCT_GET_NAMES查询返回的名称之一。

获取单行表示形式时: 指定结构的名称。 这是从DEBUG_KNOWN_STRUCT_GET_NAMES查询返回的名称之一。

[out] Buffer

获取名称列表时: 接收扩展可以设置打印格式的结构的名称的列表。 每对名称之间必须显示一个空字符。 列表必须以两个空字符结尾。 写入此缓冲区的字符数不得超过 BufferSize 的值。

询问是否应打印名称时: 闲置。

获取单行表示形式时: 以字符串形式接收由 StructNameAddress 标识的 结构的表示形式。 写入此缓冲区的字符数不得超过 BufferSize 的值。

[in, out] BufferChars

获取名称列表时: 输入时,指定 Buffer 的大小(以字符为单位)。 在输出中,如果缓冲区太小,则 接收所需的缓冲区大小。

询问是否应打印名称时: 闲置。

获取单行表示形式时: 输入时,指定 Buffer 的大小(以字符为单位)。 在输出中,如果缓冲区太小,则 接收所需的缓冲区大小。

返回值

返回代码 说明
S_OK
获取名称列表时: 缓冲区 包含请求的名称列表。

询问是否应打印名称时: 应禁止打印名称。 也就是说,不应打印名称。

获取单行表示形式时: Buffer 包含请求的单行表示形式。

S_FALSE
获取名称列表时: BufferSize 在输入时太小。 输出时, BufferSize 包含所需的缓冲区大小。

询问是否应打印名称时: 不应禁止打印名称。 也就是说,应打印名称。

获取单行表示形式时: BufferSize 在输入上太小。 输出时, BufferSize 包含所需的缓冲区大小。

 

所有其他返回值指示函数失败。 引擎将继续忽略 Buffer 的内容。

注解

此函数是可选的。 扩展 DLL 只需导出 KnownStructOutput (如果扩展 DLL 能够设置特殊结构的格式,以便在单行上打印)。 引擎在扩展 DLL 中按名称查找此函数。

初始化扩展 DLL 后,引擎会调用此函数来查询 DLL 中它知道如何打印的结构名称列表。 然后,每当引擎打印名称在列表中的结构之一的摘要时,它会调用此函数来设置结构的格式以供打印。

KnownStructOutput 在 Dbgeng.h 头文件中 PDEBUG_EXTENSION_KNOWN_STRUCT 调用。

要求

要求
目标平台 桌面
标头 dbgeng.h

另请参阅

DebugExtensionInitialize