次の方法で共有


AttachProperties の実装

Network Monitor は AttachProperties 関数を呼び出して、認識されたデータの一部に存在するプロパティをマップします。 AttachProperties 関数は、プロパティを特定の場所にマップします。

ネットワーク モニターでは、次のプロセスを使用してフレーム内のデータを解析します。

  • まず、Network Monitor は RecognizeFrame を呼び出して、フレーム内に存在するすべてのプロトコルを認識します。
  • 次に、ネットワーク モニターは、データの一部を認識するパーサーごとに AttachProperties を呼び出します。

ネットワーク モニターが認識されたデータの AttachProperties 関数を呼び出す場合、呼び出されるパーサーはデータを解析し、認識されたデータ内の場所に各既存のプロパティをマップする必要があります。 パーサーは、存在するプロパティと、データ内の各プロパティの場所を決定します。 次の図は、パーサーが認識したデータを示しています。

パーサーが認識するデータ

AttachProperties の実装中に、データ フレームに存在するプロパティごとに次のいずれかの関数を呼び出す必要があります。

  • フレーム内のプロパティ データを変更する場合は、 AttachPropertyInstanceEx 関数を呼び出します。
  • フレーム内のプロパティ データを変更しない場合は、 AttachPropertyInstance 関数を呼び出します。

Note

キャプチャに存在するデータを使用することをお勧めします。

 

次の手順では、 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;

}