Je ne sais pas si je vais pouvoir beaucoup t'aider, partant du principe que WoW est assez protégé contre tout ce qui tente de toucher à l'intégrité de son processus. (warden…)
Commençons par la théorie :
Mais premièrement, un handle (type générique HANDLE sous Win32) c'est juste… Un handle. Ça ne représente pas (nécessairement) un pointeur, c'est juste une manière de référencer un objet, une ressource, une adresse mémoire… Bref, à peu près n'importe quoi.
Lorsque tu es à l'intérieur d'un processus, les modules sont identifiés par un HMODULE ou HINSTANCE (à moins que je ne dise une bêtise, les deux sont
aujourd'hui totalement interchangeables). Et l'implémentation
actuelle (qui a peu de chances de changer radicalement tant qu'on reste avec Win32), c'est que HMODULE ou HINSTANCE représente l'adresse de base du module. (L'exécutable est lui-même un module)
Il se trouve que les fonctions de processus de Win32 retournent des handle typés génériquement HANDLE. Mais ce sont des handle de processus. (ça aurait sans doute pu être typé HPROCESS, mais ça ne l'est pas.) Ils représentent donc… Un processus. Et à moins d'en connaître plus sur l'implémentation de ces HANDLE, tu devras te contenter des fonctions documentées de l'API Windows
Ce que tu cherches toi, si j'ai bien compris, c'est l'adresse de base du module principal, à savoir le HINSTANCE à l'intérieur du processus externe. Et cela a peu, ou pas de rapport avec le HANDLE
de processus que tu récupères par ailleurs ^^
Et ne parlons pas des conversions de pointeur en DWORD dans le code que tu as montré… C'est juste super mauvais.
Après, si ce que tu voulais faire était vraiment de lire les données qui t'intéressent à l'adresse qui t'intéresse, tu pourrais te contenter de les lire dans le module dont tu récupère le chemin d'accès. Sinon, pourquoi s'embêter à récupérer celui-ci ? (Je vous le demande bien !)
Je suppose que ce ton but final, c'est lire des données non statiques dans l'exécutable chargé en mémoire, et que le fichier physique t'intéresse peu. Dans ce cas, en récupérer le chemin d'accès ne te sera d'aucune utilité, ce qui t'intéresse, c'est l'adresse de base du module, à l'intérieur de son processus… (Qui est plus ou moins une boîte noire tant que tu ne t'y injectes pas

)
Il existe plusieurs moyens de récupérer des informations sur le processus, mais avec les derniers OS, et la protection intégrée à WoW (warden), c'est juste non trivial, et ça requiert probablement pas mal de bidouilles et de hacks… (Rien que la lecture de la mémoire en elle-même peut avoir été restreinte… Je ne me suis pas trop penché sur la chose dernièrement parce que je n'en ai pas vraiment besoin.)
Par exemple, tu pourrais injecter une DLL qui ferait ce que tu veux à l'intérieur du processus. Mais ça serait détecté par warden, et c'est donc non trivial (puisque même après avoir réussi, il faut te cacher de warden…)
Tu pourrais essayer de récupérer le PEB, par exemple avec
NtQueryInformationProcess et y lire l'adresse de base…
Bref, c'est non trivial. Je ne peux que te suggérer de regarder ce qui a déjà été fait par d'autres… (Pas évident à trouver, mais très loin d'être impossible

)
PS : Ce que tu fais, c'est mal, j'espère que tu le sais.
