Impersonation und Prozesse

08/03/2010 - 16:53 von Bernhard Schneider | Report spam
Hallo

Ich ahbe folgende Problem ich verwende derzeit das Impersonation BSP von
http://blogs.msdn.com/joncole/archi...-in-c.aspx
und habe das Problem das
iMPERSONATING d = new iMPERSONATING();
d.ImpersonatedUser(username,Environment.MachineName , password);
Process p = new Process();
p.StartInfo.FileName = path;
p.StartInfo.Arguments = argumets;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.Start();
p.WaitForExit();
d.Dispose();

Immer mit den rechten des Angemeldetn benutzer ausgeführt wird und nicht mit
den Rechten die ich per Impersonation erstelle
Mit diesem Code Zeigt er mir die Kontextwechsel richtig an
string domain=Environment.MachineName;
iMPERSONATING d = new iMPERSONATING();

d.ImpersonatedUser(username,domain , password);
Console.WriteLine(Environment.UserName);

Was mache ich Falsch?

Danke im Voraus

Bernhard
 

Lesen sie die antworten

#1 Marcel Roma
08/03/2010 - 22:46 | Warnen spam
Hallo Bernhard,

Am Mon, 8 Mar 2010 07:53:01 -0800 schrieb Bernhard Schneider:

Ich [..] habe das Problem das

iMPERSONATING d = new iMPERSONATING();
d.ImpersonatedUser(username,Environment.MachineName , password);
Process p = new Process();
p.StartInfo.FileName = path;
p.StartInfo.Arguments = argumets;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.Start();
p.WaitForExit();
d.Dispose();

immer mit den rechten des Angemeldetn benutzer ausgeführt wird und nicht mit
den Rechten die ich per Impersonation erstelle.



Der obige Code sieht für mich in Ordnung aus. Wie stellst Du denn fest, ob
die Impersonierung gelungen ist? Mit Environment.UserName nàmlich (wie Du's
versuchst) wird das nicht klappen, denn das gibt uns nur den aktuell
angemeldeten Benutzer zurück. Verwende stattdessen
WindowsIdentity.GetCurrent().Name.

using(ImpersonatedUser usr = new ImpersonatedUser())
{
Console.WriteLine("Vorher: {0}", WindowsIdentity.GetCurrent().Name);
usr.ImpersonatedUser(username, domain, password);
Console.WriteLine("Nachher: {0}", WindowsIdentity.GetCurrent().Name);
Process p = new Process();
p.StartInfo.FileName = path;
p.StartInfo.Arguments = argumets;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.Start();
p.WaitForExit();
}

Console.WriteLine("Zurückgesetzt: {0}", WindowsIdentity.GetCurrent().Name);

(cf.
http://blogs.msdn.com/joncole/archi...-in-c.aspx)


Siehe auch: WindowsIdentity.Impersonate-Methode (IntPtr)
http://msdn.microsoft.com/de-de/library/chf6fbt4(VS.80).aspx

Da sich die Betriebsysteme zuweile stark unterscheiden in Punkto
Impersonierung, ist es immer sinnvoll anzugeben, auf welchem BS sich deine
Frage bezieht.


Gruss
Marcel

Ähnliche fragen