实现 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;
}