Udostępnij przez


Wdrażanie rejestru

Monitor sieci ładuje dane z pliku przechwytywania, a następnie rozpoczyna wywoływanie funkcji Register dla wszystkich protokołów, które może zidentyfikować. Każda biblioteka DLL analizatora musi implementować funkcję Register dla każdego protokołu obsługiwanego przez bibliotekę DLL analizatora.

Każda implementacja funkcji Register musi wywołać funkcje CreatePropertyDatabase oraz AddProperty, aby utworzyć i wypełnić bazę danych właściwości dla protokołu, a następnie, jeśli to potrzebne, CreateHandoffTable, aby utworzyć tabelę przekazywania dla protokołu.

Notatka

Właściwości protokołu są definiowane dla monitora sieciowego. Właściwości nie są mapowane na lokalizację w danych przechwytywania do momentu wywołania funkcji eksportu AttachProperties.

 

Poniższa procedura identyfikuje kroki niezbędne do zaimplementowania funkcji Register.

Aby zaimplementować rejestr dla jednego protokołu

  1. Zdefiniuj tablicę PROPERTYINFO struktur, aby opisać każdą właściwość obsługiwaną przez protokół.
  2. Wywołaj CreatePropertyDatabase, aby zapewnić dojście protokołu oraz liczbę właściwości obsługiwanych przez protokół.
  3. Wywołaj AddProperty w pętli, aby dodać każdą właściwość zdefiniowaną w tablicy struktury PROPERTYINFO.
  4. Jeśli protokół używa tabeli przekazywania, wywołaj metodę CreateHandoffTable— po dodaniu wszystkich właściwości protokołu do bazy danych właściwości.

Poniżej przedstawiono podstawową implementację Register. Należy pamiętać, że baza danych właściwości jest tworzona dla protokołu, który obsługuje tylko dwie właściwości. Ten przykładowy kod pochodzi z parsera ogólnego, który zapewnia Monitor Sieci.

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