Identificadores e identificadores de thread
Quando um novo thread é criado pelo CreateThread ou função de CreateRemoteThread, um identificador para o thread é retornado. Por padrão, esse identificador tem direitos de acesso total e, sujeito à verificação de acesso de segurança, pode ser usado em qualquer uma das funções que aceitam um identificador de thread. Esse identificador pode ser herdado por processos filho, dependendo do sinalizador de herança especificado quando é criado. O identificador pode ser duplicado por DuplicateHandle, que permite criar um identificador de thread com um subconjunto dos direitos de acesso. O identificador é válido até ser fechado, mesmo após o thread que representa ter sido encerrado.
OCreateThread e funções de CreateRemoteThread também retornam um identificador que identifica exclusivamente o thread em todo o sistema. Um thread pode usar a função GetCurrentThreadId para obter seu próprio identificador de thread. Os identificadores são válidos desde o momento em que o thread é criado até que o thread tenha sido encerrado. Observe que nenhum identificador de thread será 0.
Se você tiver um identificador de thread, poderá obter o identificador de thread chamando a função OpenThread. OpenThread permite especificar os direitos de acesso do identificador e se ele pode ser herdado.
Um thread pode usar o função GetCurrentThread para recuperar um pseudo identificador para seu próprio objeto de thread. Este pseudo identificador é válido apenas para o processo de chamada; ele não pode ser herdado ou duplicado para uso por outros processos. Para obter o identificador real para o thread, dado um pseudo handle, use o DuplicateHandle função.
Para enumerar os threads de um processo, use as funções Thread32First e Thread32Next.