Partilhar via


Implementando o analisador DllMain

O Monitor de Rede usa o DllMain função de exportação 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 deteta.
  • Forneça pontos de entrada para as restantes funções de exportação do analisador que o Monitor de Rede chama.

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

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

Para implementar o DLLMain

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

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

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

    • Registe-se
    • Cancelar o registro
    • ReconhecerEstrutura
    • AttachProperties
    • FormatProperties (necessário apenas se o Monitor de Rede estiver exibindo as propriedades do protocolo).

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

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

A seguir está uma implementação básica do DllMain. O exemplo de código usa uma instrução case para intercetar valores do parâmetro Command, a fim de determinar se deve ser chamado o CreateProtocol ou 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;
}