cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 2013
-
3 juin 2008 à 17:48
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
4 juin 2008 à 11:48
Bonjour à tous
Voila, je me suis fabriqué une DLL standard non activeX avec un autre language que VB.
Dans cette derniere, j'ai mis une protection dans l'AttachProcess afin de verifier si le logiciel qui l'appelle est autorisé à le faire.
Donc si la condition n'est pas bonne la DLL refuse de s'ouvrir.
Cela marche bien, seulement VB me retourne un message d'erreur 48 "Fichier non trouvé : MaDll.dll" et je n'arrive pas à l'empecher.
I doit croire, je pense qu'elle n'existe pas, alors que si j'enleve la protection de la DLL, cela fonctionne tres bien, donc ce n'est pas une erreur de chemin.
Si j'appelle la DLL avec un autre language pas d'erreur non plus.
Les "on error", ne fonctionne apparement pas pour les DLL
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 3 juin 2008 à 18:24
Le plus simple reste sans doute de passer les arguments adéquats (dont celui concernant le programme d'appel des(ou de la) fonction(s) de ta dll et de faire retourner une valeur (par la/les fonction(s) appelées) telle qu'elle serait sans effet dans le progr mme d'appel non autorisé (pas d'autres valeurs attendues retournées).
C'est donc ta dll qu'il est préférable de modifier, plutôt que le programme l'appelant ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 3 juin 2008 à 18:39
Merci de ta reponse jmfmarques.
J'avais utilisé cette methode pour eviter de mettre une condition par function dans la DLL.
Car si il y a 50 fonctions, ça fait 150 lignes supplementaires.
Je trouvais plus judicieux de tester au chargement de la DLL, si elle devait ou non pouvoir etre utilisée, plutot qu'aller dans chacune des fonctions pour faire le test.
En plus cela fait une condition de plus qui sera testée pour rien, lorsque les fonctions vont s'appeller entre elles dans la DLL.
En fait, je passe tous les parametres correctement à la DLL.
Mais dans l'AttacheProcess je vais tester dans un fichier externe, si le nom de l'appli qui l'appelle est bien répertorié dans la liste, si non, je stoppe le chargement de la librairie.
Et VB prend ça comme si elle n'existait pas, ce n'est pas parce que elle ne veux pas se charger, qu'elle n'existe pas ..
C'est quand meme dingue qu'on ne puisse pas gerer les erreurs de librairie ...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 3 juin 2008 à 18:46
Ajoute alors une fonction (une seule) de contrôle dans ta dll
Il te suffira ensuite d'une seule courte ligne au début de toutes les autres fonction, genre :
if toto(monprogrammeappelant) = 0 then ...où toto est le nom de la fonction de vérification et retourne 0 si programme non accepté.
Et si 0 ===>> ouste ==>> 0 retourné à l'appelant.
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 3 juin 2008 à 18:51
Oui, cette solution c'etait celle que j'avais adopté avant de decouvrir cette fonction AttachProcess.
Si personne ne trouve mieux, bah je resterais sur celle la.
Je te remercie beaucoup de ton aide.
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 4 juin 2008 à 10:14
Un petit bemol !!!
J'ai l'impression que LoadLibrary fait 2 tentatives pour entrer dans la DLL ??
Car j'ai mis un petit code ASM que l'on m'a donné dans l'AttachProcess de la DLL, qui permet de remettre à ce que j'ai compris le pointeur à l'entrée de la DLL, ça equivaut à un refus d'entrer.
!ADD esp, 8 ; remove Instance variable and return address from stack
!MOV eax, 0 ; set returnvalue to 0
!RET 12 ; return from DllEntryPoint
Sait tu si y'a moyen d'empecher ça ????
Est ce bien un double essai ????
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 4 juin 2008 à 11:45
Encore merci grand RENFIELD.
Mon empire pour 10 % de ton savoir ..........
Entretemps, j'ai trouvé l'erreur.
En fait, pour te faciliter la tache, je me suis dit, je vais mettre en lien un ZIP avec dedans ma DLL et le code de trois ligne qui gazouille pas.
Et en creant tout ça, eh ben plus d'erreur
Alors, j'ai continué a chercher et je me suis rendu compte que comme j'avais ecris à deux reprises le code ASM magique pour deux conditions differentes, l'une pour tester si la clef existait dans le repertoire et l'autre pour verifier si le logiciel etait autorisé.
Eh bien, je pense que ma DLL avait du mal a le digérer.
L'ASM c'est tellement puissant qu'il faut respecter les doses
Alors apparement, ce code il faut le mettre qu'une fois et s'arranger pour faire les deux conditions autour d'un seul.
Bon aux dernieres nouvelles tout marche, grace à toi, je m'en suis sorti pour la partie VB.
Je vais quand meme aller jeter un oeil sur les liens que tu m'as donné.
Les DLL c'est vraiment passionnant
Merci à tous
Jamais je ne pourrais assez vous remercier
Je vous souhaite une excelente journée