Delen via


RecognizeFrame implementeren

Netwerkmonitoren roept de RecognizeFrame--functie van een parser aan om te bepalen of de parser de niet-geclaimde gegevens van een frame herkent. De niet-geclaimde gegevens bevinden zich mogelijk aan het begin van een frame, maar meestal bevinden niet-geclaimde gegevens zich in het midden van een frame. In de volgende afbeelding ziet men ongeclaimde gegevens die zich midden in een frame bevinden.

niet-opgeëiste gegevens in het midden van een frame

Network Monitor biedt de volgende informatie wanneer deze de functie RecognizeFrame aanroept:

  • Een handgreep naar het frame.
  • Een aanwijzer naar het begin van het frame.
  • Een aanwijzer naar het begin van de ongedeclareerde gegevens.
  • De MAC-waarde van het eerste protocol in het frame.
  • Het aantal bytes in de niet-geclaimde gegevens; dat wil zeggen, de bytes die in het frame overblijven.
  • Een ingang naar het vorige protocol.
  • De verschuiving van het vorige protocol.

Wanneer de parser-DLL bepaalt dat niet-geclaimde gegevens beginnen met het parserprotocol, bepaalt de parser-DLL waar het volgende protocol begint en welk protocol volgt. De functies van de parser-DLL werken op de volgende voorwaardelijke manieren:

  • Als de parser-DLL niet-geclaimde gegevens herkent, stelt de parser-DLL de parameter pProtocolStatus in en retourneert een aanwijzer naar het volgende protocol in het frame of NULL-. NULL- wordt geretourneerd als het huidige protocol het laatste protocol in het frame is.
  • Als de parser-DLL niet-geclaimde gegevens herkent en het volgende protocol identificeert (uit informatie die in het protocol is opgegeven), retourneert de parser-DLL een aanwijzer naar de ingang van het volgende protocol in de phNextProtocol parameter van de functie.
  • Als de parser-DLL geen niet-claimgegevens herkent, retourneert de parser-DLL de aanwijzer naar het begin van niet-claimgegevens en probeert Network Monitor de niet-claimgegevens te parseren.

RecognizeFrame- implementeren

  1. Test om te bepalen of u het protocol herkent.

  2. Als u niet-geclaimde gegevens herkent en u weet welk protocol volgt, stelt u pProtocolStatus in op PROTOCOL_STATUS_NEXT_PROTOCOL, stelt u phNextProtocol- in op een aanwijzer die verwijst naar de ingang voor het volgende protocol en retourneert u een aanwijzer naar het volgende protocol.

    –of–

    Als u ongeclaimde gegevens herkent en u niet weet welk protocol er volgt, stelt u pProtocolStatus- in op PROTOCOL_STATUS_RECOGNIZED en retourneert u een pointer naar het volgende protocol.

    –of–

    Als u ongeclaimde gegevens herkent en uw protocol het laatste protocol in een frame is, stelt u pProtocolStatus in op PROTOCOL_STATUS_CLAIMED en retourneert u dan NULL.

    –of–

    Als u niet-geclaimde gegevens niet herkent, stelt u pProtocolStatus in op PROTOCOL_STATUS_NOT_RECOGNIZED en retourneert u vervolgens de aanwijzer die aan u wordt doorgegeven in pProtocol-.

Hier volgt een eenvoudige implementatie van RecognizeFrame.

#include <windows.h>

LPBYTE BHAPI MyProtocol_RecognizeFrame( HFRAME hFrame,
                                        LPBYTE        pMacFrame,
                                        LPBYTE        pProtocol,
                                        DWORD         MacType,
                                        DWORD         BytesLeft,
                                        HPROTOCOL     hPrevProtocol,
                                        DWORD         nPreviuosProtOffset,
                                        LPDWORD       pProtocolStatus,
                                        LPHPROTOCOL   phNextProtocol,
                                        LPDWORD       InstData)
  
  // Test unclaimed data. 
  
  // If unclaimed data is recognized, but you do not know what follows.
  *pProtocolStatus =  PROTOCOL_STATUS_RECOGNIZED;
  return pProtocol + MY_PROTOCOL_LENGTH;
  
  // If unclaimed data is recognized and you know what follows.
  *pProtocolStatus =  PROTOCOL_STATUS_NEXT_PROTOCOL;
  phNextProtocol = GetProtocolFromTable(
                                        hTable,
                                        ItemToFind,
                                        lpInstData);
  return  pProtocol + MY_PROTOCOL_LENGTH;
  
  // If unclaimed data is recognized and the protocol is the last 
  // protocol in the frame.
  *pProtocolStatus =  PROTOCOL_STATUS_CLAIMED;
  return NULL;
  
  // If the unclaimed data is not recognized.
  *pProtocolStatus =  PROTOCOL_STATUS_NOT_RECOGNIZED;
  return *pProtocol;

}