Implementación del registro
Network Monitor carga una captura del archivo de captura y, a continuación, comienza a llamar a la función Register para todos los protocolos que puede identificar. Cada DLL del analizador debe implementar una función Register para cada protocolo que admita el archivo DLL del analizador.
Cada implementación de la función Register debe llamar a las funciones CreatePropertyDatabase y AddProperty para crear y rellenar la base de datos de propiedades para el protocolo y, a continuación, createHandoffTable para crear la tabla de entrega para el protocolo, si es necesario.
Nota
Las propiedades del protocolo se definen para Network Monitor. Las propiedades no se asignan a una ubicación de los datos de captura hasta que se llama a la función de exportación AttachProperties .
El procedimiento siguiente identifica los pasos necesarios para implementar la función Register .
Para implementar Register for one protocol
- Defina una matriz de estructuras PROPERTYINFO para describir cada propiedad que admite el protocolo.
- Llame a CreatePropertyDatabase para proporcionar un identificador de protocolo y el número de propiedades que admite el protocolo.
- Llame a AddProperty en un bucle para agregar cada propiedad definida en la matriz de estructura PROPERTYINFO .
- Si el protocolo usa una tabla de entrega, llame a CreateHandoffTable, una vez agregadas todas las propiedades del protocolo a la base de datos de propiedades.
A continuación se muestra una implementación básica de Register. Tenga en cuenta que se crea una base de datos de propiedades para un protocolo que solo admite dos propiedades. Este ejemplo de código se toma del analizador genérico que proporciona 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.
)
}