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