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.
Durante a implementação de AttachProperties, você deve chamar uma das seguintes funções para cada propriedade que existe em um quadro de dados.
- Chame a função AttachPropertyInstanceEx quando quiser modificar os dados da propriedade em um quadro.
- Chame a função AttachPropertyInstance quando você não quiser modificar os dados da propriedade em um quadro.
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
- Determine quais propriedades existem e o local da propriedade nos dados.
- Chame AttachPropertyInstanceEx para cada propriedade com um valor que você deseja modificar.
- 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;
}