WDI TLV Dumpers
Die Parser-Generatorbibliothek verfügt über Routinen zum Decodieren von TLV-Bytearrays in Überwachungsanweisungen.
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 );
Wenn Sie nur die WPP-Überwachung benötigen, verwenden Sie die Überwachungs-APIs, da diese optimiert sind, um die Codegröße sowie die Protokollgröße möglichst wenig zu beeinträchtigen (weniger Zeichenfolgen in der ETL-Datei). Wenn Sie einen allgemeineren Dumper benötigen, verwenden Sie die Dump-APIs, da sie die WPP-Überwachung enthalten und auch eine Rückrufroutine enthalten. Der Stubtreiber weist ein Beispiel für die Verwendung dieser Rückrufroutine auf, um die Ausgabe über DebugPrint-APIs an den Kerneldebugger umzuleiten.
Im Gegensatz zu den Parse- und Generate-APIs ist der Dumper sehr eingeschränkt. Es versucht, die TLV-Bytes optimal zu nutzen, unabhängig von der kanonischen Form für eine bestimmte Nachricht oder TLV. Dies bedeutet, dass der Dumper etwas, das vom Parser abgelehnt wird, möglicherweise richtig decodiert und abbilden kann.
Warnung: Wenn der Dumper die Bytes erfolgreich in ein lesbares Format decodiert, bedeutet dies nicht, dass die Bytes ein wohlgeformtes TLV sind.
Wie bei den Parse-APIs sollten die pBuffer-Zeiger - und BufferLength-Parameter alle Header und Punkte direkt beim ersten TLV ausschließen.
Die Nachrichtenvarianten der APIs enthalten die Nachrichten-ID und die Nachrichtenrichtung, um das TLV besser zu disambiguieren. Dies ist hilfreich, da die gleiche TLV-ID je nach Kontext auf unterschiedliche Weise decodiert werden kann. Beispielsweise kann WDI_TLV_BSSID direkt eine WDI_MAC_ADDRESS enthalten, wenn es Teil von OID_WDI_TASK_SCAN ist, oder es kann eine Liste von WDI_MAC_ADDRESS enthalten, wenn es Teil von WDI_TLV_P2P_ATTRIBUTES ist.