Дескрипторы и идентификаторы потоков

При создании нового потока с помощью функции CreateThread или CreateRemoteThread возвращается дескриптор потока. По умолчанию этот дескриптор имеет права полного доступа и (при условии проверки доступа безопасности) может использоваться в любой функции, принимающей дескриптор потока. Этот дескриптор может наследоваться дочерними процессами в зависимости от флага наследования, указанного при его создании. Дескриптор может дублироваться с помощью DuplicateHandle, что позволяет создать дескриптор потока с подмножеством прав доступа. Дескриптор действителен до закрытия, даже после завершения потока, который он представляет.

Функции CreateThread и CreateRemoteThread также возвращают идентификатор, который однозначно идентифицирует поток в системе. Поток может использовать функцию GetCurrentThreadId для получения собственного идентификатора потока. Идентификаторы действительны с момента создания потока до завершения потока. Обратите внимание, что идентификатор потока никогда не будет иметь значение 0.

Если у вас есть идентификатор потока, дескриптор потока можно получить, вызвав функцию OpenThread . OpenThread позволяет указать права доступа дескриптора и указать, можно ли наследовать его.

Поток может использовать функцию GetCurrentThread для получения псевдо дескриптора к собственному объекту потока. Этот псевдо дескриптор действителен только для вызывающего процесса; Он не может быть унаследован или дублирован для использования другими процессами. Чтобы получить реальный дескриптор потока с псевдо дескриптором, используйте функцию DuplicateHandle .

Чтобы перечислить потоки процесса, используйте функции Thread32First и Thread32Next .