Threadhandles und -bezeichner

Wenn ein neuer Thread von der 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 – je nach Überprüfung des Sicherheitszugriffs – in jeder der Funktionen verwendet werden, die ein Threadhandle akzeptieren. Dieses Handle kann von untergeordneten Prozessen geerbt werden, abhängig vom Vererbungsflag, das beim Erstellen angegeben wird. Das Handle kann von DuplicateHandledupliziert werden, wodurch Sie ein Threadhandle mit einer Teilmenge der Zugriffsrechte erstellen können. Das Handle ist bis zum Schließen gültig, auch nachdem der von ihm dargestellte Thread 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 seinen eigenen Threadbezeichner abzurufen. Die Bezeichner sind von der Erstellung des Threads bis zum Beenden des Threads gültig. 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. Mit OpenThread können Sie die Zugriffsrechte des Handles angeben und angeben, ob es geerbt werden kann.

Ein Thread kann die GetCurrentThread-Funktion verwenden, um ein Pseudohandle für sein eigenes Threadobjekt abzurufen. Dieses Pseudohandle ist nur für den aufrufenden Prozess gültig. sie kann nicht geerbt oder für die Verwendung durch andere Prozesse dupliziert werden. Verwenden Sie die DuplicateHandle-Funktion, um das echte Handle für den Thread mit einem Pseudohandle abzurufen.

Um die Threads eines Prozesses aufzuzählen, verwenden Sie die Funktionen Thread32First und Thread32Next.