Implementieren des DllMain-Parsers

Netzwerkmonitor verwendet die DllMain-Exportfunktion, um das Vorhandensein des Parsers zu identifizieren, und gibt Ressourcen frei, die Netzwerkmonitor verwendet, um Informationen über den Parser zu speichern.

Wenn Netzwerkmonitor DllMain zum ersten Mal aufruft, ruft die Parser-DLL CreateProtocol auf, um folgende Schritte auszuführen:

  • Geben Sie das Protokoll an, das der Parser erkennt.
  • Stellen Sie Einstiegspunkte für verbleibende Parserexportfunktionen bereit, die Aufrufe Netzwerkmonitor.

Wenn Netzwerkmonitor DllMain zum letzten Mal aufruft, ruft DllMain DestroyProtocol auf, um alle Ressourcen freizugeben, die Netzwerkmonitor zum Speichern von Informationen über den Parser verwendet.

Mit dem folgenden Verfahren werden die Schritte identifiziert, die zum Implementieren von DllMain erforderlich sind.

So implementieren Sie DllMain

  1. Geben Sie die ENTRYPOINTS-Struktur für die CreateProtocol-Funktion und die globale Attach-Variable an. Die Attach-Variable wird verwendet, um die Anzahl der ausgeführten Protokollinstanzen nachzuverfolgen.

  2. Sehen Sie sich den Wert des Command-Parameters an, den das Betriebssystem festlegt.

    Wenn der Command-Parameter auf DLL PROCESS ATTACH und Attach auf 0 festgelegt _ _ ist, rufen Sie CreateProtocol auf, um den Protokollnamen und einstiegspunkte für die folgenden Exportfunktionen bereitzustellen.

    • Registrieren
    • Registrierung aufheben
    • RecognizeFrame
    • AttachProperties
    • FormatProperties (nur erforderlich, wenn Netzwerkmonitor die Protokolleigenschaften anzeigt).

    Wenn der Command-Parameter auf DLL PROCESS DETACH und Attach auf 0 festgelegt ist, rufen Sie _ _ DestroyProtocol mithilfe des Instanzhandles auf, das CreateProtocol zurückgibt.

  3. Gibt TRUE zurück, da die DllMain-Parserfunktion immer TRUE zurückgeben muss.

Im Folgenden ist eine grundlegende Implementierung von DllMain. Im Codebeispiel wird eine case-Anweisung verwendet, um Werte des Command-Parameters abzufangen, um zu bestimmen, ob CreateProtocol oder DestroyProtocol aufgerufen werden soll.

#include <windows.h>

// Entry point structure for parser export functions and global
// Attach variable.
ENTRYPOINTS EntryPoints =
{
  Register,
  Deregister,
  RecognizeFrame,
  AttachProperties,
  FormatProperties
};

DWORD Attached = 0; 

BOOL WINAPI DllMain(HANDLE hInstance, ULONG Command, LPVOID Reserved)
{
  switch(Command)
  {
  // Call CreateProtocol.
  case DLL_PROCESS_ATTACH:
       // Loading parser DLL.
       if(Attached == 0)
       {
         hProtocol = CreateProtocol( "ProtocolName",
                                     &EntryPoints,
                                     ENTRYPOINTS_SIZE);
       }
       Attached++;
       break;
  // Call DestroyProtocol.
  case DLL_PROCESS_DETACH:
       // Unloading parser DLL.
       Attached--;
       if(Attached == 0)
       {
         DestroyProtocol( hProtocol);
       }
       break;
  }
  return TRUE;
}