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

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

Vous pouvez spécifier un descripteur de sécurité pour un thread lorsque vous appelez la fonction CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateThread ou 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 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) Obligatoire 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 saCL, vous devez demander le droit d’accès ACCESS_SYSTEM_SECURITY . Pour plus d’informations, consultez Droit d’accès SACL.
SYNCHRONIZE (0x00100000L) Droit d'utiliser l'objet pour la synchronisation. Cela permet à un thread d’attendre que l’objet soit à l’état signalé.
WRITE_DAC (0x00040000L) Obligatoire pour modifier la liste DACL dans le descripteur de sécurité de l’objet.
WRITE_OWNER (0x00080000L) Obligatoire 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 aux threads.

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 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 doit ê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) Obligatoire 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) Vous devez utiliser les informations de sécurité d’un thread directement sans les 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 (voir 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) Obligatoire pour définir certaines informations dans l’objet thread.
THREAD_SET_LIMITED_INFORMATION (0x0400) Obligatoire 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é pour 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 arrêter un thread à l’aide de TerminateThread.

 

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

Processus protégés

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

Windows Server 2003 et Windows XP : Des 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 permettre l’accès à un sous-ensemble de l’information disponible via THREAD_QUERY_INFORMATION.