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

Windows Discussion :

Hooking : intercepter les appels de fonction


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut Hooking : intercepter les appels de fonction
    Bonjour,
    dans le cadre de la réalisation d'un mini-antivirus, je chercherais à mettre en place un programme capable de mettre en place un hook pour détecter les appels de fonctions de façon globale afin de bloquer des programmes ayant un comportement suspect.
    Par exemple j'ai un programme malware.exe qui appelle les fonctions CopyFile, DeleteFile et RegCreateKey, toutes ces fonctions passeront par l'antivirus qui décidera si il faut bloquer l'application ou pas.
    Le "minimum" serait pour moi que je réussisse a faire un programme qui m'affiche "notepad.exe à appelé la foncton CreateFile."
    Ainsi, pouvez vous me dire comment m'y prendre ? Ou je pourrais-je trouver des informations ?
    J'ai essayé de chercher du côté du hooking, mais je ne vois pas comment réaliser ce que je cherche à faire. Toute aide ou conseil sera bienvenu.
    Merci.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par The Lord of Nesquik
    Ou je pourrais-je trouver des informations ?
    Euh... Sur l'interweb ?

    PS : attention, c'est peut-être breveté par Intel ce que tu veux faire...
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par David.Schris
    PS : attention, c'est peut-être breveté par Intel ce que tu veux faire...

    Je ne vois pas ce que Intel vient faire là-dedans ...
    et si sur ma carte mêre j'ai un CPU AMD ?
    C'est l'OS qui te permet de bidouiller pas le CPU

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par The Lord of Nesquik
    Par exemple j'ai un programme malware.exe qui appelle les fonctions CopyFile, DeleteFile et RegCreateKey, toutes ces fonctions passeront par l'antivirus qui décidera si il faut bloquer l'application ou pas.
    Le "minimum" serait pour moi que je réussisse a faire un programme qui m'affiche "notepad.exe à appelé la foncton CreateFile."
    Regarder ici
    http://www.codeproject.com/system/hooksys.asp

    http://www.codeproject.com/dll/#Hooks
    http://www.codeproject.com/dll/apihijack.asp
    http://www.codeproject.com/dll/Win32...ng_Trouble.asp

    Pour controler l'interception des API des dll tu seras obligé peut-être d'écrire un Device Driver

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    merci Mat.M.
    J'ai essayé de hooker la fonction LoadIcon dans notepad pour afficher dans le 'about' une icone personnalisée.
    Pour cela, j'injecte une dll dans notepad contenant le code suivant :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    #include <windows.h>
    #include <string.h>
    
    #define MakePtr(cast, ptr, addValue)(cast)((DWORD)(ptr)+(DWORD)(addValue))
    
    DWORD GetModuleBaseFromWin32sHMod(HMODULE hMod); // Prototype(defined below)
    
    PROC WINAPI HookImportedFunction(
            HMODULE hFromModule,        // Module to intercept calls from
            PSTR    pszFunctionModule,  // Module to intercept calls to
            PSTR    pszFunctionName,    // Function to intercept calls to
            PROC    pfnNewProc          // New function(replaces old function)
           )
    {
        PROC pfnOriginalProc;
        PIMAGE_DOS_HEADER pDosHeader;
        PIMAGE_NT_HEADERS pNTHeader;
        PIMAGE_IMPORT_DESCRIPTOR pImportDesc;
        PIMAGE_THUNK_DATA pThunk;
    	BOOL B;
    	DWORD dwOld, dw;
    //	DWORD *pdw1;
    
        if(IsBadCodePtr(pfnNewProc)) // Verify that a valid pfn was passed
            return 0;
        
        // First, verify the the module and function names passed to use are valid
        pfnOriginalProc = GetProcAddress(GetModuleHandle(pszFunctionModule),
                                          pszFunctionName);
    
    /*	pdw1 =(DWORD*)pfnOriginalProc;
    	pfnOriginalProc =(PROC)*pdw1;*/
    
        if(!pfnOriginalProc)
            return 0;
        
        if((GetVersion() & 0xC0000000) == 0x80000000)
            pDosHeader =                                            // Win32s
               (PIMAGE_DOS_HEADER)GetModuleBaseFromWin32sHMod(hFromModule);
        else
            pDosHeader =(PIMAGE_DOS_HEADER)hFromModule;            // other
    
        // Tests to make sure we're looking at a module image(the 'MZ' header)
        if(IsBadReadPtr(pDosHeader, sizeof(IMAGE_DOS_HEADER)))
            return 0;
        if(pDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
            return 0;
    
        // The MZ header has a pointer to the PE header
        pNTHeader = MakePtr(PIMAGE_NT_HEADERS, pDosHeader, pDosHeader->e_lfanew);
    
        // More tests to make sure we're looking at a "PE" image
        if(IsBadReadPtr(pNTHeader, sizeof(IMAGE_NT_HEADERS)))
            return 0;
        if(pNTHeader->Signature != IMAGE_NT_SIGNATURE)
            return 0;
    
        // We know have a valid pointer to the module's PE header.  Now go
        // get a pointer to its imports section
        pImportDesc = MakePtr(PIMAGE_IMPORT_DESCRIPTOR, pDosHeader, 
                                pNTHeader->OptionalHeader.
                                DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].
                                VirtualAddress);
                            
        // Bail out if the RVA of the imports section is 0(it doesn't exist)
        if(pImportDesc == (PIMAGE_IMPORT_DESCRIPTOR) pNTHeader)
            return 0;
    
        // Iterate through the array of imported module descriptors, looking
        // for the module whose name matches the pszFunctionModule parameter
        while(pImportDesc->Name)
        {
            PSTR pszModName = MakePtr(PSTR, pDosHeader, pImportDesc->Name);
            
            if(stricmp(pszModName, pszFunctionModule) == 0)
                break;
    
            pImportDesc++;  // Advance to next imported module descriptor
        }
        
        // Bail out if we didn't find the import module descriptor for the
        // specified module.  pImportDesc->Name will be non-zero if we found it.
        if(pImportDesc->Name == 0)
            return 0;
    
        // Get a pointer to the found module's import address table(IAT)
        pThunk = MakePtr(PIMAGE_THUNK_DATA, pDosHeader, pImportDesc->FirstThunk);
    
        // Blast through the table of import addresses, looking for the one
        // that matches the address we got back from GetProcAddress above.
        
    	while(pThunk->u1.Function)
        {
    		if((DWORD)pThunk->u1.Function == (DWORD)pfnOriginalProc)
            {
                // We found it!  Overwrite the original address with the
                // address of the interception function.  Return the original
                // address to the caller so that they can chain on to it.
                
    			//Problem persists in winXP... Not required in win98..
    			//DLL will simply unload if an unalowed byte was modified.
    			if(IsBadWritePtr(&pThunk->u1.Function, 4))
    			{
    				B = VirtualProtect(&pThunk->u1.Function, 4, 
    					PAGE_EXECUTE_READWRITE, &dwOld);
    				pThunk->u1.Function =(DWORD)pfnNewProc;
    
    				B = VirtualProtect(&pThunk->u1.Function, 4, 
    					dwOld, &dw);
    			}else
    				pThunk->u1.Function = (DWORD)pfnNewProc;            			
    
    			//pfnOriginalProc =(PROC)(DWORD)pdw1;
                return pfnOriginalProc;
            }
            
            pThunk++;   // Advance to next imported function address
        }
        
        return 0;   // Function not found
    }
    
    typedef DWORD(__stdcall *XPROC) (DWORD);
    
    // Converts an HMODULE under Win32s to a base address in memory
    DWORD GetModuleBaseFromWin32sHMod(HMODULE hMod)
    {
        XPROC ImteFromHModule, BaseAddrFromImte;
        HMODULE hModule;
        DWORD imte;
        
        hModule = GetModuleHandle("W32SKRNL.DLL");
        if(!hModule)
            return 0;
        
        ImteFromHModule =(XPROC)GetProcAddress(hModule, "_ImteFromHModule@4");
        if(!ImteFromHModule)
            return 0;
        
        BaseAddrFromImte =(XPROC)GetProcAddress(hModule, "_BaseAddrFromImte@4");
        if(!BaseAddrFromImte)
            return 0;
    
        imte = ImteFromHModule((DWORD)hMod);
        if(!imte)
            return 0;
        
        return BaseAddrFromImte(imte);
    }
    
    typedef int(WINAPI *LOADICONPROC) (HINSTANCE, LPCTSTR);
    LOADICONPROC OriginalProc;
    
    int WINAPI LoadIconH(HINSTANCE hInstance, LPCTSTR lpIconName)
    {
    	int ret;
    	
    	ret = OriginalProc(hInstance, "MYICON");
    	MessageBox(0, "LoadIcon called", "Hook", 0);
    
    	return ret;
    }
    
    DWORD WINAPI ThreadProc(LPVOID thParam)
    {
        OriginalProc = (LOADICONPROC)
        HookImportedFunction(GetModuleHandle(0), "USER32.DLL", "LoadIconW",(PROC)LoadIconH);
        
        if(!OriginalProc)
        {
            MessageBox(0, "Hook failed", "ERROR", 0);
            return FALSE;
        }
    }
    
    BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD reason, LPVOID lpReserved)
    {
        HANDLE hThr;
        
        if(reason != DLL_PROCESS_ATTACH) return FALSE;
        
        hThr = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ThreadProc, NULL, 0, NULL);
        if(hThr == NULL) return FALSE;
        else CloseHandle(hThr);
        return TRUE;
    }
    Une fois la dll injectée, j'ai bien une msg box m'indiquant que la fonction LoadIcon est appelée, mais ca n'affiche pas l'icone désirée (aucune en fait).
    merci.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Février 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut compagnon
    Bonsoir à tous,

    Veuillez m'excuser si je me trompe d'endroit, mais il se trouve que je suis perdue il y a une vingtaire de jours, en cherchant une solution ou à la rigeur un bout de fil directif.

    Voilà on m'a chargée de faire un help pour application conçue sous access 2003, j'ai souffert avant d'y arriver (je ne suis pas informaticienne), mais je me suis débrouillée quand même et trouvé un logiciel "helpNdoc". Cela m'a vraiment aidé à faire un help acceptable (chm). Mon supérieur est à moitié satisfait du résultat et me demande plus, faire UN COMPAGNON pour cette application (Type compagnon office), afin de diriger l'utilisateur vers Notre base de connaissance (fichier chm que j'ai fait).

    Si vous pouviez me repérer en me donnant quelques noms de logiciels ou sites exipliquant la méthode "comment faire".

    Je vous remercie infiniment et d'avance pour vos aides (skfor@yahoo.fr)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    bonsoir,
    merci de déplacer.

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par The Lord of Nesquik
    [...]
    Une fois la dll injectée, j'ai bien une msg box m'indiquant que la fonction LoadIcon est appelée, mais ca n'affiche pas l'icone désirée (aucune en fait).
    merci.
    Et l'icône "MYICON" existe-t-elle dans les ressources de l'exécutable de Notepad ? (tu l'y as ajoutée ?)
    Si elle existe, ne devrais-tu pas plutôt écrire ? (la fonction détournée est LoadIconW(), non ?)

    Sinon, tu pourrais vérifier le résultat de l'appel de la fonction originale et afficher ce que renvoie GetLastError() si l'originale a renvoyé NULL.
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  9. #9
    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
    En effet, la fonction détournée est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WINUSERAPI
    HICON
    WINAPI
    LoadIconW(
        __in_opt HINSTANCE hInstance,
        __in LPCWSTR lpIconName);
    Ce qui donne en clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HICON WINAPI LoadIconW(HINSTANCE hInstance, LPCWSTR lpIconName);
    Ton code doit donc être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef HICON (WINAPI *LOADICONPROC) (HINSTANCE, LPCWSTR);
    LOADICONPROC OriginalProc;
    
    HICON WINAPI LoadIconH(HINSTANCE hInstance, LPCWSTR lpIconName)
    {
    	HICON ret;
    	
    	ret = OriginalProc(hInstance, L"MYICON");
    	MessageBox(0, TEXT("LoadIcon called"), TEXT("Hook"), 0);
    
    	return ret;
    }
    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.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    merci à vous deux, mais ca ne marche toujours pas...
    MYICON est bien inclue dans la dll injectée, mais même avec les modifs de Médinoc, notepad n'affiche toujours aucune icone.
    Vous avez encore une idée d'ou le bug pourrait venir ?
    Encore merci pour votre aide.

    EDIT :
    Et l'icône "MYICON" existe-t-elle dans les ressources de l'exécutable de Notepad ? (tu l'y as ajoutée ?)
    En fait MYICON n'est pas dans les ressources de notepad mais dans la dll injectée.
    D'ailleurs, je viens de me poser une question : j'avais déjà eus un problème avec une dll injectée qui appelait la fonction CopyFile. Le problème, c'est que ce n'est pas la dll qui se copiait, mais l'exécutable injecté.
    Il s'agit peut être du même problème. LoadResource cherche l'icone dans l'exe injecté, alors qu'elle se trouve dans la dll.
    Je file faire un test !

  11. #11
    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
    Je pense que le HINSTANCE passé à OriginalProc doit être celui de ta DLL, et non celui passé en paramètre par Notepad.
    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.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    yessss ca marche !
    j'ai juste fait une copie du hModule passé à la dll dans une variable gobale, que j'utilise ensuite pour charger l'icone. Et ca marche impec !
    Merci * 10^1000. Sans vous j'y serais pas arrivé.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    désolé de déterrer ce topic (20 sujets pars dessus depuis hier !), mais j'ai encore 3 petites minis questions (après j'arrète, promis !) :
    - Quelle est la différence entre le hooking et l'hijacking ? Dans les deux cas,il 'agit d'un détournement de fonction non ?

    - Quelle est la difference entre LoadIcon, LoadIconW et LoadIconA ?
    Et médinoc, où as tu trouvé le prototype de la fonction LoadIconW ? (pour qu'a l'avenir, je ne me gourre plus dans les paramètres et types de fonctions)

    - Enfin, serait-il possible de faire communiquer ma dll injectée avec un autre programme (l'antivirus/injecteur par exemple) ?
    J'ai déjà vu un programma faisant ca, mais je n'ai aucune idée de comment ca marche et comment l'imitter.

    Re re merci. Après ca, je pourrais mourrir en paix.

  14. #14
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par The Lord of Nesquik
    désolé de déterrer ce topic (20 sujets pars dessus depuis hier !), mais j'ai encore 3 petites minis questions (après j'arrète, promis !) :
    - Quelle est la différence entre le hooking et l'hijacking ? Dans les deux cas,il 'agit d'un détournement de fonction non ?
    Ce que tu fais, c'est de l'IAT patching

    Citation Envoyé par The Lord of Nesquik
    - Quelle est la difference entre LoadIcon, LoadIconW et LoadIconA ?
    LoadIconW = version unicode
    LoadIconA = version ANSI
    LoadIcon = version choisis-la-bonne-en-fonction-de-l-existence-ou-pas-de-la-macro-UNICODE

    Citation Envoyé par The Lord of Nesquik
    Et médinoc, où as tu trouvé le prototype de la fonction LoadIconW ? (pour qu'a l'avenir, je ne me gourre plus dans les paramètres et types de fonctions)
    http://msdn.microsoft.com/library/en...asp?frame=true
    en sachant que le T dans LPCTSTR veut dire que le type de chaîne sera soit ANSI soit UNICODE selon la présence ou non de la macro UNICODE (les caractères de la chaîne sont des TCHAR)

    Citation Envoyé par The Lord of Nesquik
    - Enfin, serait-il possible de faire communiquer ma dll injectée avec un autre programme (l'antivirus/injecteur par exemple) ?
    J'ai déjà vu un programma faisant ca, mais je n'ai aucune idée de comment ca marche et comment l'imitter.
    Plusieurs solutions : mémoire partagée, pipes, OutputDebugString(), ...

    Citation Envoyé par The Lord of Nesquik
    Re re merci. Après ca, je pourrais mourrir en paix.
    Ne soit pas trop pressé...
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    merci !
    mais ca, c'est le protoype de la fonction LoadIcon, pas LoadIconW, non ?

  16. #16
    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
    • Je n'en ai NULL idée.
      • David.Schris m'a devancé, je ne sais pas quoi dire de plus que lui.
      • Directement dans winuser.h.
    • Diverses méthodes de communication inter-processus (voir ceci sur la compatibilité 32/64 bits. On y apprend qu'entre autres les handles, bien que passés en 64bits, restent limités à 32 (voire 16)...)...
    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.

  17. #17
    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
    D'ailleurs, en regardant dans winuser.h, tu verras que la fonction LoadIcon() elle-même, telle qu'elle est déclarée dans l'aide, possède à peu près le même degré d'existence que la cuiller de Neo...
    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.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    merci beaucoup Médinoc !
    possède à peu près le même degré d'existence que la cuiller de Neo...
    pas mal celle la

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Imbriquer les appels de fonctions par adresse
    Par TheDrev dans le forum C
    Réponses: 5
    Dernier message: 10/10/2008, 23h39
  2. preferer les appels aux fonctions const
    Par yan dans le forum C++
    Réponses: 12
    Dernier message: 29/08/2008, 10h15
  3. Espacer les appels des fonctions
    Par thibaut06 dans le forum Langage
    Réponses: 1
    Dernier message: 25/12/2007, 16h58
  4. [c#] intercepter les appels manqués
    Par BainE dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 17/03/2007, 15h38
  5. voir tout les appels de fonction avec le debugger?
    Par decksroy dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 03/10/2006, 11h33

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