实现寄存器

网络监视器从捕获文件加载捕获,然后针对它可以识别的所有协议开始调用 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.
                          )
}