2009-10-03 3 views

Répondre

6

Il y a quelques options:

+1

dans le cas d'énumération, est-il un moyen de déterminer lequel des threads énumérés correspond à un HANDLE que vous avez? – bdonlan

+0

Vous transmettez votre handle de processus en cours à CreateToolhelp32Snapshot avec l'indicateur TH32CS_SNAPMODULE. Cela va simplement énumérer les threads dans votre processus. –

+1

Mais il ne vous laissera pas faire la différence entre les threads _within_ votre module, n'est-ce pas? – bdonlan

3

Si vous pouvez créer le thread en question, appelez GetCurrentThreadId et stockez-le quelque part, vous pouvez lire le résultat.

+0

Cela a fonctionné le mieux pour moi, il suffit de l'appeler pour le créer et le stocker avec threadhandle! merci –

3

Si le thread en question entre fréquemment dans un état d'attente d'alerte, vous pouvez lui envoyer un APC avec QueueUserAPC; le gestionnaire APC peut alors appeler GetCurrentThreadId et communiquer le résultat à l'appelant en utilisant la méthode que vous voulez.

Vous pouvez également le faire avec des fonctions NT non documentées. L'utilisation de NtQueryInformationThread() sur la classe ThreadBasicInformation vous donnera l'ID de thread dans le returned structure. Un exemple peut être trouvé dans le wine source. Cependant, je ne suis pas certain de la version des fenêtres disponibles. Gardez à l'esprit que ces fonctions non documentées peuvent changer à tout moment. Il est donc préférable de les tester sur les anciennes versions de Windows qui vous intéressent et d'utiliser simplement GetThreadId() où c'est disponible. Notez que ces fonctions non documentées peuvent uniquement être accédées par LoadLibrary() et GetProcAddress() sur NTDLL;

ils n'ont pas de bibliothèque d'importation. According to MSDN, les déclarations pour les structures de données peuvent être trouvées dans Winternl.h, mais si ce n'est pas le cas, il suffit de les définir en vous basant sur les liens ntinternals ci-dessus.

+0

Celui qui s'intéresse ici est comment on peut appeler 'NtQueryInformationThread': http://www.snip2code.com/Snippet/85443/GetProcessIdOfThread()-on-Windows-XP – c00000fd

Questions connexes