Diritti di accesso e sicurezza dei thread

Microsoft Windows consente di controllare l'accesso agli oggetti thread. Per altre informazioni sulla sicurezza, vedere Access-Control Model.For more information about security, see Access-Control Model.

È possibile specificare un descrittore di sicurezza per un thread quando si chiama la funzione CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateThread o CreateRemoteThread . Se si specifica NULL, il thread ottiene un descrittore di sicurezza predefinito. Gli ACL nel descrittore di sicurezza predefinito per un thread provengono dal token primario o di rappresentazione del creatore.

Per recuperare il descrittore di sicurezza di un thread, chiamare la funzione GetSecurityInfo . Per modificare il descrittore di sicurezza di un thread, chiamare la funzione SetSecurityInfo .

L'handle restituito dalla funzione CreateThread ha THREAD_ALL_ACCESS l'accesso all'oggetto thread. Quando si chiama la funzione GetCurrentThread , il sistema restituisce uno pseudohandle con l'accesso massimo consentito dal descrittore di sicurezza del thread.

I diritti di accesso validi per gli oggetti thread includono i diritti di accesso standard e alcuni diritti di accesso specifici del thread. Nella tabella seguente sono elencati i diritti di accesso standard utilizzati da tutti gli oggetti .

Valore Significato
DELETE (0x00010000L) Obbligatorio per eliminare l'oggetto.
READ_CONTROL (0x00020000L) Necessario per leggere le informazioni nel descrittore di sicurezza per l'oggetto, senza includere le informazioni nell'elenco SACL. Per leggere o scrivere SACL, è necessario richiedere il diritto di accesso ACCESS_SYSTEM_SECURITY . Per altre informazioni, vedere SACL Access Right.For more information, see SACL Access Right.
SYNCHRONIZE (0x00100000L) Diritto di utilizzare l'oggetto per la sincronizzazione. Ciò consente a un thread di attendere fino a quando l'oggetto non è nello stato segnalato.
WRITE_DAC (0x00040000L) Obbligatorio per modificare l'elenco di controllo di accesso alla riga di comando nel descrittore di sicurezza per l'oggetto .
WRITE_OWNER (0x00080000L) Obbligatorio per modificare il proprietario nel descrittore di sicurezza per l'oggetto .

 

Nella tabella seguente sono elencati i diritti di accesso specifici del thread.

Valore Significato
SYNCHRONIZE (0x00100000L) Abilita l'uso dell'handle di thread in una delle funzioni di attesa.
THREAD_ALL_ACCESS Tutti i diritti di accesso possibili per un oggetto thread. Windows Server 2003 e Windows XP: Il valore del flag di THREAD_ALL_ACCESS è aumentato in Windows Server 2008 e Windows Vista. Se un'applicazione compilata per Windows Server 2008 e Windows Vista viene eseguita in Windows Server 2003 o Windows XP, il flag di THREAD_ALL_ACCESS contiene bit di accesso non supportati e la funzione che specifica questo flag ha esito negativo con ERROR_ACCESS_DENIED. Per evitare questo problema, specificare il set minimo di diritti di accesso necessari per l'operazione. Se è necessario usare THREAD_ALL_ACCESS, impostare _WIN32_WINNT sul sistema operativo minimo di destinazione dell'applicazione , ad esempio #define _WIN32_WINNT _WIN32_WINNT_WINXP. Per altre informazioni, vedere Uso delle intestazioni di Windows.
THREAD_DIRECT_IMPERSONATION (0x0200) Obbligatorio per un thread del server che rappresenta un client.
THREAD_GET_CONTEXT (0x0008) Obbligatorio per leggere il contesto di un thread usando GetThreadContext.
THREAD_IMPERSONATE (0x0100) È necessario usare direttamente le informazioni di sicurezza di un thread senza chiamarlo usando un meccanismo di comunicazione che fornisce servizi di rappresentazione.
THREAD_QUERY_INFORMATION (0x0040) Necessario per leggere determinate informazioni dall'oggetto thread, ad esempio il codice di uscita (vedere GetExitCodeThread).
THREAD_QUERY_LIMITED_INFORMATION (0x0800) Necessario per leggere determinate informazioni dagli oggetti thread (vedere GetProcessIdOfThread). Ai THREAD_QUERY_LIMITED_INFORMATION viene concesso automaticamente un handle con il diritto di accesso THREAD_QUERY_INFORMATION. Windows Server 2003 e Windows XP: Questo diritto di accesso non è supportato.
THREAD_SET_CONTEXT (0x0010) Necessario per scrivere il contesto di un thread usando SetThreadContext.
THREAD_SET_INFORMATION (0x0020) Obbligatorio per impostare determinate informazioni nell'oggetto thread.
THREAD_SET_LIMITED_INFORMATION (0x0400) Obbligatorio per impostare determinate informazioni nell'oggetto thread. A un handle con il diritto di accesso THREAD_SET_INFORMATION viene concesso automaticamente THREAD_SET_LIMITED_INFORMATION. Windows Server 2003 e Windows XP: Questo diritto di accesso non è supportato.
THREAD_SET_THREAD_TOKEN (0x0080) Obbligatorio per impostare il token di rappresentazione per un thread usando SetThreadToken.
THREAD_SUSPEND_RESUME (0x0002) Necessario per sospendere o riprendere un thread (vedere SuspendThread e ResumeThread).
THREAD_TERMINATE (0x0001) Necessario per terminare un thread usando TerminateThread.

 

È possibile richiedere al ACCESS_SYSTEM_SECURITY l'accesso a un oggetto thread se si desidera leggere o scrivere l'elenco SACL dell'oggetto. Per altre informazioni, vedere Access-Control Lists (ACL) e SACL Access Right.For more information, see Access-Control Lists (ACL) and SACL Access Right.

Processi protetti

I processi protetti migliorano il supporto per Digital Rights Management. Il sistema limita l'accesso ai processi protetti e ai thread dei processi protetti.

Windows Server 2003 e Windows XP: I processi protetti sono stati aggiunti a partire da Windows Vista.

I diritti di accesso specifici seguenti non sono consentiti da un processo ai thread di un processo protetto:

THREAD_ALL_ACCESS
THREAD_DIRECT_IMPERSONATION
THREAD_GET_CONTEXT
THREAD_IMPERSONATE
THREAD_QUERY_INFORMATION
THREAD_SET_CONTEXT
THREAD_SET_INFORMATION
THREAD_SET_TOKEN
THREAD_TERMINATE

Il diritto THREAD_QUERY_LIMITED_INFORMATION è stato introdotto per fornire l'accesso a un subset delle informazioni disponibili tramite THREAD_QUERY_INFORMATION.