Compartilhar via


Implementando o analisador DllMain

O Monitor de Rede usa a função de exportação DllMain para identificar a existência do analisador e liberar recursos que o Monitor de Rede usa para armazenar informações sobre o analisador.

Quando o Monitor de Rede chama DllMain pela primeira vez, a DLL do analisador chama CreateProtocol para fazer o seguinte:

  • Especifique o protocolo que o analisador detecta.
  • Forneça pontos de entrada para as funções de exportação do analisador restantes que o Monitor de Rede chama.

Quando o Monitor de Rede chama DllMain pela última vez, dllMain chama DestroyProtocol para liberar todos os recursos que o Monitor de Rede usa para armazenar informações sobre o analisador.

O procedimento a seguir identifica as etapas necessárias para implementar o DllMain.

Para implementar o DllMain

  1. Especifique a estrutura ENTRYPOINTS para a função CreateProtocol e a variável de anexação global. A variável Attach é usada para acompanhar o número de instâncias de protocolo em execução.

  2. Examine o valor do parâmetro Command que o sistema operacional define.

    Se o parâmetro Command estiver definido como DLL_PROCESS_ATTACH e Anexar for 0, chame CreateProtocol para fornecer o nome do protocolo e os pontos de entrada para as funções de exportação a seguir.

    • Registrar
    • Cancelar registro
    • RecognizeFrame
    • AttachProperties
    • FormatProperties (necessário somente se o Monitor de Rede exibir as propriedades do protocolo).

    Se o parâmetro Command estiver definido como DLL_PROCESS_DETACH e Anexar for 0, chame DestroyProtocol usando o identificador de instância que CreateProtocol retorna.

  3. Retornar TRUE porque a função de analisador DllMain sempre deve retornar TRUE.

Veja a seguir uma implementação básica de DllMain. O exemplo de código usa uma instrução case para capturar valores do parâmetro Command para determinar se CreateProtocol ou DestroyProtocol devem ser chamados.

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