Implémentation du registre
Network Monitor charge une capture à partir du fichier de capture, puis commence à appeler la fonction Register pour tous les protocoles qu’il peut identifier. Chaque DLL d’analyseur doit implémenter une fonction Register pour chaque protocole pris en charge par la DLL de l’analyseur.
Chaque implémentation de la fonction Register doit appeler les fonctions CreatePropertyDatabase et AddProperty pour créer et remplir la base de données de propriétés pour le protocole, puis createHandoffTable pour créer la table de transfert du protocole, si nécessaire.
Notes
Les propriétés de protocole sont définies pour le Moniteur réseau. Les propriétés ne sont pas mappées à un emplacement dans une capture de données tant que la fonction d’exportation AttachProperties n’est pas appelée.
La procédure suivante identifie les étapes nécessaires pour implémenter la fonction Register .
Pour implémenter l’inscription pour un protocole
- Définissez un tableau de structures PROPERTYINFO pour décrire chaque propriété prise en charge par le protocole.
- Appelez CreatePropertyDatabase pour fournir un handle de protocole et le nombre de propriétés prises en charge par le protocole.
- Appelez AddProperty dans une boucle pour ajouter chaque propriété définie dans le tableau de structure PROPERTYINFO .
- Si le protocole utilise une table de transfert, appelez CreateHandoffTable une fois que toutes les propriétés du protocole ont été ajoutées à la base de données de propriétés.
Voici une implémentation de base de Register. Notez qu’une base de données de propriétés est créée pour un protocole qui ne prend en charge que deux propriétés. Cet exemple de code est tiré de l’analyseur générique fourni par Network Monitor.
#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.
)
}