Implementera parsern för DllMain

Network Monitor använder DllMain exportfunktion för att identifiera förekomsten av parsern och frigöra resurser som Network Monitor använder för att lagra information om parsern.

När Network Monitor anropar DllMain för första gången anropar parser-DLL:n CreateProtocol för att göra följande:

  • Ange det protokoll som parsern identifierar.
  • Ange startpunkter för återstående parserexportfunktioner som Network Monitor anropar.

När Network Monitor anropar DllMain för sista gången anropar DllMainDestroyProtocol för att frigöra alla resurser som Network Monitor använder för att lagra information om parsern.

Följande procedur identifierar de steg som krävs för att implementera DllMain.

För att implementera DllMain

  1. Ange ENTRYPOINTS struktur för CreateProtocol funktionen och den globala variabeln Attach. Variabeln Bifoga används för att spåra antalet protokollinstanser som körs.

  2. Titta på värdet för parametern Command som operativsystemet anger.

    Om parametern Command är inställd på DLL_PROCESS_ATTACH och Attach är 0 anropar du CreateProtocol för att ange protokollnamnet och startpunkterna för följande exportfunktioner.

    • Registrera
    • Avregistrera
    • RecognizeFrame
    • BifogaEgenskaper
    • FormatProperties (krävs endast om Nätverksövervakaren visar protokollegenskaperna).

    Om parametern Command är inställd på DLL_PROCESS_DETACH och Attach är 0 anropar du DestroyProtocol med instanshandtaget som CreateProtocol- returnerar.

  3. Returnera TRUE eftersom parserfunktionen DllMain alltid måste returnera TRUE.

Följande är en grundläggande implementering av DllMain. Kodexemplet använder en case-instruktion för att trapa värden för parametern Command för att avgöra om CreateProtocol eller DestroyProtocol ska anropas.

#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;
}