DllMain-elemző implementálása

A Network Monitor a DllMain exportálási függvénnyel azonosítja az elemző meglétét, és felszabadítja azokat az erőforrásokat, amelyeket a Network Monitor az elemző adatainak tárolására használ.

Amikor a Network Monitor először hívja meg DllMain, az elemző DLL az alábbi műveletek végrehajtására hívja meg CreateProtocol:

  • Adja meg az elemző által észlelt protokollt.
  • Adjon meg belépési pontokat a Network Monitor által meghívott elemző-exportálási függvényekhez.

Amikor a Network Monitor utoljára hívja DllMain, DllMain meghívja DestroyProtocol, hogy felszabadítsa az összes erőforrást, amelyet a Network Monitor az elemző adatainak tárolására használ.

Az alábbi eljárás az DllMainimplementálásához szükséges lépéseket azonosítja.

DllMain implementálása

  1. Határozza meg a ENTRYPOINTS struktúráját a CreateProtocol függvény és a globális Csatolás változó esetében. A Csatolás változó a futó protokollpéldányok számának nyomon követésére szolgál.

  2. Tekintse meg az operációs rendszer által megadott command paraméter értékét.

    Ha a Command paraméter DLL_PROCESS_ATTACH értékre van állítva, és a Csatolás értéke 0, akkor hívja meg a CreateProtocol függvényt, hogy megadja az alábbi exportált függvények protokollnevét és belépési pontjait.

    • nyilvántartás
    • regisztráció törlése
    • RecognizeFrame
    • AttachProperties
    • FormatProperties (csak akkor szükséges, ha a Network Monitor megjeleníti a protokoll tulajdonságait).

    Ha a Command paraméter értéke DLL_PROCESS_DETACH, a Csatolás értéke 0, akkor hívja meg DestroyProtocol a CreateProtocoláltal visszaadottleíróval.

  3. Adja vissza IGAZ, mert a DllMain elemző függvénynek mindig IGAZkell visszaadnia.

Az alábbiakban a DllMainalapszintű implementációját íme. A példakód esetfeltételt használ a Command paraméter értékeinek elfogására annak megállapításához, hogy meg kell-e hívni a(z) CreateProtocol vagy a(z) DestroyProtocol.

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