Ich brauche ShellExecute
etwas wie ein anderer Benutzer, derzeit beginne ich einen Helfer-Prozess mit CreateProcessAsUser
, die ShellExecute
ruft, aber das scheint zu viel von einem Hack (Falscher Elternprozess usw.) Gibt es einen besseren Weg zu tun Dies?CreateProcessAsUser vs ShellExecute
@PabloG: ImpersonateLoggedOnUser funktioniert nicht:
HANDLE hTok; VERIFY(LogonUser("otheruser",0,"password",LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,&hTok)); VERIFY(ImpersonateLoggedOnUser(hTok)); ShellExecute(0,0,"calc.exe",0,0,SW_SHOW); RevertToSelf(); CloseHandle(hTok);
startet nur calc wie der angemeldete Benutzer, nicht "otheruser"
@ 1800 WEITERE INFORMATIONEN: CreateProcess
/CreateProcessAsUser
ist nicht das gleiche wie ShellExecute
, mit UAC unter Vista, CreateProcess
ist nutzlos, wenn Sie nicht kontrollieren, welches Programm der Benutzer ausführt (CreateProcess
wird mit einem Fehler zurückgegeben, wenn Sie es eine EXE-Datei mit einem Manifest als requireAdmin markiert)
@Brian R. Bondy: Ich kenne diese Informationen bereits (Und versteh mich nicht falsch, es ist gute Sachen), aber es ist off Thema (IMHO) Ich frage nach ShellExecuteAsUser
, nicht über Prozesse als ein anderer Benutzer zu starten Ich weiß schon, wie das geht.
Ich bin mir ziemlich sicher, dass ich das versucht habe und es nicht funktioniert, weil der neue Prozess mit dem Token aus dem aktuellen Prozess und nicht seinen Thread – Anders
erzeugt Dies funktioniert, wenn im Haupt-Thread eines Prozesses getan wird, aber es wird funktionieren nicht, wenn sie in einem separaten Thread ausgeführt werden, da ShellExecute den Token-/Sicherheitskontext des Hauptthreads verwendet. Stelle dir das vor. Jetzt ... Wenn Ihre Anwendung mehrere Threads enthält, kann es passieren, dass andere Teile Ihrer Anwendung durch den Impersonate/Revert im Hauptthread beschädigt werden. –