WDI TLV 傾印器
剖析器產生器連結庫具有將 TLV 位元組數位譯碼為追蹤語句的例程。
typedef _Function_class_( TlvDumperCallback ) void( __stdcall *TlvDumperCallback )(_In_ UINT_PTR Context, _In_z_ _Printf_format_string_ PCSTR Format, ...);
void __stdcall TraceUnknownTlvByteStream(
_In_ ULONG PeerVersion,
_In_ ULONG BufferLength,
_In_reads_bytes_( BufferLength ) UINT8 const * pBuffer );
void __stdcall TraceMessageTlvByteStream(
_In_ ULONG MessageId,
_In_ BOOLEAN fToIhv,
_In_ ULONG PeerVersion,
_In_ ULONG BufferLength,
_In_reads_bytes_( BufferLength ) UINT8 const * pBuffer );
void __stdcall DumpUnknownTlvByteStream(
_In_ ULONG PeerVersion,
_In_ ULONG BufferLength,
_In_reads_bytes_( BufferLength ) UINT8 const * pBuffer,
_In_opt_ ULONG_PTR Context,
_In_opt_ TlvDumperCallback pCallback );
void __stdcall DumpMessageTlvByteStream(
_In_ ULONG MessageId,
_In_ BOOLEAN fToIhv,
_In_ ULONG PeerVersion,
_In_ ULONG BufferLength,
_In_reads_bytes_( BufferLength ) UINT8 const * pBuffer,
_In_opt_ ULONG_PTR Context,
_In_opt_ TlvDumperCallback pCallback );
如果您只需要 WPP 追蹤,請使用追蹤 API,因為它們已優化,以對程式代碼大小以及記錄檔大小產生最小影響(ETL 檔案中的字串較少)。 如果您需要更一般用途的傾印工具,請使用傾印 API,因為它們包含 WPP 追蹤,也包含回呼例程。 存根驅動程式有一個使用這個回呼例程的範例,可透過DebugPrint API將輸出重新導向至核心調試程式。
與剖析和產生 API 不同,傾印工具非常寬鬆。 無論給定訊息或 TLV 的正式形式為何,它都會嘗試盡可能瞭解 TLV 位元組。 這表示傾印器可能會正確譯碼並傾印剖析器拒絕的內容。
警告 如果傾印器成功將位元組譯碼為人類可讀取的格式,則不表示位元組是格式正確的TLV。
如同剖析 API,pBuffer 指標和 BufferLength 參數應該排除任何標頭,並直接指向第一個 TLV。
API 的 Message variants 包括訊息識別碼和訊息方向,以更清楚地釐清 TLV。 這很有幫助,因為視內容而定,相同的 TLV 標識符可以用不同的方式譯碼。 例如,當部分OID_WDI_TASK_SCAN時,WDI_TLV_BSSID可以直接包含WDI_MAC_ADDRESS,也可以包含WDI_TLV_P2P_ATTRIBUTES部分時WDI_MAC_ADDRESS的清單。