Compartilhar via


Implementando AttachProperties

O Monitor de Rede chama a função AttachProperties para mapear as propriedades que existem em uma parte dos dados reconhecidos. A função AttachProperties mapeia as propriedades para um local específico.

O Monitor de Rede usa o processo a seguir para analisar os dados em um quadro.

  • Primeiro, o Monitor de Rede chama RecognizeFrame para reconhecer todos os protocolos que existem em um quadro.
  • Em seguida, o Monitor de Rede chama AttachProperties para cada analisador que reconhece uma parte dos dados.

Quando o Monitor de Rede chama a função AttachProperties para os dados reconhecidos, o analisador chamado deve analisar os dados e mapear cada propriedade existente para um local nos dados reconhecidos. O analisador determina quais propriedades existem e onde cada propriedade está localizada nos dados. A figura a seguir mostra dados reconhecidos pelo analisador.

dados reconhecidos pelo analisador

Durante a implementação de AttachProperties, você deve chamar uma das seguintes funções para cada propriedade que existe em um quadro de dados.

Observação

É recomendável que você use os dados como eles existem na captura.

 

O procedimento a seguir identifica as etapas necessárias para implementar AttachProperties.

Para implementar AttachProperties

  1. Determine quais propriedades existem e o local da propriedade nos dados.
  2. Chame AttachPropertyInstanceEx para cada propriedade com um valor que você deseja modificar.
  3. Chame AttachPropertyInstance para cada propriedade com um valor que você não deseja modificar. Normalmente, essa é a única função que você precisa chamar.

Veja a seguir uma implementação básica de AttachProperties. Lembre-se de que o exemplo não inclui o código para determinar quais propriedades existem ou o código para localizar as propriedades.

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

}