PDEBUG_EXTENSION_KNOWN_STRUCT回调函数 (dbgeng.h)
引擎调用 KnownStructOutput 回调函数来请求有关扩展 DLL 可以格式化用于打印的结构的信息。 引擎出于以下原因调用此函数。
- 获取 DLL 可以为打印设置格式的结构的列表。
- 获取特定结构的单行表示形式。
- 询问特定结构的名称是否应与其单行表示形式一起打印。
语法
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 的值。
询问是否应打印名称时: 闲置。
获取单行表示形式时: 以字符串形式接收由 StructName 和 Address 标识的 结构的表示形式。 写入此缓冲区的字符数不得超过 BufferSize 的值。
[in, out] BufferChars
获取名称列表时: 输入时,指定 Buffer 的大小(以字符为单位)。 在输出中,如果缓冲区太小,则 接收所需的缓冲区大小。
询问是否应打印名称时: 闲置。
获取单行表示形式时: 输入时,指定 Buffer 的大小(以字符为单位)。 在输出中,如果缓冲区太小,则 接收所需的缓冲区大小。
返回值
返回代码 | 说明 |
---|---|
|
获取名称列表时: 缓冲区 包含请求的名称列表。
询问是否应打印名称时: 应禁止打印名称。 也就是说,不应打印名称。 获取单行表示形式时: Buffer 包含请求的单行表示形式。 |
|
获取名称列表时: BufferSize 在输入时太小。 输出时, BufferSize 包含所需的缓冲区大小。
询问是否应打印名称时: 不应禁止打印名称。 也就是说,应打印名称。 获取单行表示形式时: BufferSize 在输入上太小。 输出时, BufferSize 包含所需的缓冲区大小。 |
所有其他返回值指示函数失败。 引擎将继续忽略 Buffer 的内容。
注解
此函数是可选的。 扩展 DLL 只需导出 KnownStructOutput (如果扩展 DLL 能够设置特殊结构的格式,以便在单行上打印)。 引擎在扩展 DLL 中按名称查找此函数。
初始化扩展 DLL 后,引擎会调用此函数来查询 DLL 中它知道如何打印的结构名称列表。 然后,每当引擎打印名称在列表中的结构之一的摘要时,它会调用此函数来设置结构的格式以供打印。
KnownStructOutput 在 Dbgeng.h 头文件中 PDEBUG_EXTENSION_KNOWN_STRUCT 调用。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | dbgeng.h |