2009-07-22 14 views
30

Gibt es eine Möglichkeit, meinem Code mitzuteilen, dass er als anderer Benutzer ausgeführt werden soll?Code als anderer Benutzer ausführen (C#)

Ich rufe NetUserSetInfo über ein PInvoke und ich muss es als ein anderer Benutzer aufrufen. Gibt es eine Möglichkeit, das zu tun?

Antwort

26

Identitätswechsel erfordert einige einheimische APIs aufrufen (nämlich Logonuser), so ist es wahrscheinlich nicht wert Entsendung 3 Seiten Wrappercode. Diese Seite enthält ein vollständiges funktionierendes Beispiel: http://platinumdogs.wordpress.com/2008/10/30/net-c-impersonation-with-network-credentials/

Beachten Sie, dass Identitätswechsel wichtige Sicherheitsüberlegungen enthält. Stellen Sie sicher, dass Sie die Best Practices befolgen.

10

Diese article erklärt es ziemlich kurz und bündig:

Hier ist ein Codeausschnitt aus dem Artikel ist:

IntPtr accessToken = IntPtr.Zero; 
.... 
//You have to initialize your accessToken with API calling 
.... 
WindowsIdentity identity = new WindowsIdentity(accessToken); 
WindowsImpersonationContext context = identity.Impersonate(); 
... 
// Now your code is using the new WindowsLogin and you can do what ever this login can do 
... 

//Now you can return to your current login of Windows 
context.Undo(); 
+2

Der Code in dem Artikel ist weg. –

20

Wahrscheinlich die beste und sauberste code, die ich bisher gesehen habe, ist dies

using (Impersonation.LogonUser(domain, username, password, logonType)) 
{ 
    // do whatever you want as this user. 
} 

Gerade Github oder Nuget folgen.

+1

Das war sicherlich einfach zu implementieren, aber ich kann nicht bestätigen, dass es funktioniert. Ich mache eine process.start ("cmd.exe") und der Prozess zeigt immer noch als Besitzer der ID, die das Programm gestartet hat, nicht die imitierte ID. Was könnte ich vermissen? –

Verwandte Themen