TL;DR - La seule option est de lancer un autre processus. (Un nouveau cmd.exe
.) Dans le cas de l'Invite de commande, le démarrage d'une nouvelle instance avec un jeton d'accès ayant des permissions plus élevées entraînera toujours l'ouverture d'une nouvelle fenêtre en cours de création.
Il n'est pas possible d'accorder des permissions supplémentaires à une déjà en cours processus.
Lorsqu'un utilisateur disposant de droits d'administration se connecte à une machine Windows sur laquelle le contrôle des comptes d'utilisateurs (UAC) est activé, deux jetons d'accès distincts sont créés :
- Un avec un accès administrateur complet, et
- Un deuxième "jeton filtré" avec un accès utilisateur standard
Au moment où un processus (par ex. CMD.EXE
) est créé, on lui attribue l'un des deux éléments suivants jetons d'accès . Si le processus est exécuté "en hauteur" en tant qu'administrateur, le jeton d'accès non filtré est utilisé. Si le processus n'a pas de droits d'administrateur, le jeton d'accès filtré et standard est utilisé.
Une fois qu'un processus a été créé, il n'est pas possible de remplacer son jeton d'accès. . 1 Dans ce MSDN Sécurité des applications pour le bureau Windows filetage un poster s'identifiant comme un membre de l'équipe Windows Kernel déclare :
Le noyau NT n'a jamais été conçu pour permettre le changement de jeton une fois qu'un processus a commencé à fonctionner. En effet, les handles, etc. peuvent avoir été ouverts dans un ancien contexte de sécurité, les opérations en cours d'exécution peuvent utiliser des contextes de sécurité incohérents, etc. En tant que tel, il n'est généralement pas judicieux de changer le jeton d'un processus une fois qu'il a commencé son exécution. Cependant, cette mesure n'a pas été appliquée avant Vista . [souligné par moi] (Source merci a @Ben N )
Note : Le contrôle de compte d'utilisateur était introduit avec la sortie de Windows Vista .
Ce super utilisateur réponse cite deux autres sources qui confirment la même chose :
Il n'est donc tout simplement pas possible d'élever l'invite de commande ou tout autre processus sur place. La seule option est de créer un autre processus avec un nouveau jeton d'accès (qui peut être une autre instance du processus d'origine si vous le souhaitez). Dans le cas de l'invite de commande, le démarrage d'une nouvelle instance avec un jeton d'accès ayant des autorisations plus élevées entraînera toujours la création d'une nouvelle fenêtre, et si les invites UAC sont activées sur le système, elles seront également déclenchées.
1 Vous pouvez modifier les privilèges d'un jeton d'accès existant à l'aide de la commande AdjustTokenPrivileges mais selon MSDN :
La fonction AdjustTokenPrivileges ne peut pas ajouter de nouveaux privilèges au jeton d'accès. Elle peut uniquement activer ou désactiver les privilèges existants du jeton.