begin process at 2012 05 30 09:38:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

Simple Hook (DLL) qui plante GetMessage ! Je suis nul ou quoi ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Simple Hook (DLL) qui plante GetMessage ! Je suis nul ou quoi ?

vendredi 13 novembre 2009 à 15:54:24 | Simple Hook (DLL) qui plante GetMessage ! Je suis nul ou quoi ?

dam1dam1

Bonjour.

Je ne suis pas un pro du Hook et j’ai un peu oublié tout ca, mais vu toutes les bonnes sources et annotations qui trônent ici, je pensais pouvoir m’y remettre m’en sortir seul; et bien non !

J’essaie de faire un Hook sur une window (ou toutes…) pour récurer quelques messages.
J’ai fait un simple essai (exe console Win32 plus DLL win32). J’ai essayé avec ou sans thread, création du hook dans exe ou dll, en debug et release…
(Merci à tous les auteurs, sources des mes sources.)
C’est probablement tout con, mais j’ai besoin d’aide. Merci.

Quand j’utilise WH_KEYBOARD_LL ou WH_KEYBOARD, je rentre bien dans mon hook mais ca fini par planter dans ma fonction MsgLoop, au niveau du GetMessage :
Exception de première chance à 0x00a1febe dans TstHookExe.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x41163000.
Je précise que 0x41163000 ne correspond pas a mes fonctions (me semble t-il !)


Quand j’utilise WH_GETMESSAGE ou WH_CBT ca ne plante pas, mais ca ne passe pas dans le hook !!
Rien ne sort du GetMessage. GRRrrrr !

Merci tout plein ! (même si je vais me prendre une gamelle de débutant…)



Voici donc les sources:
(J'aurai bien voulu mettre le zip de tout le (petit) projet, mais c'est contraire à la charte de deposé des source qui ne marche pas...)


L'EXE (projet console win32 MVS2005, C++):

#include "stdafx.h"

#define _WIN32_WINNT 0x0501
#include <windows.h>


typedef LRESULT (* typHookWnd) (int nCode, WPARAM wParam, LPARAM lParam);
typHookWnd HookWnd;


void MsgLoop()
{
MSG message;
BOOL bRet = FALSE;
int ii=0;
while(TRUE)
{
bRet = GetMessage(&message, NULL, 0, 0);
printf("runing %d\n", ii++);
if (!bRet)
{
printf ("Quit\n");
break;
}
else if (bRet == -1)
{
printf ("Erreur boucle des messages: %d\n", GetLastError());
}
else
{
TranslateMessage(&message);
DispatchMessage(&message);
}
}
}



DWORD WINAPI theThread(LPVOID lpParameter)
{
HMODULE hMod = LoadLibraryA("tstHookDll");
if (!hMod)
{
printf ("Erreur charement dll: %d\n", GetLastError());
return 0;
}

HookWnd = (typHookWnd) GetProcAddress(hMod,(LPCSTR)1); // par ordinal, c'est plus rapide et plus simple (les nons sont decorés)

if (!HookWnd)
{
printf("Fonction HookWnd non trouvée dans la Dll, Erreur: %d", GetLastError());
FreeLibrary(hMod);
return 0;
}

HHOOK hhkWnd = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)HookWnd, hMod, 0);
if (!hhkWnd) printf("erreur creation Hook windows: %d\n", GetLastError());

MsgLoop();

BOOL bb = UnhookWindowsHookEx(hhkWnd);
if(!bb) printf("erreur liberation Hook windows: %d\n", GetLastError());

FreeLibrary(hMod);
printf("fin\n");
return 0;
}



int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread;
DWORD dwThread;

printf("debut\n");

// on crée le thread qui va démarrer le hook
hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE) theThread, (LPVOID)NULL, NULL, &dwThread);
if (hThread)
{
/*
Sleep(5000);
printf("test\n");
HookWnd(-1234, 0,0); //test d'appel
*/
return WaitForSingleObject(hThread,INFINITE);
}
else
{
printf("Erreur de creation du thread: %d", GetLastError());
return 0;
}

return 0;
}



LA DLL (projet DLL win32 MVS2005, C++):

#include "stdafx.h"
#include <stdio.h>


HMODULE g_hModule;
HHOOK g_hhkWnd;


__declspec(dllexport) LRESULT HookWnd(int nCode, WPARAM wParam, LPARAM lParam)
{
printf ("in HookWnd !!\n");
if (nCode==-1234) {printf("bidon\n"); return 0;}

// if (nCode <0 || nCode != HC_ACTION)
return CallNextHookEx(NULL, nCode, wParam, lParam);

printf ("todo !!\n");
return CallNextHookEx(NULL, nCode, wParam, lParam);
}


/*
#ifdef _MANAGED
#pragma managed(push, off)
#endif
*/

BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
// case DLL_THREAD_ATTACH:
g_hModule = hModule;
// g_hhkWnd = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)HookWnd, g_hModule, 0);
// if (!g_hhkWnd) printf("erreur creation Hook windows: %d\n", GetLastError());
break;

// case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
// BOOL bb = UnhookWindowsHookEx(g_hhkWnd);
// if(!bb) printf("erreur fin Hook windows: %d\n", GetLastError());
g_hhkWnd = 0;
break;
}
return TRUE;
}

/*
#ifdef _MANAGED
#pragma managed(pop)
#endif
*/





Cette discussion est classée dans : dll, printf, return, hook, if


Répondre à ce message

Sujets en rapport avec ce message

Table de hachage avec patronyme [ par guitoontruant ] Bonjour, Désolé, j'avais d'abord poster dans les discussions libres.Voilà je dois créer une table de hashage de patronymes par le biais de N entrées, Probème avec un hook [ par Chayy ] Bonjour,je rencontre actuellement un petit soucis avec un hook. J'essaye de poser un hook souris, et d'effectuer un traitement lorsque le pointeur de RFID skyetek developer kit [ par chibi59 ] Salut à tous,J'ai un projet à mener pour mes études il sagit de déveloper une aplication en C++ capable de se connecter à un lecteur RFID de lire des Problème compréhension du programme le compte est bon [ par echec ] Bonjour,Je cherchai un programme c++ sur internet qui permettait de calculer la solution du jeu le compte est bon, j'en est finalement trouvé un, mais Pb Hook.... [ par Mr_Coinche ] Bonjour,J'ai crée une dll très simple appelée "DllMaths.dll", qui contient deux fonctions, "carre" et "cube", je vous laisse deviner ce que ces foncti Problème hooking [ par Albanderuaz ] Bonjour !Alors voilà j'ai un petit problème lors de l'installation d'un hook pour faire du subclassing. J'injecte un DLL dans un processus et il doit tableau [ par ngabou98 ] bonjour à tous c'est encore moi svp j'ai besoin de votre aide je travaille sur la méthode de simplification d'une fonction booléene par la méthode de Probleme avec select [ par Phoenix2025 ] Bonjour, Je viens à vous car j'ai un problème avec un code où j'ai incorporer la fonction "select". Mon problème est que je suis bloqué à cette derni Probleme : Sudoku en C [ par seth59222 ] Bonsoir, voila je suis actuellement en première année d'info, donc assez novice et je viens de créer ce petit bout de programme en C qui consiste a ré besoin d'aide sur communication [ par keast ] salut tout le monde, Voila je suis vraiment nul en info et j'ai un problème en ce moment sur un projet. Je dois piloté un appareil qui celui-ci fonct


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,576 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales