Leer en inglés

Compartir a través de


Implementación del analizador de DllMain

Network Monitor usa la función de exportación DllMain para identificar la existencia del analizador y liberar los recursos que usa Network Monitor para almacenar información sobre el analizador.

Cuando Network Monitor llama a DllMain por primera vez, el archivo DLL del analizador llama a CreateProtocol para hacer lo siguiente:

  • Especifique el protocolo que detecta el analizador.
  • Proporcione puntos de entrada para las funciones de exportación del analizador restantes a las que llama Network Monitor.

Cuando Network Monitor llama a DllMain por última vez, DllMain llama a DestroyProtocol para liberar todos los recursos que usa Network Monitor para almacenar información sobre el analizador.

El siguiente procedimiento identifica los pasos necesarios para implementar DllMain.

Para implementar DllMain

  1. Especifique la estructura ENTRYPOINTS para la función CreateProtocol y la variable Attach global. La variable Attach se usa para realizar un seguimiento del número de instancias de protocolo que se ejecutan.

  2. Examine el valor del parámetro Command que establece el sistema operativo.

    Si el parámetro Command se establece en DLL_PROCESS_ATTACH y Attach es 0, llame a CreateProtocol para proporcionar el nombre del protocolo y los puntos de entrada para las siguientes funciones de exportación.

    • Registro
    • Eliminar registro
    • RecognizeFrame
    • AttachProperties
    • FormatProperties (solo es necesario si Monitor de red mostrará las propiedades del protocolo).

    Si el parámetro Command se establece en DLL_PROCESS_DETACH y Attach es 0, llame a DestroyProtocol mediante el identificador de instancia que devuelve CreateProtocol .

  3. Devuelve TRUE porque la función del analizador DllMain siempre debe devolver TRUE.

A continuación se muestra una implementación básica de DllMain. En el ejemplo de código se usa una instrucción case para capturar valores del parámetro Command para determinar si se debe llamar a 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;
}