[résolu] Hook win32 voulu global...

Hook win32 voulu global... [résolu] - C - Programmation

Marsh Posté le 01-11-2006 à 03:06:17    

Salut,
 
J'aimerais utiliser un hook global empêchant l'exécution d'un set arbitraire d'application. J'utilise pour ça un hook CBT qui intercepte la création de fenêtre.
Bien que ce ne soit peut-être pas la meilleure façon de faire, elle devrait marcher pour des applis utilisant donc des fenêtres.
 
Le pépin est que j'arrive à poser le hook, mais il n'est actif qu'au niveau du process initiateur :(
J'ai épluché un paquet de pages et d'exemples, donc j'imagine que je dois rater quelque chose; c'est pas possible autrement :sweat:  
 
Voici le code de la dll en question:

Code :
  1. #include "libblockapp.h"
  2. HINSTANCE g_hCurrentModule = NULL;
  3. // Pour le bloc suivant, j'ai vu (et testé) les 2 façons:
  4. // - sans utiliser la mémoire partagée
  5. // - et avec
  6. #pragma data_seg(".AppBlck" )
  7. HHOOK hHook = NULL;
  8. #pragma data_seg()
  9. #pragma comment(linker, "/section:.AppBlck,rws" )
  10. LRESULT CALLBACK CBTProc(int nCode,
  11.       WPARAM wParam,
  12.       LPARAM lParam)
  13. {
  14. if(nCode < 0)
  15.  return CallNextHookEx(hHook, nCode, wParam, lParam);
  16. TCHAR currentProcessName[MAX_PATH];
  17. if(nCode == HCBT_CREATEWND)
  18. {
  19.  if(GetModuleFileName(0, currentProcessName, sizeof(currentProcessName)))
  20.  {
  21.   if(lstrcmpi(currentProcessName, TEXT("firefox.exe" )) == 0)
  22.   {
  23.    ExitProcess(1);
  24.   }
  25.  }
  26. }
  27. return CallNextHookEx(hHook, nCode, wParam, lParam);
  28. }
  29. DllExport bool enableBlockAppHook()
  30. {
  31. hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTProc, g_hCurrentModule, 0);
  32. if(hHook == NULL)
  33.  return false;
  34. return true;
  35. }
  36. DllExport bool disableBlockAppHook()
  37. {
  38. if(!hHook)
  39.  return true;
  40. return (UnhookWindowsHookEx(hHook) != 0);
  41. }
  42. BOOL APIENTRY DllMain(HANDLE hInst,
  43.       DWORD ulReasonForCall,
  44.       LPVOID lpReserved)
  45. {
  46. (void)lpReserved;
  47. if(ulReasonForCall == DLL_PROCESS_ATTACH)
  48.  g_hCurrentModule = (HINSTANCE)hInst;
  49. else if(ulReasonForCall == DLL_PROCESS_DETACH)
  50.  disableBlockAppHook();
  51. return TRUE;
  52. }

 
 
Quelqu'un aurait-il une piste svp?
 
PS: faîtes pas gaffe à la comparaison des noms d'applications hein :whistle:


Message édité par IrmatDen le 01-11-2006 à 15:18:05

---------------
.
Reply

Marsh Posté le 01-11-2006 à 03:06:17   

Reply

Marsh Posté le 01-11-2006 à 15:17:49    

Quand on dis qu'une bonne nuit de sommeil résout certains problèmes...
Surtout lorsqu'ils n'existent pas.
 
Pour vérifier, je me contentais de debugger la dll en lançant un debug sur mon appli appellante. Même après avoir lu 5 ou 6 pages sur les mémoires partagées et non partagées, il ne m'est pas venu à l'esprit que je debuggais *mon* instance de la dll [:barthaliastoxik]  
 
Désolé pour le bruit
[:neowen]
 
Edit: et pour défaire le hook proprement, il semblerait qu'il ne faille pas le mettre en partage...


Message édité par IrmatDen le 01-11-2006 à 15:36:35

---------------
.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed