Partager via


Droits de sécurité et d’accès des threads

Microsoft Windows vous permet de contrôler l’accès aux objets thread. Pour plus d’informations sur la sécurité, consultez Access-Control Modèle.

Vous pouvez spécifier un descripteur de sécurité pour un thread lorsque vous appelez le CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateThreadou fonction CreateRemoteThread. Si vous spécifiez NULL, le thread obtient un descripteur de sécurité par défaut. Les listes de contrôle d’accès dans le descripteur de sécurité par défaut d’un thread proviennent du jeton principal ou d’emprunt d’identité du créateur.

Pour récupérer le descripteur de sécurité d’un thread, appelez la fonction GetSecurityInfo. Pour modifier le descripteur de sécurité d’un thread, appelez la fonction SetSecurityInfo.

Le handle retourné par la fonction CreateThread a THREAD_ALL_ACCESS accès à l’objet thread. Lorsque vous appelez la fonction GetCurrentThread, le système retourne un pseudohandle avec l’accès maximal que le descripteur de sécurité du thread autorise l’appelant.

Les droits d’accès valides pour les objets de thread incluent les droits d’accès standard et certains droits d’accès spécifiques au thread. Le tableau suivant répertorie les droits d’accès standard utilisés par tous les objets.

Valeur Signification
DELETE (0x00010000L) Obligatoire pour supprimer l’objet.
READ_CONTROL (0x00020000L) Requis pour lire les informations dans le descripteur de sécurité de l’objet, sans inclure les informations dans la liste de contrôle d’accès partagé. Pour lire ou écrire la liste de contrôle d’accès partagé, vous devez demander le droit d’accès ACCESS_SYSTEM_SECURITY. Pour plus d’informations, consultez accès SACL Right.
SYNCHRONIZE (0x00100000L) Droit d’utiliser l’objet pour la synchronisation. Cela permet à un thread d’attendre que l’objet soit dans l’état signalé.
WRITE_DAC (0x00040000L) Obligatoire pour modifier la liste dacl dans le descripteur de sécurité de l’objet.
WRITE_OWNER (0x00080000L) Requis pour modifier le propriétaire dans le descripteur de sécurité de l’objet.

 

Le tableau suivant répertorie les droits d’accès spécifiques au thread.

Valeur Signification
SYNCHRONIZE (0x00100000L) Active l’utilisation du handle de thread dans l’une des fonctions d’attente .
THREAD_ALL_ACCESS Tous les droits d’accès possibles pour un objet thread.Windows Server 2003 et Windows XP : La valeur de l’indicateur de THREAD_ALL_ACCESS a augmenté sur Windows Server 2008 et Windows Vista. Si une application compilée pour Windows Server 2008 et Windows Vista est exécutée sur Windows Server 2003 ou Windows XP, l’indicateur THREAD_ALL_ACCESS contient des bits d’accès qui ne sont pas pris en charge et la fonction spécifiant cet indicateur échoue avec ERROR_ACCESS_DENIED. Pour éviter ce problème, spécifiez l’ensemble minimal de droits d’accès requis pour l’opération. Si THREAD_ALL_ACCESS devez être utilisé, définissez _WIN32_WINNT sur le système d’exploitation minimal ciblé par votre application (par exemple, #define _WIN32_WINNT _WIN32_WINNT_WINXP). Pour plus d’informations, consultez Utilisation des en-têtes Windows.
THREAD_DIRECT_IMPERSONATION (0x0200) Requis pour un thread de serveur qui emprunte l’identité d’un client.
THREAD_GET_CONTEXT (0x0008) Obligatoire pour lire le contexte d’un thread à l’aide de GetThreadContext.
THREAD_IMPERSONATE (0x0100) Requis pour utiliser directement les informations de sécurité d’un thread sans l’appeler à l’aide d’un mécanisme de communication qui fournit des services d’emprunt d’identité.
THREAD_QUERY_INFORMATION (0x0040) Obligatoire pour lire certaines informations de l’objet thread, telles que le code de sortie (voir GetExitCodeThread).
THREAD_QUERY_LIMITED_INFORMATION (0x0800) Obligatoire pour lire certaines informations à partir des objets thread (consultez GetProcessIdOfThread). Un handle disposant du droit d’accès THREAD_QUERY_INFORMATION est automatiquement accordé THREAD_QUERY_LIMITED_INFORMATION.Windows Server 2003 et Windows XP : Ce droit d’accès n’est pas pris en charge.
THREAD_SET_CONTEXT (0x0010) Obligatoire pour écrire le contexte d’un thread à l’aide de SetThreadContext.
THREAD_SET_INFORMATION (0x0020) Requis pour définir certaines informations dans l’objet thread.
THREAD_SET_LIMITED_INFORMATION (0x0400) Requis pour définir certaines informations dans l’objet thread. Un handle disposant du droit d’accès THREAD_SET_INFORMATION est automatiquement accordé THREAD_SET_LIMITED_INFORMATION.Windows Server 2003 et Windows XP : Ce droit d’accès n’est pas pris en charge.
THREAD_SET_THREAD_TOKEN (0x0080) Obligatoire pour définir le jeton d’emprunt d’identité d’un thread à l’aide de SetThreadToken.
THREAD_SUSPEND_RESUME (0x0002) Obligatoire pour suspendre ou reprendre un thread (voir SuspendThread et ResumeThread).
THREAD_TERMINATE (0x0001) Obligatoire pour mettre fin à un thread à l’aide de TerminateThread.

 

Vous pouvez demander au ACCESS_SYSTEM_SECURITY droit d’accès à un objet thread si vous souhaitez lire ou écrire la liste de contrôle d’accès de l’objet. Pour plus d’informations, consultez Access-Control listes de contrôle d’accès (ACL) et accès SACL Right.

Processus protégés

processus protégés améliorer la prise en charge de Digital Rights Management. Le système restreint l’accès aux processus protégés et aux threads des processus protégés.

Windows Server 2003 et Windows XP : processus protégés ont été ajoutés à partir de Windows Vista.

Les droits d’accès spécifiques suivants ne sont pas autorisés d’un processus aux threads d’un processus protégé :

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

Le droit THREAD_QUERY_LIMITED_INFORMATION a été introduit pour fournir l’accès à un sous-ensemble des informations disponibles via THREAD_QUERY_INFORMATION.