Implementando o registro
O Monitor de Rede carrega uma captura do arquivo de captura e, em seguida, começa a chamar a função Registrar para todos os protocolos que ele pode identificar. Cada DLL do analisador deve implementar uma função Register para cada protocolo compatível com a DLL do analisador.
Cada implementação da função Register deve chamar as funções CreatePropertyDatabase e AddProperty para criar e preencher o banco de dados de propriedades do protocolo e, em seguida, o CreateHandoffTable para criar a tabela de entrega para o protocolo , se necessário.
Observação
As propriedades do protocolo são definidas para o Monitor de Rede. As propriedades não são mapeadas para um local em dados de captura até que a função de exportação AttachProperties seja chamada.
O procedimento a seguir identifica as etapas necessárias para implementar a função Register .
Para implementar Registrar para um protocolo
- Defina uma matriz de estruturas PROPERTYINFO para descrever cada propriedade compatível com o protocolo.
- Chame CreatePropertyDatabase para fornecer um identificador de protocolo e o número de propriedades compatíveis com o protocolo.
- Chame AddProperty em um loop para adicionar cada propriedade definida na matriz de estrutura PROPERTYINFO .
- Se o protocolo usar uma tabela de entrega, chame CreateHandoffTable, depois que todas as propriedades do protocolo forem adicionadas ao banco de dados de propriedades.
Veja a seguir uma implementação básica do Register. Observe que um banco de dados de propriedade é criado para um protocolo que dá suporte a apenas duas propriedades. Este exemplo de código é obtido do analisador genérico que o Monitor de Rede fornece.
#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.
)
}