Condividi tramite


Handle di thread e identificatori

Quando viene creato un nuovo thread dalla funzione CreateThread o CreateRemoteThread , viene restituito un handle per il thread. Per impostazione predefinita, questo handle dispone di diritti di accesso completi e, soggetto al controllo degli accessi di sicurezza, può essere usato in una qualsiasi delle funzioni che accettano un handle di thread. Questo handle può essere ereditato dai processi figlio, a seconda del flag di ereditarietà specificato al momento della creazione. L'handle può essere duplicato da DuplicateHandle, che consente di creare un handle di thread con un subset dei diritti di accesso. L'handle è valido fino a quando non viene chiuso, anche dopo che il thread rappresentato è stato terminato.

Le funzioni CreateThread e CreateRemoteThread restituiscono anche un identificatore che identifica in modo univoco il thread in tutto il sistema. Un thread può usare la funzione GetCurrentThreadId per ottenere il proprio identificatore di thread. Gli identificatori sono validi dal momento in cui il thread viene creato fino al termine del thread. Si noti che nessun identificatore di thread sarà mai 0.

Se si dispone di un identificatore di thread, è possibile ottenere l'handle del thread chiamando la funzione OpenThread . OpenThread consente di specificare i diritti di accesso dell'handle e se può essere ereditato.

Un thread può usare la funzione GetCurrentThread per recuperare uno pseudo handle nel proprio oggetto thread. Questo pseudo handle è valido solo per il processo chiamante; non può essere ereditato o duplicato per l'uso da parte di altri processi. Per ottenere l'handle reale per il thread, dato uno pseudo handle, usare la funzione DuplicateHandle .

Per enumerare i thread di un processo, usare le funzioni Thread32First e Thread32Next .