Implementieren von AttachProperties

Netzwerkmonitor die AttachProperties-Funktion auf, um die Eigenschaften zu zuordnen, die in einem Teil der erkannten Daten vorhanden sind. Die AttachProperties-Funktion ordnet die Eigenschaften einer bestimmten Position zu.

Netzwerkmonitor verwendet den folgenden Prozess, um die Daten in einem Frame zu analysieren.

  • Zuerst ruft Netzwerkmonitor RecognizeFrame auf, um alle Protokolle zu erkennen, die in einem Frame vorhanden sind.
  • Anschließend ruft Netzwerkmonitor AttachProperties für jeden Parser auf, der ein Datenstück erkennt.

Wenn Netzwerkmonitor die AttachProperties-Funktion für die erkannten Daten aufruft, muss der aufgerufene Parser die Daten analysieren und dann jede vorhandene Eigenschaft einem Speicherort in den erkannten Daten zuordnen. Der Parser bestimmt, welche Eigenschaften vorhanden sind und wo sich die einzelnen Eigenschaften in den Daten befinden. Die folgende Abbildung zeigt vom Parser erkannte Daten.

Vom Parser erkannte Daten

Während der Implementierung von AttachPropertiesmüssen Sie eine der folgenden Funktionen für jede Eigenschaft aufrufen, die in einem Datenrahmen vorhanden ist.

Hinweis

Es wird empfohlen, die Daten so zu verwenden, wie sie in der Erfassung vorhanden sind.

Im folgenden Verfahren werden die erforderlichen Schritte zum Implementieren von AttachProperties beschrieben.

So implementieren Sie AttachProperties

  1. Bestimmen Sie, welche Eigenschaften vorhanden sind, und den Speicherort der Eigenschaft in den Daten.
  2. Rufen Sie AttachPropertyInstanceEx für jede Eigenschaft mit einem Wert auf, den Sie ändern möchten.
  3. Rufen Sie AttachPropertyInstance für jede Eigenschaft mit einem Wert auf, den Sie nicht ändern möchten. In der Regel ist dies die einzige Funktion, die Sie aufrufen müssen.

Im Folgenden finden Sie eine grundlegende Implementierung von AttachProperties. Beachten Sie, dass das Beispiel weder den Code enthält, um zu bestimmen, welche Eigenschaften vorhanden sind, noch den Code zum Suchen der Eigenschaften.

#include <windows.h>

LPBYTE BHAPI MyProtocolAttachProperties( HFRAME   hFrame,
                                         LPBYTE   pMacFrame,
                                         LPBYTE   pBLRPLATEFrame,
                                         DWORD    MacType,
                                         DWORD    BytesLeft,
                                         HPROTOCOL  hPreviousProtocol,
                                         DWORD    nPrevProtocolOffset,
                                         DWORD    InstData)
{
  PBLRPLATEHDR pBLRPLATEHdr = (PBLRPLATEHDR)pBLRPLATEFrame;

  // Attach summary property.
  AttachPropertyInstance( hFrame,
                          BLRPLATEPropertyTable[BLRPLATE_SUMMARY].hProperty,
                          (WORD)BytesLeft,
                          (LPBYTE)pBLRPLATEFrame,
                          0,        // No Help file.
                          0,        // Indent level.
                          0);      // Data flag.

  // Attach signature property.
  AttachPropertyInstance( hFrame,
                          BLRPLATEPropertyTable[BLRPLATE_SIGNATURE].hProperty,
                          sizeof(DWORD),
                          &(pBLRPLATEHdr->Signature),
                          0,        // No Help file.
                          1,        // Indent level.
                          0);        // Data flag.


  // Attach opcode.
  AttachPropertyInstance( hFrame,
                          BLRPLATEPropertyTable[BLRPLATE_OPCODE].hProperty,
                          sizeof(WORD),
                          &(pBLRPLATEHdr->Opcode),
                          0,        // No Help file.
                          1,        // Indent level.
                          0);        // Data flag.

  // Attach flags summary.
  AttachPropertyInstance( hFrame,
                          BLRPLATEPropertyTable[BLRPLATE_FLAGS_SUMMARY].hProperty,
                          sizeof(BYTE),
                          &(pBLRPLATEHdr->Flags),
                          0,        // No Help file.
                          1,        // Indent level.
                          0);       // Data flag.

// Attach flags decode.
  AttachPropertyInstance( hFrame,
                          BLRPLATEPropertyTable[BLRPLATE_FLAGS_FLAGS].hProperty,
                          sizeof(BYTE),
                          &(pBLRPLATEHdr->Flags),
                          0,        // No Help file.
                          2,        // Indent level.
                          0);       // Data flag.

  RETURN null;

}