Instance

victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 - 4 févr. 2006 à 18:20
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 - 5 févr. 2006 à 09:44
Bonjour,

J'ai un programme avec une dll.



Sous dev-c++ en compilant la dll comme du C++ la fonction DllMain n'est pas appellée.

Je l'appelle donc avec LoadLibrary et je lui transmet son handle pour pouvoir hooker.



Jusque là pas de problème.



J'ajoute des sockets qui sont lancés par la même fonction que celle qui a donné au hook son instance.

Les sockets fonctionnent normalement.



Là est la chose bizarre c'est que si la fonction d'envoie des données
est executé par le hook il dit que WSAStartup n'as pas été appellé et
si c'est par la fameuse fonction de départ ça marche sans problème
(même si c'est fait simultanément !).



Je pense à un problème d'instance. N'y a-t-il pas moyen de changer la
fonction d'instance qui appelle pour avoir la même instance pour les
sockets et le hook ?



Précision : Les variables sockets sont des variables définies hors accolades et donc globales !



Ca peut venir d'autre chose mais si vous avez une solution je suis preneur.



Je vous remerci de m'avoir lu jusqu'au bout et espère une response !


Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com

20 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 févr. 2006 à 18:34
Une variable globale n'est pas valide pour une fonction de hook car il y a une copie de la dll dans différents processus.
Faut placer tes variables en section Shared. Si ce sont des socket encore faudra-t-il une initialisation WSAStartup dans chaque processus où le hook entre.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
4 févr. 2006 à 18:39
Bonjour,

Il n'y a qu'un seul processus (juste 1 exe qui load une dll).



Comment on fait pour mettre en partagé ? (les pragma fonctionnent pas sous dev-cpp)


Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
4 févr. 2006 à 18:55
CreateFileMapping

MapViewOfFile

if(!Meilleur("Joky")) return ERREUR;<
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
4 févr. 2006 à 18:56
Bonjour,


Autre indication c'set la même fonction qui appellé pour envoyer les
donnés c'est à dire que le hook fait appelle à une fonction la même que
la fonction principale et qui elle fera appel au socket.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
4 févr. 2006 à 18:58
Bonjour,


Comment on l'utilise le FileMapping ?

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 févr. 2006 à 19:00
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
4 févr. 2006 à 19:18
Bonjour,

J'avais vu cette source mais je la comprends pas.



Schéma de la situation :



EXECUTION PROG :

- Chargement DLL et récupération du handle

- Appelle d'un fonction de la dll en lui passant le handle

FIN DU PROG



DANS DLL :

- Connexion avec client avec envoie de donnée (réussi)

- Lancement du hook



DANS HOOK :

- Envoi des données du hook (echoue)




Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
4 févr. 2006 à 19:19
Bonjour,


Le programme ne contient que WinMain sans fenêtre et n'appelle qu'une
fonction (la principale de la DLL) et c'est cette fonction (dans la
DLL) qui fait le reste.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 févr. 2006 à 19:34
Envoi des données du hook, tu es dans hook donc dans des processus différents.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
4 févr. 2006 à 21:19
Bonjour,


Ok mais y a pas moyen d'initialiser une seule fois les sockets pour la dll en spécifiant son handle.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 févr. 2006 à 21:29
M'étonnerait qu'un socket soit valable inter processus.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
4 févr. 2006 à 21:34
Bonjour,


Non le hook appelle la fonction de la dll qui elle appelle le socket.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 févr. 2006 à 21:43
Mais le hook n'est pas dans "la dll qui elle appelle le socket" ???
Si oui tout ceci est bien dans des espaces mémoires différents selon les événements et donc un socket initialisé dans un processus est utilisé dans un autre, pas viable.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
4 févr. 2006 à 21:48
Bonjour,

Il a été créé dans la dll qui appelle le socket.


Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
4 févr. 2006 à 21:53
Bonjour,


Quel est la solution pour centraliser sans mettre de fenetre ?



J'en vois deux :

- Une variable temporaire et un truc qui tourne en boucle et la vérifie

- Un système de message mais sans fenêtre

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 févr. 2006 à 21:54
Une copie de la dll est placée dans chaque processus hooké.
Donc dans quel processus est la dll quand appelée ?!?!?!

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
4 févr. 2006 à 22:09
Bonjour,


J'ai pas tout saisi mais je dirais dans celui du programme qui l'appelle au départ (celui qui est lancé)

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
5 févr. 2006 à 08:22
Bonjour,


Oui la dll est chargée par le programme principal qui fait appel au hook indirectement.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
5 févr. 2006 à 09:14
Bonjour,


Je viens de vérifier avec une source et j'ai vu que la DLL se chargeait
dans chaque processus mais seulement quand j'appuyais sur une touche et
restait chargée.



Suivant les processus il me dit socket non initialisé et sur Firefox "operation socket on non socket".



Je sais pas comment marche un envoi de message sans fenêtre. Quelqu'un pourrait m'expliquer ?

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
5 févr. 2006 à 09:44
Bonjour,


Ou alors comment appeller une fonction en inter-processus ?

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
Rejoignez-nous