Threadhandles und -bezeichner
Wenn ein neuer Thread vom CreateThread- oder CreateRemoteThread- funktion erstellt wird, wird ein Handle für den Thread zurückgegeben. Standardmäßig verfügt dieses Handle über Vollzugriffsrechte und kann – vorbehaltlich der Sicherheitszugriffsüberprüfung – in allen Funktionen verwendet werden, die ein Threadhandle akzeptieren. Dieses Handle kann von untergeordneten Prozessen geerbt werden, je nachdem, welche Vererbungskennzeichnung beim Erstellen angegeben wurde. Das Handle kann durch DuplicateHandledupliziert werden, wodurch Sie ein Threadhandle mit einer Teilmenge der Zugriffsrechte erstellen können. Der Handle ist gültig, bis er geschlossen ist, auch nachdem der thread, den er darstellt, beendet wurde.
Die funktionen CreateThread und CreateRemoteThread geben auch einen Bezeichner zurück, der den Thread im gesamten System eindeutig identifiziert. Ein Thread kann die GetCurrentThreadId--Funktion verwenden, um einen eigenen Threadbezeichner abzurufen. Die Bezeichner gelten ab dem Zeitpunkt, zu dem der Thread erstellt wird, bis der Thread beendet wurde. Beachten Sie, dass kein Threadbezeichner jemals 0 ist.
Wenn Sie über einen Threadbezeichner verfügen, können Sie das Threadhandle abrufen, indem Sie die OpenThread--Funktion aufrufen. OpenThread- ermöglicht es Ihnen, die Zugriffsrechte des Handles anzugeben und anzugeben, ob es geerbt werden kann.
Ein Thread kann die GetCurrentThread--Funktion verwenden, um ein Pseudohandle für ein eigenes Threadobjekt abzurufen. Dieser Pseudohandle ist nur für den Aufrufvorgang gültig; sie kann nicht geerbt oder für die Verwendung durch andere Prozesse dupliziert werden. Verwenden Sie die DuplicateHandle--Funktion, um den tatsächlichen Handle für den Thread zu erhalten.
Verwenden Sie zum Aufzählen der Threads eines Prozesses die funktionen Thread32First- und Thread32Next-.