共用方式為


實作緩存器

網路監視器會從擷取檔案載入擷取,然後針對可識別的所有通訊協議開始呼叫 Register 函式。 每個剖析器 DLL 都必須針對剖析器 DLL 支援的每個通訊協定實作 Register 函式。

Register 函式的每個實作都必須呼叫 CreatePropertyDatabaseAddProperty 函式,以建立及填入通訊協定 屬性資料庫,然後視需要建立 CreateHandoffTable,以建立通訊協定的 交接數據表

注意

通訊協定屬性是針對網路監視器所定義。 在呼叫 AttachProperties 導出函式之前,屬性不會對應至擷取數據中的位置。

 

下列程式會識別實作 Register 函式所需的步驟。

實現一個通訊協議的註冊功能

  1. 定義 propertyINFO 陣列 結構,以描述通訊協定所支援的每個屬性。
  2. 呼叫 CreatePropertyDatabase 以提供通訊協定句柄,以及通訊協定支援的屬性數目。
  3. 在迴圈中呼叫 AddProperty,來新增在 PROPERTYINFO 結構陣列中定義的每個屬性。
  4. 如果通訊協定使用交接數據表,請在將通訊協定的所有屬性新增至屬性資料庫之後,呼叫 CreateHandoffTable

以下是 Register的基本實現。 請注意,針對僅支援兩個屬性的通訊協定建立屬性資料庫。 此程式代碼範例取自網路監視器所提供的泛型剖析器。

#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.
                          )
}