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 取得的資訊而定。
值 | Description |
---|---|
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 的大小,以字元為單位。 在輸出中,如果緩衝區太小,則會收到所需的緩衝區大小。
傳回值
傳回碼 | 描述 |
---|---|
|
取得名稱清單時: 緩衝區 包含要求的名稱清單。
詢問是否應該列印名稱時: 應該隱藏名稱的列印。 也就是說,不應該列印名稱。 取得單行表示法時: 緩衝區 包含要求的單行表示法。 |
|
取得名稱清單時: BufferSize 在輸入上太小。 在輸出上, BufferSize 包含所需的緩衝區大小。
詢問是否應該列印名稱時: 不應該隱藏名稱的列印。 也就是說,應該列印名稱。 取得單行表示法時: BufferSize 在輸入上太小。 在輸出上, BufferSize 包含所需的緩衝區大小。 |
所有其他傳回值都表示函式失敗。 引擎會繼續忽略 Buffer 的內容。
備註
此函式是選擇性的。 延伸模組 DLL 只有在能夠格式化特殊結構以在單一行上列印時,才需要匯出 KnownStructOutput 。 引擎會依名稱在擴充 DLL 中尋找此函式。
初始化擴充 DLL 之後,引擎會呼叫此函式來查詢 DLL 以瞭解其如何列印的結構名稱清單。 然後,每當引擎列印其中一個名稱在清單中的結構摘要時,它會呼叫此函式來格式化結構以進行列印。
KnownStructOutput 在 Dbgeng.h 頭文件中稱為 PDEBUG_EXTENSION_KNOWN_STRUCT 。
規格需求
需求 | 值 |
---|---|
目標平台 | 桌面 |
標頭 | dbgeng.h |