Identificadores e identificadores de thread
Quando um novo thread é criado pela função CreateThread ou CreateRemoteThread , um identificador para o thread é retornado. Por padrão, esse identificador tem direitos de acesso completos 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 ele é criado. O identificador pode ser duplicado por DuplicateHandle, o que permite criar um identificador de thread com um subconjunto dos direitos de acesso. O identificador é válido até ser fechado, mesmo depois que o thread que ele representa tiver sido encerrado.
As funções CreateThread e 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 a partir do momento em que o thread é criado até que o thread seja 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 . O OpenThread permite que você especifique os direitos de acesso do identificador e se ele pode ser herdado.
Um thread pode usar a função GetCurrentThread para recuperar um pseudo-identificador para seu próprio objeto de thread. Esse pseudo-identificador é válido apenas para o processo de chamada; não pode ser herdado ou duplicado para uso por outros processos. Para obter o identificador real para o thread, dado um pseudo-identificador, use a função DuplicateHandle .
Para enumerar os threads de um processo, use as funções Thread32First e Thread32Next .