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