共用方式為


實作 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;

}