IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

[Hook] Thread Invalide


Sujet :

Threads & Processus C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 7
    Points
    7
    Par défaut [Hook] Thread Invalide
    Bonjour, voilà, je fais un système de hook et c'est la première fois que c'est pas global, donc j'ai quelques problèmes.

    Ce que j'essaie de hooké en question, c'est une projection Adobe Flash.

    Voilà le code du loader :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #include <windows.h>
     
    int main(int argc, char *argv[])
    {
        HWND w = FindWindowA("ShockwaveFlash", NULL);
        SetWindowTextA(w, "Game [init]");
     
        DWORD tid;
        GetWindowThreadProcessId(w, &tid);
     
        HINSTANCE dll = LoadLibraryA("gamehook.dll");
        FARPROC hookproc = GetProcAddress(dll, "_Z6hookerijl@12");
        HHOOK hKeyHook = SetWindowsHookExA(WH_CALLWNDPROC, (HOOKPROC)hookproc, dll, tid);
        if(hKeyHook == NULL)
        {
            LPSTR lpMsgBuf;
            FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL);
     
            MessageBoxA(NULL, lpMsgBuf, "Error", MB_ICONERROR | MB_OK);
        }
        while(hKeyHook != INVALID_HANDLE_VALUE && w != NULL)
        {
            Sleep(1000);
        }
        UnhookWindowsHookEx(hKeyHook);
     
        return 0;
    }
    voilà le header de ma DLL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifndef __DFM_H__
    #define __DFM_H__
     
    #define IDC_ABOUT 30001
     
    #include <windows.h>
     
    __declspec(dllexport) LRESULT CALLBACK hooker(int nCode, WPARAM _wParam, LPARAM _lParam);
     
    #endif
    Et enfin, le code source de ma DLL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include "main.h"
     
    __declspec(dllexport) LRESULT CALLBACK hooker(int nCode, WPARAM _wParam, LPARAM _lParam)
    {
        if (nCode == HC_ACTION)
        {
            CWPSTRUCT hooked =  *((CWPSTRUCT*)_lParam);
            HWND hwin = hooked.hwnd;
            UINT uMsg = hooked.message;
            WPARAM wParam = hooked.wParam;
            LPARAM lParam = hooked.lParam;
            MessageBoxA(hwin, "ça marche !", "Test", MB_OK | MB_ICONINFORMATION);
        }
        return CallNextHookEx(NULL, nCode, _wParam, _lParam);
    }
    Donc si ça marche, une MessageBox s'affiche.

    Or, il y a un problème, GetLastError() égal à ERROR_INVALID_PARAMETER, donc apparament l'ID du thread est invalide.

    Je ne vois pas le problème, pouvez-vous m'aider ?

    Cordialement, Iron.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Un truc que tu devrais faire en attendant, c'est déclarer ta fonction de hook en extern "C", histoire d'avoir un nom qui ne dépende pas du compilo (elle s'appellera forcément _hooker@12 sous Win32).

    Le SetWindowText(), marche-t-il correctement?

    PS: Tu oublies le LocalFree(lpMsgBuf), le flag FORMAT_MESSAGE_IGNORE_INSERTS, et le A de FormatMessageA.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Salut .

    J'ai suivi tes conseils, et j'arrive au même résultat, de plus, le titre de la fenêtre change bien, et j'ai beau débuggé, le seul problème vient de SetWindowsHookEx.



    Peut-être que je n'ai pas les permissions pour le thread ?

    Cordialement, Iron.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Es-tu sûr que c'est bien l'id de thread qui est invalide?

    Notamment, vérifie que dll et hookproc sont valides.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    D'après OllyDebugger, il n'y a pas de problème sur ce niveau là .

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Up, toujours pas trouvé :s

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/03/2015, 09h56
  2. Thread : Invalid value for shared scalar
    Par ITCsoft54 dans le forum Langage
    Réponses: 3
    Dernier message: 02/03/2010, 11h46
  3. [MyEclipse] Pb "Invalid thread access"
    Par ibtissame_87 dans le forum Eclipse
    Réponses: 1
    Dernier message: 06/01/2010, 23h46
  4. Invalid thread access au démarrage d'Eclipse
    Par raz2008 dans le forum Eclipse
    Réponses: 1
    Dernier message: 26/09/2009, 15h56
  5. [VB.NET]Erreur "invalid cross-thread operation"
    Par NicolasJolet dans le forum Windows Forms
    Réponses: 6
    Dernier message: 05/04/2006, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo