/ / Qu'est-ce que l'API prise en charge par Microsoft pour récupérer l'adresse d'un thread - c ++, windows, winapi, msdn

Qu'est-ce que l'API prise en charge par Microsoft pour récupérer l'adresse d'un thread - c ++, windows, winapi, msdn

J'utilise actuellement
NtQueryInformationThread(.., ThreadQuerySetWin32StartAddress, addr, ..) pour obtenir l'adresse du fil dans addr.
le msdn doc dit

NtQueryInformationThread peut être modifié ou indisponible dans les futures versions de Windows

Aussi,

Notez que sur les versions de Windows antérieures à Windows Vista, l'adresse de début renvoyée est fiable uniquement avant que le thread ne commence à s'exécuter.

Quelle est la méthode suggérée pour récupérer l’adresse d’un thread?

Réponses:

2 pour la réponse № 1

Le groupe de fonctions NtQueryXxxx est interneFonctions du noyau Windows non documentées. Jusqu'à ce que Microsoft soit obligé de les documenter dans le règlement avec le département américain de la justice. Ils l'ont fait, mais se sont réservé le droit de modifier leur implémentation dans toute version future de Windows, ce qui leur permettrait d'innover sur Windows. Et réservé le droit de ne pas avoir à rendre la fonction réellement utile au-delà de son utilisation prévue dans le noyau.

L'avertissement est très précis, vous ne recevrez pas d'adresse de démarrage de thread utilisable de cette fonction après le démarrage du thread. Il pointera vers le réal adresse de démarrage, une fonction d'assistance interne nommée __RtlUserThreadStart () dans ntdll.dll. Vous pouvez le voir dans n’importe quelle trace de pile lorsque vous avez "des symboles de débogage pour Windows. La même adresse de départ pour chaque a commencé le fil.

L'écriture est sur le mur. Ne l'utilisez pas.