2008-09-09 7 views

Antwort

2

Ich weiß nicht, über Net, aber in win32, der einfache Weg ist IsUserAnAdmin() aufzurufen. Wenn Sie mehr Kontrolle benötigen, können Sie den Prozess öffnen Token und überprüfen Sie mit Checktokenmemberchip für jede Gruppe müssen Sie

bearbeiten überprüfen: Siehe pinvoke.net für .NET Beispielcode (Danke chopeen)

1

Sie könnten Schleife die Gruppen, wie ich in dieser Antwort hat:

Determining members of local groups via C#

einige mehr, wäre die einfachste Sache zu verwenden, um die System.DirectoryServices.AccountManagement Namespace Nach der Lektüre. Hier ist, wie es verwendet werden kann:

http://www.leastprivilege.com/SystemDirectoryServicesAccountManagement.aspx

Probe:

public static bool IsUserInGroup(string username, string groupname, ContextType type) 
{ 
    PrincipalContext context = new PrincipalContext(type); 

    UserPrincipal user = UserPrincipal.FindByIdentity(
     context, 
     IdentityType.SamAccountName, 
     username); 
    GroupPrincipal group = GroupPrincipal.FindByIdentity(
     context, groupname); 

    return user.IsMemberOf(group); 
} 
+0

Der Namespace System.DirectoryServices.AccountManagement ist neu in .NET 3.5, oder? –

+0

Erster Satz in dem verknüpften Artikel: "Durch einige der neuen 3.5 Sachen stolperte ich über eine neue Assembly namens" System.DirectoryServices.AccountManagement "- das hat meine Aufmerksamkeit erregt." – Espo

+0

Entschuldigung, ich habe es verpasst. Können Sie Ihrer Antwort Informationen CheckTokenMembership hinzufügen, um es zu vervollständigen (so kann ich es als akzeptierte Antwort markieren)? –

2

Es ist ein Win32 API für diese können Sie P/Invoke: IsUserAnAdmin

Die Frage ist komplexer auf Vista ... siehe blog post.

+0

"Die IsUserAnAdmin-Funktion ist ein Wrapper für CheckTokenMembership. Es wird empfohlen, diese Funktion direkt aufzurufen, um den Administratorgruppenstatus zu ermitteln, anstatt IsUserAnAdmin aufzurufen". (Von der verlinkten Seite) – Espo

+0

Ich hatte die Warnung vorher nicht bemerkt. Ich frage mich, warum Microsoft einen so einfacheren Helfer ablehnen würde ... zum Glück haben sie eine gute Erfolgsbilanz bei der Rückwärtskompatibilität. –

0

Wenn Sie sprechen über die aktuell laufenden Benutzer dann

using System.Security.Principal; 

WindowsIdentity identity = WindowsIdentity.GetCurrent(); 
WindowsPrincipal wp = new WindowsPrincipal(identity); 

if (wp.IsInRole("BUILTIN\Administrators")) 
    // Is Administrator 
else 
    // Is Not 

Wenn nicht, dann erwarte ich, dass seine mögliche Identität auf einen bestimmten Benutzer setzen, aber nicht sah, wie sich.

Verwandte Themen