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的值。
詢問是否應該列印名稱時: 未使用。
取得單行表示法時 : 接收結構的表示法,結構名稱 和 Address識別為字元串。 寫入此緩衝區的字元數不得超過 BufferSize的值。
[in, out] BufferChars
取得名稱清單時: 輸入時,指定緩衝區 的大小,以字元為單位。 在輸出中,如果緩衝區太小,則會收到所需的緩衝區大小。
詢問是否應該列印名稱時: 未使用。
取得單行表示法時: 輸入時,會指定緩衝區 的大小。 在輸出中,如果緩衝區太小,則會收到所需的緩衝區大小。
傳回值
傳回碼 | 描述 |
---|---|
|
取得名稱清單時: Buffer 包含要求的名稱清單。
詢問是否應該列印名稱時: 應該隱藏名稱的列印。 也就是說,不應該列印名稱。 取得單行表示法時 : Buffer 包含所要求的單行表示法。 |
|
取得名稱清單時 : BufferSize 輸入太小。 在輸出中, BufferSize 包含所需的緩衝區大小。
詢問是否應該列印名稱時: 不應該隱藏名稱的列印。 也就是說,應該列印名稱。 取得單行表示法時: BufferSize 在輸入上太小。 在輸出中, BufferSize 包含所需的緩衝區大小。 |
所有其他傳回值都表示函式失敗。 引擎會繼續忽略 Buffer的內容。
言論
此函式是選擇性的。 擴充 DLL 只有在能夠格式化特殊結構以列印單行時,才需要匯出 KnownStructOutput。 引擎會依名稱在擴充 DLL 中尋找此函式。
初始化擴充 DLL 之後,引擎會呼叫此函式來查詢 DLL,以取得其知道如何列印的結構名稱清單。 然後,每當引擎列印其中一個名稱在清單中的結構摘要時,它會呼叫此函式來格式化結構以進行列印。
Dbgeng.h 頭文件中 PDEBUG_EXTENSION_KNOWN_STRUCT 呼叫 KnownStructOutput。
要求
要求 | 價值 |
---|---|
目標平臺 | 桌面 |
標頭 | dbgeng.h |