Condividi tramite


Implementazione del parser DllMain

Monitoraggio di rete usa la funzione di esportazione DllMain per identificare l'esistenza del parser e rilasciare le risorse usate da Monitoraggio di rete per archiviare informazioni sul parser.

Quando Monitoraggio di rete chiama DllMain per la prima volta, la DLL del parser chiama CreateProtocol per eseguire le operazioni seguenti:

  • Specificare il protocollo rilevato dal parser.
  • Specificare i punti di ingresso per le funzioni di esportazione del parser rimanenti chiamate da Monitoraggio di rete.

Quando Monitoraggio di rete chiama DllMain per l'ultima volta, DllMain chiama DestroyProtocol per rilasciare tutte le risorse usate da Monitoraggio di rete per archiviare le informazioni sul parser.

La procedura seguente identifica i passaggi necessari per implementare DllMain.

Per implementare DllMain

  1. Specificare la struttura ENTRYPOINTS per la funzione CreateProtocol e la variabile Attach globale. La variabile Attach viene usata per tenere traccia del numero di istanze del protocollo in esecuzione.

  2. Esaminare il valore del parametro Command impostato dal sistema operativo.

    Se il parametro Command è impostato su DLL_PROCESS_ATTACH e Attach è 0, chiamare CreateProtocol per specificare il nome del protocollo e i punti di ingresso per le funzioni di esportazione seguenti.

    • Registra
    • Annullamento registrazione
    • RecognizeFrame
    • AttachProperties
    • FormatProperties (obbligatorio solo se Monitoraggio di rete visualizzerà le proprietà del protocollo).

    Se il parametro Command è impostato su DLL_PROCESS_DETACH e Attach è 0, chiamare DestroyProtocol usando l'handle di istanza restituito da CreateProtocol .

  3. Restituisce TRUE perché la funzione parser DllMain deve restituire sempre TRUE.

Di seguito è riportata un'implementazione di base di DllMain. Nell'esempio di codice viene usata un'istruzione case per intercettare i valori del parametro Command per determinare se è necessario chiamare CreateProtocol o 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;
}