Поделиться через


Реализация AttachProperties

Монитор сети вызывает функцию AttachProperties для сопоставления свойств, которые существуют в фрагменте распознаваемых данных. Функция AttachProperties сопоставляет свойства с определенным расположением.

Монитор сети использует следующий процесс для анализа данных в кадре.

  • Во-первых, сетевой монитор вызывает RecognizeFrame , чтобы распознать все протоколы, существующие в кадре.
  • Затем монитор сети вызывает AttachProperties для каждого средства синтаксического анализа, распознающего фрагмент данных.

Когда сетевой монитор вызывает функцию AttachProperties для распознаваемых данных, вызываемое средство синтаксического анализа должно проанализировать данные, а затем сопоставить каждое существующее свойство с расположением в распознаваемых данных. Средство синтаксического анализа определяет, какие свойства существуют и где каждое свойство находится в данных. На следующем рисунке показаны данные, распознаваемые анализатором.

Данные, распознаваемые анализатором

Во время реализации AttachProperties необходимо вызвать одну из следующих функций для каждого свойства, существующего в кадре данных.

  • Вызовите функцию AttachPropertyInstanceEx , если требуется изменить данные свойства в кадре.
  • Вызовите функцию AttachPropertyInstance , если вы не хотите изменять данные свойства во фрейме.

Примечание

Рекомендуется использовать данные в том виде, в который они существуют в записи.

 

Следующая процедура определяет шаги, необходимые для реализации AttachProperties.

Реализация AttachProperties

  1. Определите, какие свойства существуют, и расположение свойства в данных.
  2. Вызовите AttachPropertyInstanceEx для каждого свойства со значением, которое требуется изменить.
  3. Вызовите AttachPropertyInstance для каждого свойства со значением, которое не требуется изменять. Как правило, это единственная функция, которую необходимо вызвать.

Ниже приведена базовая реализация AttachProperties. Имейте в виду, что пример не включает ни код для определения существующих свойств, ни код для поиска свойств.

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

}