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