TL; DR - La seule option est de générer un autre processus. (Une nouvelle cmd.exe
.) Dans le cas d'une invite de commande, le démarrage d'une nouvelle instance avec un jeton d'accès doté d'autorisations plus élevées entraînera toujours la création d'une nouvelle fenêtre .
Il n'est pas possible d'accorder des autorisations supplémentaires à un processus déjà en cours d' exécution.
Lorsqu'un utilisateur disposant de droits d'administration se connecte à un ordinateur Windows avec le contrôle de compte d'utilisateur (UAC) activé, deux jetons d'accès distincts sont créés :
- Un avec un accès administrateur complet, et
- Un deuxième "jeton filtré" avec accès utilisateur standard
Au moment où un processus (par exemple CMD.EXE
) est créé, l'un de ces deux jetons d'accès lui est attribué . Si le processus est exécuté en tant qu'administrateur "élevé", le jeton d'accès non filtré est utilisé. Si le processus ne dispose pas des droits d'administrateur, le jeton d'utilisateur standard filtré est utilisé.
Une fois qu'un processus a été créé, il n'est plus possible de remplacer son jeton d'accès . 1 Dans ce fil de discussion MSDN Application Security pour Windows Desktop , une affiche s'identifiant comme membre de l'équipe du noyau Windows indique:
Le noyau NT n'a jamais été conçu pour permettre la commutation de jetons une fois qu'un processus a commencé à s'exécuter. Cela est dû au fait que les descripteurs, etc. peuvent avoir été ouverts dans un ancien contexte de sécurité, que les opérations en vol peuvent utiliser des contextes de sécurité incohérents, etc. En tant que tel, il n’a généralement aucun sens de changer de jeton de processus une fois son exécution commencée. Cependant, cela n'a pas été appliqué jusqu'à Vista . [c'est moi qui souligne] (Source grâce à @Ben N )
Remarque: le contrôle de compte d'utilisateur a été introduit avec la publication de Windows Vista .
Cette réponse du super utilisateur cite deux sources supplémentaires confirmant la même chose:
Par conséquent, il est tout simplement impossible d'élever l'invite de commande ou tout autre processus en place. La seule option est de générer 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 doté d'autorisations plus élevées entraînera toujours la création d'une nouvelle fenêtre. Si les invites UAC sont activées sur le système, elles sont également déclenchées.
1 Vous pouvez ajuster les privilèges dans un jeton d'accès existant avec la fonction AdjustTokenPrivileges , mais selon MSDN :
La fonction AdjustTokenPrivileges ne peut pas ajouter de nouveaux privilèges au jeton d'accès. Il ne peut activer ou désactiver que les privilèges existants du jeton.