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