Implementieren von Registern
Netzwerkmonitor lädt eine Erfassung aus der Erfassungsdatei und startet dann den Aufruf der Register-Funktion für alle Protokolle, die identifiziert werden können. Jede Parser-DLL muss eine Register-Funktion für jedes Protokoll implementieren, das die Parser-DLL unterstützt.
Jede Implementierung der Register-Funktion muss die Funktionen CreatePropertyDatabase und AddProperty aufrufen, um die Eigenschaftendatenbank für das Protokoll zu erstellen und einfüllen zu können, und dann createHandoffTable, um die Übergabetabelle für das Protokoll zu erstellen – falls erforderlich.
Hinweis
Protokolleigenschaften werden für die Netzwerkmonitor. Eigenschaften werden erst dann einem Speicherort in einem Erfassungsdaten zugeordnet, wenn die AttachProperties-Exportfunktion aufgerufen wird.
Im folgenden Verfahren werden die erforderlichen Schritte zum Implementieren der Register-Funktion beschrieben.
So implementieren Sie Register für ein Protokoll
- Definieren Sie ein Array von PROPERTYINFO-Strukturen, um jede Eigenschaft zu beschreiben, die das Protokoll unterstützt.
- Rufen Sie CreatePropertyDatabase auf, um ein Protokollhand handle und die Anzahl der Eigenschaften, die das Protokoll unterstützt, zur Verfügung zu stellen.
- Rufen Sie AddProperty in einer Schleife auf, um jede Eigenschaft hinzuzufügen, die im PROPERTYINFO-Strukturarray definiert ist.
- Wenn das Protokoll eine Übergabetabelle verwendet, rufen Sie CreateHandoffTableauf, nachdem alle Eigenschaften des Protokolls der Eigenschaftendatenbank hinzugefügt wurden.
Im Folgenden finden Sie eine grundlegende Implementierung von Register. Beachten Sie, dass eine Eigenschaftendatenbank für ein Protokoll erstellt wird, das nur zwei Eigenschaften unterstützt. Dieses Codebeispiel wird aus dem generischen Parser übernommen, den Netzwerkmonitor bietet.
#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.
)
}