Anwendung unter anderem Benutzerkonto ausführen
-
Ist nicht ganz einfach. Dafür musst du erst ein Service machen, das dann den Prozess starten kann. Deshalb gibt's auch das runas Service im Windows (das aber soweit ich weiß keine dokumentierte Schnittstelle hat - daher: selbermachen).
-
Ringding schrieb:
Ist nicht ganz einfach. Dafür musst du erst ein Service machen, das dann den Prozess starten kann. Deshalb gibt's auch das runas Service im Windows (das aber soweit ich weiß keine dokumentierte Schnittstelle hat - daher: selbermachen).
Hä? Und wozu ist dann CreateProcessAsUser da?
-
Das wird dazu benötigt.
Es kann ja nicht einfach gehen, dass jeder als ein beliebiger User Prozesse starten kann, dann wäre ja das ganze Sicherheitskonzept nutzlos.
Der Prozess, der CreateProcessAsUser aufruft, muss schon sehr hohe Rechte haben (ein Service also), sonst geht's nicht.
-
Schau mal hier: http://msdn.microsoft.com/library/en-us/security/security/client_impersonation.asp. Irgendwo in dem Kontext ist auch eine Anleitung, wie man Benutzernamen und Passwort sicher abfragen kann
[edit]Habs gefunden, schau mal hier: http://msdn.microsoft.com/library/en-us/security/security/asking_the_user_for_credentials.asp. Da ist es glaub ich mit gutem Code beschrieben[/edit]
-
Ringding schrieb:
Der Prozess, der CreateProcessAsUser aufruft, muss schon sehr hohe Rechte haben (ein Service also), sonst geht's nicht.
Das vergiß mal ganz schnell wieder.
Es reicht, wenn entweder der User nach dem User/Passwort gefragt wird oder wenn User/Passwort im Sourcecode bekannt ist, um Prozesse unter einem anderen Userkontext zu starten.Wer sagt denn das der zu startende Prozess mehr können soll als der User? Die Funktion heißt ja nicht CreateProcessAsSuperUser...
-
Vielen Dank für die Antworten! Die Funktion CreateProcessAsUser hatte ich bereits getestet (mit Beispielt von Microsoft unter http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q165/1/94.ASP&NoWebContent=1), aber leider habe ich ich den Fehler 6 (Das Handle ist ungültig.) bekommen.
Naja, vielleicht hat ja jemand ein funtkionierendes Beispiel zur Hand.
Im voraus besten Dank.
Gruß Skay
-
Auf die Schnelle:
Du könntest mittels LogonUser ein gültiges Handle bekommen (letzter Parameter von LogonUser) um es als ersten Parameter an CreateProcessAsUser zu übergeben.MSDN: LogonUser schrieb:
In most cases, the returned handle is a primary token that you can use in calls to the CreateProcessAsUser function.
Wie rufst Du denn CreateProcessAsUser auf? Mit was für einem Handle fütterst Du die Funktion?
-
Hallo Hepi,
mit LogonUser habe ich es schon versucht, dann habe ich aber den Fehler 5 (Zugriff verweigert) oder 1314 (Client besitzt keine Rechte) bekommen. Aber an dem Konto kann es nicht liegen, da ich den lokalen Admin übergeben habe.
Gruß Skay
-
Dazu gab's vor recht kurzem mal einen Thread, in dem afaik eine Lösung des Problem gepostet wurde - nur ohne Forensuche ist es natürlich schwer zu finden

-
Ich hab mal manuell gesucht und diesen Thread gefunden:
http://www.c-plusplus.net/forum/viewtopic.php?t=75557Ich glaub das ist der, den flenders meint...
-
Hallo Hepi,
leider hilft mir der Link nicht weiter ... Hat irgend jemand noch eine Idee ?
Gruß Skay
-
Ich checke dein aktuelles Problem noch nicht wirklich.
Willst Du das Admin-Passwort in deinem Code gespeichert halten? Oder möchtest Du eher, so wie ich es vorschlagen würde, Benutzernamen und Passwort abfragen (siehe meine Links weiter oben)?
Beschreibe doch mal was genauer, dann können wir dir vielleicht helfen. Und den relevanten Code posten ist auch immer eine gute Idee
-
Hallo Deadlef,
ich will immer noch aus meiner Applikation die unter Benutzer Rechten läuft, eine Applikation mit Admin Rechten starten. Das Passwort zum Admin Account ist natürlich bekannt. Leider funktioniert das Beispiel nicht (Link am Anfang gepostet), da der genannte Fehler kommt.
Würde mich freuen wenn jemand noch eine Idee hätte.
Gruß Skay
-
Hallo Leute,
ich habe jetzt eine Lösung gefunden ... Und zwar funktioniert es mit der Funktion
BOOL CreateProcessWithLogonW( LPCWSTR lpUsername, LPCWSTR lpDomain, LPCWSTR lpPassword, DWORD dwLogonFlags, LPCWSTR lpApplicationName, LPWSTR lpCommandLine, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInfo );Gruß Skay
-
Bin ne weile mit dem Problem am rumstolpern gewesen nen Prozess mit CreateProcessAsUser auszuführen.
Hatte dauerhaft den "viel aussagenden" 1314 (ERROR_PRIVILEGE_NOT_HELD) beim erstellen des Prozesses.
Im unten stehenden Link wird beschrieben welche Berechtigungen benötigt werden und wie man diese setzen kann.
http://technet2.microsoft.com/WindowsServer/de/Library/ef9d6a91-0a11-4443-8dd9-48c8199ad3831031.mspx?mfr=trueGruß Marco