共用方式為


實作暫存器

網路監視器會從擷取檔案載入擷取,然後開始針對可識別的所有通訊協定呼叫 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.
                          )
}