2010-02-08 5 views
9

Je dois être en mesure d'exécuter un processus en tant qu'utilisateur différent, et j'ai trouvé beaucoup de ressources et de méthodes différentes pour le faire. Le problème est que je dois exécuter un processus non-exe, par ex. un chemin avec l'extension html, ou dans mon cas, "http://somewebserver/someApp.application". Il existe un problème connu dans lequel les processus lancés n'héritent pas des contextes d'emprunt d'identité de leur lanceur, et il existe également un problème connu dans lequel les processus lancés sous différentes références doivent être des fichiers exécutables (.exe).Possible d'utiliser Usurpation d'identité lors du lancement d'un processus non-exe en C#?

Mais comment lancer un fichier .application (par exemple) en tant qu'utilisateur différent?

(j'ai essayé toutes sortes de combinaisons de p/CreateProcessWithLoginW invoquant, des informations d'identification utilisateur réglage/mot de passe dans ProcessStartInfo, etc. Chaque face aux mêmes limitations mentionnées ci-dessus.)

Répondre

3

Lors du lancement d'un non-exe, il est en fait, juste le shell cherchant l'exe à utiliser pour le fichier ou l'URL. Il y a encore un exe impliqué.

Étant donné que le shell est déjà en cours d'exécution, il n'héritera pas votre emprunt d'identité. Vous pouvez rechercher vous-même l'exe dans le registre, puis appeler CreateProcessWithLoginW, simulant essentiellement ce que le shell fait pour vous.

Par exemple, pour ouvrir un fichier .txt, regardez dans "HKEY_CLASSES_ROOT \ .txt". Là, vous verrez le type est "txtfile". Puis recherchez "HKEY_CLASSES_ROOT \ txtfile \ shell \ open \ command" et vous verrez quel fichier exe le shell utilisera, qui est (normalement) "% SystemRoot% \ system32 \ NOTEPAD.EXE% 1".

+0

Merci, cela m'a fait un peu plus loin, même si je reçois toujours une erreur redoutée 0xc0000142 chaque fois que j'essaie de lancer le processus avec certaines informations d'identification, mais c'est un problème différent. – vargonian