Implémentation de l’analyseur DllMain
Network Monitor utilise la fonction d’exportation DllMain pour identifier l’existence de l’analyseur et libérer les ressources que network Monitor utilise pour stocker des informations sur l’analyseur.
Lorsque le Moniteur réseau appelle DllMain pour la première fois, la DLL de l’analyseur appelle CreateProtocol pour effectuer les opérations suivantes :
- Spécifiez le protocole détecté par l’analyseur.
- Fournissez des points d’entrée pour les fonctions d’exportation d’analyseur restantes que le Moniteur réseau appelle.
Lorsque le Moniteur réseau appelle DllMain pour la dernière fois, DllMain appelle DestroyProtocol pour libérer toutes les ressources utilisées par network Monitor pour stocker des informations sur l’analyseur.
La procédure suivante identifie les étapes nécessaires pour implémenter DllMain.
Pour implémenter DllMain
Spécifiez la structure ENTRYPOINTS pour la fonction CreateProtocol et la variable Attach globale. La variable Attach est utilisée pour suivre le nombre d’instances de protocole en cours d’exécution.
Examinez la valeur du paramètre Command défini par le système d’exploitation.
Si le paramètre Command est défini sur DLL_PROCESS_ATTACH et que Attach a la valeur 0, appelez CreateProtocol pour fournir le nom du protocole et les points d’entrée pour les fonctions d’exportation suivantes.
- S’inscrire
- Désinscrire
- RecognizeFrame
- AttachProperties
- FormatProperties (obligatoire uniquement si Network Monitor affiche les propriétés du protocole).
Si le paramètre Command est défini sur DLL_PROCESS_DETACH et que Attach a la valeur 0, appelez DestroyProtocol à l’aide du handle instance que CreateProtocol retourne.
Retourne TRUE , car la fonction d’analyseur DllMain doit toujours retourner TRUE.
Voici une implémentation de base de DllMain. L’exemple de code utilise une instruction de cas pour intercepter les valeurs du paramètre Command afin de déterminer si CreateProtocol ou DestroyProtocol doit être appelé.
#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;
}