Поделиться через


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

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

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

Примечание

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

 

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

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

  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.
                          )
}