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.