实现寄存器
网络监视器从捕获文件加载捕获,然后针对它可以识别的所有协议开始调用 Register 函数。 每个分析程序 DLL 必须为分析程序 DLL 支持的每个协议实现 Register 函数。
Register 函数的每个实现都必须调用 CreatePropertyDatabase 和 AddProperty 函数来创建和填充协议的属性数据库,然后调用 CreateHandoffTable 来创建协议的移交表(如果需要)。
注意
协议属性是为网络监视器定义的。 在调用 AttachProperties 导出函数之前,属性不会映射到捕获数据中的位置。
以下过程标识实现 Register 函数所需的步骤。
实现注册一个协议
- 定义 PROPERTYINFO 结构的数组来描述协议支持的每个属性。
- 调用 CreatePropertyDatabase 以提供协议句柄和协议支持的属性数。
- 在循环中调用 AddProperty 以添加 PROPERTYINFO 结构数组中定义的每个属性。
- 如果协议使用移交表,请在将协议的所有属性添加到属性数据库后调用 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.
)
}