Udostępnij za pośrednictwem


Implementowanie właściwości AttachProperties

Monitor sieci wywołuje funkcję AttachProperties, aby zamapować właściwości, które istnieją w kawałku rozpoznanych danych. Funkcja AttachProperties przypisuje właściwości do określonej lokalizacji.

Usługa Network Monitor używa następującego procesu do analizowania danych w ramce.

  • Najpierw monitor sieci wywołuje RecognizeFrame w celu rozpoznania wszystkich protokołów, które są obecne w ramce.
  • Następnie monitor sieci wywołuje AttachProperties dla każdego analizatora, który rozpoznaje fragment danych.

Gdy monitor sieci wywołuje funkcję AttachProperties dla rozpoznanych danych, analizator, który jest wywoływany, musi analizować dane, a następnie mapować każdą istniejącą właściwość na lokalizację w rozpoznanych danych. Analizator określa, które właściwości istnieją i gdzie każda właściwość znajduje się w danych. Na poniższej ilustracji przedstawiono dane rozpoznane przez analizator.

danych rozpoznanych przez analizator

Podczas implementacji AttachPropertiesnależy wywołać jedną z następujących funkcji dla każdej właściwości, która istnieje w ramce danych.

Notatka

Zaleca się użycie danych, które istnieją w przechwyconym materiale.

 

Poniższa procedura identyfikuje kroki niezbędne do zaimplementowania AttachProperties.

aby zaimplementować funkcję AttachProperties

  1. Określ, które właściwości istnieją, oraz lokalizację właściwości w danych.
  2. Wywołaj AttachPropertyInstanceEx dla każdej właściwości z wartością, którą chcesz zmodyfikować.
  3. Wywołaj AttachPropertyInstance dla każdej właściwości z wartością, której nie chcesz modyfikować. Zazwyczaj jest to jedyna funkcja, którą należy wywołać.

Poniżej przedstawiono podstawową implementację AttachProperties. Należy pamiętać, że w przykładzie nie ma ani kodu, aby określić, które właściwości istnieją, albo kod do zlokalizowania właściwości.

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

}