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

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

当询问是否应打印名称时: 未使用。

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

[in, out] BufferChars

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

当询问是否应打印名称时: 未使用。

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

返回值

返回代码 描述
S_OK
获取名称列表时: Buffer 包含请求的名称列表。

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

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

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

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

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

 

所有其他返回值都表示函数失败。 引擎将继续忽略 缓冲区的内容。

言论

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

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

KnownStructOutput 在 Dbgeng.h 头文件中称为 PDEBUG_EXTENSION_KNOWN_STRUCT

要求

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

另请参阅

DebugExtensionInitialize