OVH Cloud OVH Cloud

handles dans la win32 api

3 réponses
Avatar
françois M.
bonjour,

En lisant le code généré par visual c++, j'ai vu des reinterpret_cast()
disséminés un peu partout. Est-ce que les HANDLE de la win32Api
correspondent en fait à leur adresse mémoire dans la mémoire virtuelle ?

3 réponses

Avatar
Christian ASTOR
françois M. a écrit:

Est-ce que les HANDLE de la win32Api
correspondent en fait à leur adresse mémoire dans la mémoire virtuelle ?



Notamment schema de fin du vieil article pour les != handles
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dngenlib/html/msdn_handles1.asp
Avatar
Arnaud Debaene
françois M. wrote:
bonjour,


Bonjour.

En lisant le code généré par visual c++, j'ai vu des
reinterpret_cast() disséminés un peu partout.


Le code généré par quoi et pour faire quoi? Un exemple?

Est-ce que les HANDLE
de la win32Api correspondent en fait à leur adresse mémoire dans la
mémoire virtuelle ?



Eventuellement, peut être certains types de handle. Ceci-dit, comme ce n'est
ni documenté ni spécifié tu ne peux pas t'appuyer dessus dans tes programmes
car ca pourrait très bien changer dans le prochain service pack (sans parler
du fait que, comme tu ne connais pas le contenu des objets en question, tu
ne peux pas faire grand chose de ces addresses). Ceci-dit je ne vois pas le
rapport avec des reinterpret_cast générés par des wizards...

Arnaud

PS : Dans certains cas, on a effectivement besoin de considérer les handles
comme de pointeurs, mais c'est généralement quand on travaille avec le DDK.
Avatar
Aurélien REGAT-BARREL
> En lisant le code généré par visual c++, j'ai vu des reinterpret_cast()
disséminés un peu partout. Est-ce que les HANDLE de la win32Api
correspondent en fait à leur adresse mémoire dans la mémoire virtuelle ?



Le principe du handle est d'être un type opaque, et de ne pas se soucier de
sa valeur.
Après, certains handle sont des adresses, comme le HINSTANCE ou les handle
retournés par LocalAlloc (jamais compris pourquoi d'ailleurs).
Pour le reste (les objets systèmes), il me semble que Win95 fabriquait le
handle à partir de l'adresse de l'objet "XORée" avec un "obfuscator".
Y'avait une manip à faire pour obtenir la valeur de l'obfuscator et donc
pouvoir récupérer l'adresse de la structure en RAM... Mais si MS s'est cassé
la tête à faire utiliser des handles, c'est justement pour pas qu'on aille
chatouiller ses structures internes.