Implementazione di AttachProperties

Monitoraggio di rete chiama la funzione AttachProperties per eseguire il mapping delle proprietà esistenti in una parte di dati riconosciuti. La funzione AttachProperties esegue il mapping delle proprietà a una posizione specifica.

Monitoraggio di rete usa il processo seguente per analizzare i dati in un frame.

  • Prima di tutto, Monitoraggio di rete chiama RecognizeFrame per riconoscere tutti i protocolli presenti in un frame.
  • Monitoraggio di rete chiama quindi AttachProperties per ogni parser che riconosce una parte di dati.

Quando Monitoraggio di rete chiama la funzione AttachProperties per i dati riconosciuti, il parser chiamato deve analizzare i dati e quindi eseguire il mapping di ogni proprietà esistente a una posizione nei dati riconosciuti. Il parser determina quali proprietà esistono e dove si trova ogni proprietà nei dati. La figura seguente mostra i dati riconosciuti dal parser.

dati riconosciuti dal parser

Durante l'implementazione di AttachProperties, è necessario chiamare una delle funzioni seguenti per ogni proprietà presente in un frame di dati.

Nota

È consigliabile usare i dati così come sono presenti nell'acquisizione.

 

La procedura seguente identifica i passaggi necessari per implementare AttachProperties.

Per implementare AttachProperties

  1. Determinare quali proprietà esistono e la posizione della proprietà nei dati.
  2. Chiamare AttachPropertyInstanceEx per ogni proprietà con un valore che si desidera modificare.
  3. Chiamare AttachPropertyInstance per ogni proprietà con un valore che non si desidera modificare. In genere, si tratta dell'unica funzione che è necessario chiamare.

Di seguito è riportata un'implementazione di base di AttachProperties. Tenere presente che l'esempio non include il codice per determinare quali proprietà esistono o il codice per individuare le proprietà.

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

}