Implementera AttachProperties

Network Monitor anropar funktionen AttachProperties för att mappa de egenskaper som finns i en del av identifierade data. Funktionen AttachProperties mappar egenskaperna till en specifik plats.

Network Monitor använder följande process för att parsa data i en ram.

  • Först anropar Network Monitor RecognizeFrame för att identifiera alla protokoll som finns i en ram.
  • Sedan anropar Network Monitor AttachProperties för varje parser som känner igen en databit.

När Nätverksövervakaren anropar funktionen AttachProperties för de identifierade data måste parsern som anropas parsa data och sedan mappa varje befintlig egenskap till en plats i de identifierade data. Parsern avgör vilka egenskaper som finns och var varje egenskap finns i data. Följande bild visar parser-identifierade data.

tolkade data

Under implementeringen av AttachPropertiesmåste du anropa någon av följande funktioner för varje egenskap som finns i en dataram.

Notera

Vi rekommenderar att du använder data som de finns i avbildningen.

 

Följande procedur identifierar de steg som krävs för att implementera AttachProperties.

Implementera AttachProperties-

  1. Ta reda på vilka egenskaper som finns och egenskapsplatsen i data.
  2. Anropa AttachPropertyInstanceEx för varje egenskap med ett värde som du vill ändra.
  3. Anropa AttachPropertyInstance för varje egenskap där du inte vill ändra värdet. Detta är vanligtvis den enda funktion som du behöver anropa.

Följande är en grundläggande implementering av AttachProperties. Tänk på att exemplet inte innehåller antingen koden för att avgöra vilka egenskaper som finns eller koden för att hitta egenskaperna.

#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;

}