FreeLibrary et Kernel32.dll

Résolu
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 7 mai 2009 à 21:11
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 7 mai 2009 à 21:49
Bonjour,

J'ai un programme qui parcourt les ressources contenues dans une dll fournie par l'utilisateur, j'utilise donc LoadLibrary/FreeLibrary pour les charger et les décharger.
J'observe un comportement très bizarre lorsque la dll est une copie de kernel32.dll. Exemple (aaa.dll est une copie de kernel32.dll) :

int main()

{

  HMODULE hMod;

  BOOL bRet;


  hMod = LoadLibrary(TEXT("C:\\test\\aaa.dll")); // OK

  bRet = FreeLibrary(hMod); // OK


  hMod = LoadLibrary(TEXT("C:\\test\\aaa.dll")); // Exception de première chance -> hMod = 0

  // A partir de la plus rien ne marche, je ne peux plus faire de LoadLibrary sur cette dll

  bRet = FreeLibrary(hMod);


  hMod = LoadLibrary(TEXT("kernel32.dll")); // OK

  bRet = FreeLibrary(hMod); // OK


  hMod = LoadLibrary(TEXT("kernel32.dll")); // OK

  bRet = FreeLibrary(hMod); // OK

}

Ce qui est bizarre c'est qu'en utilisant le kernel32.dll du système je n'ai aucun problème.
Je n'ai pas ce problème avec d'autres dll système...
Je vois que LoadLibrary et FreeLibrary sont définies dans kernel32.dll, je me demande si c'est une coïncidence.

Si quelqu'un a une idée...
Merci
_____________________________________
Un éditeur de ressources gratuit pour Windows

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 mai 2009 à 21:42
Utilise LoadLibraryEx avec LOAD_LIBRARY_AS_IMAGE_RESOURCE si c'est juste pour explorer les ressources de la DLL.
Sinon avec DONT_RESOLVE_DLL_REFERENCES tu éviteras l'appel du point d'entrée de la DLL, surement ce qui merde avec la copie de kernel32.dll.

ciao...
BruNews, MVP VC++
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
7 mai 2009 à 21:49
Ah oui j'avais pas pensé à LoadLibraryEx!
Avec DONT_RESOLVE_DLL_REFERENCES ca marche nickel. Je vais utiliser plutot ca que LOAD_LIBRARY_AS_IMAGE_RESOURCE pour garder une compatibilité avec XP.

Merci beaucoup

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Rejoignez-nous