Handles et identificateurs de thread
Lorsqu’un nouveau thread est créé par la fonction CreateThread ou CreateRemoteThread , un handle au thread est retourné. Par défaut, ce handle dispose de droits d’accès complets et, sous réserve de la vérification de l’accès de sécurité, peut être utilisé dans toutes les fonctions qui acceptent un handle de thread. Ce handle peut être hérité par les processus enfants, en fonction de l’indicateur d’héritage spécifié lors de sa création. Le handle peut être dupliqué par DuplicateHandle, ce qui vous permet de créer un handle de thread avec un sous-ensemble des droits d’accès. Le handle est valide jusqu’à ce qu’il soit fermé, même après l’arrêt du thread qu’il représente.
Les fonctions CreateThread et CreateRemoteThread retournent également un identificateur qui identifie de manière unique le thread dans tout le système. Un thread peut utiliser la fonction GetCurrentThreadId pour obtenir son propre identificateur de thread. Les identificateurs sont valides à partir du moment où le thread est créé jusqu’à l’arrêt du thread. Notez qu’aucun identificateur de thread ne sera jamais 0.
Si vous avez un identificateur de thread, vous pouvez obtenir le handle de thread en appelant la fonction OpenThread . OpenThread vous permet de spécifier les droits d’accès du handle et s’il peut être hérité.
Un thread peut utiliser la fonction GetCurrentThread pour récupérer un pseudo-handle dans son propre objet thread. Ce pseudo-handle est valide uniquement pour le processus d’appel ; il ne peut pas être hérité ou dupliqué pour être utilisé par d’autres processus. Pour obtenir le handle réel du thread, en fonction d’un pseudo handle, utilisez la fonction DuplicateHandle .
Pour énumérer les threads d’un processus, utilisez les fonctions Thread32First et Thread32Next .