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.
È possibile specificare un descrittore di sicurezza per un thread quando si chiama la CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateThreado funzione CreateRemoteThreadThread. 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 dell'autore.
Per recuperare il descrittore di sicurezza di un thread, chiamare la funzioneGetSecurityInfo. Per modificare il descrittore di sicurezza di un thread, chiamare la funzionesetSecurityInfo.
L'handle restituito dalla funzione CreateThread ha THREAD_ALL_ACCESS accesso all'oggetto thread. Quando si chiama la funzioneGetCurrentThread, 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) | Obbligatorio 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. |
SYNCHRONIZE (0x00100000L) | Diritto di utilizzare l'oggetto per la sincronizzazione. Ciò consente a un thread di attendere fino a quando l'oggetto non si trova nello stato segnalato. |
WRITE_DAC (0x00040000L) | Necessario per modificare il DACL 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 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) | Necessario per leggere il contesto di un thread usando GetThreadContext. |
THREAD_IMPERSONATE (0x0100) | Necessario per 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). A un handle con il diritto di accesso THREAD_QUERY_INFORMATION viene concesso automaticamente THREAD_QUERY_LIMITED_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. 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 elenchi di Access-Control (ACL) e SACL Access Right.
Processi protetti
Processi protetti migliorare 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: 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 di THREAD_QUERY_LIMITED_INFORMATION è stato introdotto per fornire l'accesso a un subset delle informazioni disponibili tramite THREAD_QUERY_INFORMATION.