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


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

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

Windows Me, Windows 2000/XP: Если Вы имеете идентификатор потока, то можете получить дескриптор потока, вызывая функцию OpenThread. OpenThread дает Вам возможность, чтобы задать права доступа дескриптора и может ли он быть унаследован.

Windows NT 4.0 и ранее, Windows 95/98/Me: не имеют способа получить дескриптор потока из идентификатора потока. Если бы дескрипторы сделали доступным этот способ, то процесс владелец мог бы тогда завершиться из-за ошибки, потому что другой процесс неожиданно выполнил бы операцию на одном из его потоков, типа приостановки, возобновление работы, регулировки его приоритета или завершая его работу. Вместо этого, Вы должны запросить дескриптор у создателя потока или у потока непосредственно.

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

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz