Comment créer un nouveau processus avec un autre compte d’utilisateur sous Windows?

Est-il possible de créer un nouveau processus sur Windows avec un compte d’utilisateur différent? Je sais qu’il existe un menu contextuel “Exécuter en tant que” mais je veux le faire depuis Java. J’ai le nom d’utilisateur et le mot de passe.

Vous devez écrire une DLL en utilisant Java Native Interface (JNI) car vous ne pouvez pas le faire avec du code Java pur.

La DLL elle-même doit appeler la fonction CreateProcessAsUser pour créer un processus dans le contexte d’un autre utilisateur. Pour créer ce processus avec succès, vous devez fournir un jeton d’access à la fonction, elle-même créée en appelant la fonction LogonUser (il faut le nom d’utilisateur et le mot de passe pour authentifier cet autre utilisateur).

Il y a un programme appelé “runas.exe”. Vous pouvez exécuter ce processus et fournir les arguments appropriés pour votre processus et votre nom d’utilisateur / mot de passe. Je pense que c’est la méthode la plus simple.

Je viens de parcourir une alternative au programme runas.exe appelé MiniRunAs qui prendra le mot de passe sur la ligne de commande – http://www.source-code.biz/snippets/c/1.htm

Si vous pouvez l’installer avec votre application, cela peut s’avérer plus simple que d’écrire une DLL JNI.

Selon vos besoins, l’API Win32 ” CreateProcessWithLogonW ” est plus facile à utiliser que les fonctions “CreateProcessAsUser / LogonUser”.

De MSDN Docs:

 Les fonctions CreateProcessWithLogonW et CreateProcessWithTokenW sont
 similaire à la fonction CreateProcessAsUser, sauf que l'appelant 
 n'a pas besoin d'appeler la fonction LogonUser pour authentifier l'utilisateur 
 et obtenir un jeton

RUNAS a le commutateur “/ savecred” qui vous permet d’entrer les informations d’identification uniquement la première fois. Un problème potentiel est que lorsque / SaveCred enregistre les informations d’identification, il enregistre pour chaque fois que RUNAS appelle ce compte utilisateur. Cela peut représenter un risque énorme pour la sécurité, alors soyez prudent!

Exemple sur http://www.rgagnon.com/javadetails/java-0014.html (à la fin)