次の方法で共有


Register の実装

ネットワーク モニターはキャプチャ ファイルからキャプチャを読み込み、識別できるすべてのプロトコルに対して Register 関数の呼び出しを開始します。 各パーサー DLL は、パーサー DLL がサポートするプロトコルごとに Register 関数を実装する必要があります。

Register 関数の各実装では、CreatePropertyDatabase 関数と AddProperty 関数を呼び出して、プロトコルのプロパティ データベースを作成して入力し、必要に応じて CreateHandoffTable を呼び出してプロトコルのハンドオフ テーブルを作成する必要があります。

Note

プロトコル プロパティは、ネットワーク モニターに対して定義されます。 AttachProperties エクスポート関数が呼び出されるまで、プロパティはキャプチャ データ内の場所にマップされません。

 

次の手順では、 Register 関数を実装するために必要な手順を示します。

1 つのプロトコルに登録を実装するには

  1. PROPERTYINFO 構造体の配列を定義して、プロトコルがサポートする各プロパティを記述します。
  2. CreatePropertyDatabase を呼び出して、プロトコル ハンドルと、プロトコルがサポートするプロパティの数を指定します。
  3. ループ内で AddProperty を呼び出して、 PROPERTYINFO 構造体配列で定義されている各プロパティを追加します。
  4. プロトコルでハンドオフ テーブルが使用されている場合は、プロトコルのすべてのプロパティがプロパティ データベースに追加された後、 CreateHandoffTable を呼び出します。

Register の基本的な実装を次に示 します。 プロパティ データベースは、2 つのプロパティのみをサポートするプロトコル用に作成されることに注意してください。 このコード例は、Network Monitor が提供する汎用パーサーから取得します。

#include <windows.h>

PROPERTYINFO MyProtocolPropertyTable[]
{
  // Summary property (0)
  {
     0,                               // Handle to property.
     0,                               // Reserved.
     "Summary",                       // Property label.
     "Summary of protocol packet",    // Property comment.
     PROP_TYPE_SUMMARY,               // Data type of property.
     PROP_QUAL_NONE,                  // Data type qualifier.
     NULL,                            // Reserved.
     80,                              // 
     FormatPropertyInstance           // 
  }

  // WORD property (1)
  {
     0,                               // Handle to property.
     0,                               // Reserved.
     "WORD property",                 // Property label.
     "16-bit WORD property",         // Property comment.
     PROP_TYPE_WORD,                  // Data type of property.
     PROP_QUAL_NONE,                  // Data type qualifier.
     NULL,                            // Reserved.
     80,                              // 
     FormatPropertyInstance           // 
  }

}

void BHAPI MyProtocolRegister( HPPROTOCOL hProtocol) 
{
  // Create property database.
  DWORD dwNumberOfProperties = 2;
  CreatePropertyDatabase (hProtocol,
                          dwNumberOfProperties
                          );
  
  // Add properties to database.
  WORD i;
  for( i=0; i< dwNumberOfProperties; i++)
  {
     AddProperty(hProtocol, &MyProtocolPropertyTable[i]);
  }

  // Create handoff table.
  CreateHandoffTable("myProtocolHandoffTable",
                          "myProtocol.ini",
                           hTable,
                           MaxEntries,
                           10       // Handoff set values are base 10.
                          )
}