Реализация AttachProperties
Монитор сети вызывает функцию AttachProperties для сопоставления свойств, которые существуют в фрагменте распознаваемых данных. Функция AttachProperties сопоставляет свойства с определенным расположением.
Монитор сети использует следующий процесс для анализа данных в кадре.
- Во-первых, сетевой монитор вызывает RecognizeFrame , чтобы распознать все протоколы, существующие в кадре.
- Затем монитор сети вызывает AttachProperties для каждого средства синтаксического анализа, распознающего фрагмент данных.
Когда сетевой монитор вызывает функцию AttachProperties для распознаваемых данных, вызываемое средство синтаксического анализа должно проанализировать данные, а затем сопоставить каждое существующее свойство с расположением в распознаваемых данных. Средство синтаксического анализа определяет, какие свойства существуют и где каждое свойство находится в данных. На следующем рисунке показаны данные, распознаваемые анализатором.
Во время реализации AttachProperties необходимо вызвать одну из следующих функций для каждого свойства, существующего в кадре данных.
- Вызовите функцию AttachPropertyInstanceEx , если требуется изменить данные свойства в кадре.
- Вызовите функцию AttachPropertyInstance , если вы не хотите изменять данные свойства во фрейме.
Примечание
Рекомендуется использовать данные в том виде, в который они существуют в записи.
Следующая процедура определяет шаги, необходимые для реализации AttachProperties.
Реализация AttachProperties
- Определите, какие свойства существуют, и расположение свойства в данных.
- Вызовите AttachPropertyInstanceEx для каждого свойства со значением, которое требуется изменить.
- Вызовите 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;
}