Реализация регистра

Сетевой монитор загружает запись из файла записи, а затем запускает вызов функции register для всех протоколов, которые он может идентифицировать. Каждая библиотека DLL синтаксического анализа должна реализовать функцию регистрации для каждого протокола, который поддерживает библиотека DLL синтаксического анализа.

Каждая реализация регистра функции должна вызывать функции CreatePropertyDatabase и AddProperty для создания и заполнения базы данных свойств для протокола, а затем вызвать CreateHandoffTable для создания таблицы передачи для протокола, если это необходимо.

Заметка

Свойства протокола определяются для сетевого монитора. Свойства не сопоставляются с расположением в данных записи до тех пор, пока не будет вызвана функция экспорта AttachProperties.

 

Следующая процедура определяет шаги, необходимые для реализации функции регистрации .

Реализация функции регистрации для одного протокола

  1. Определите массив структурPROPERTYINFO, чтобы описать каждое свойство, которое поддерживает протокол.
  2. Вызовите CreatePropertyDatabase для предоставления дескриптора протокола и количества свойств, поддерживаемых протоколом.
  3. Вызовите AddProperty в цикле, чтобы добавить каждое свойство, определенное в массиве структуры PROPERTYINFO.
  4. Если протокол использует таблицу передачи, вызовите 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.
                          )
}