Instance

victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
- 4 févr. 2006 à 18:20
victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
- 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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
4 févr. 2006 à 19:00
0
victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
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