实现 AttachProperties

网络监视器调用 AttachProperties 函数来映射一段已识别数据中存在的属性。 AttachProperties 函数将属性映射到特定位置。

网络监视器使用以下过程来分析帧中的数据。

  • 首先,网络监视器调用 RecognizeFrame 来识别帧中存在的所有协议。
  • 然后,网络监视器为每个识别数据段分析程序调用 AttachProperties

当网络监视器为识别的数据调用 AttachProperties 函数时,调用分析程序必须分析数据,然后将每个现有属性映射到已识别数据中的某个位置。 分析程序确定存在哪些属性,以及每个属性在数据中的位置。 下图显示了分析程序识别的数据。

分析器识别的数据

AttachProperties 实现期间,必须为数据帧中存在的每个属性调用以下函数之一。

注意

建议使用捕获中存在的数据。

 

以下过程确定了实现 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;

}