2008-09-09 6 views

答えて

2

私がネットを知りませんが、Win32では、簡単な方法は、()IsUserAnAdminを呼び出すことです。あなたはより多くの制御が必要な場合は、トークンのプロセスを開き、

[編集]をチェックする必要があり、各グループのCheckTokenMembershipで確認することができます。

1

私はこの回答に行ったようにあなたは、ループのグループができますいくつかのより多くを読んだ後

Determining members of local groups via C#

、最も簡単な方法は、System.DirectoryServices.AccountManagement名前空間を使用することです。

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

サンプル:ここでは、それがどのように使用できるかである

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

System.DirectoryServices.AccountManagement名前空間は.NET 3.5では初めてのものですか? –

+0

リンクされた記事の最初の文: "新しい3.5のものを見て、私は" System.DirectoryServices.AccountManagement "という名前の新しいアセンブリを見つけました。 – Espo

+0

申し訳ありませんが、私はそれを逃した。 CheckTokenMembershipを回答に追加して回答を完了させることができますか? –

2

は、Win32あり、.NETのサンプルコードについてpinvoke.net(ありがとうchopeen)を参照してください。このためのAPIはP/Invokeすることができます:IsUserAnAdmin

質問はVistaでもっと複雑です... blog postを参照してください。

+0

"IsUserAnAdmin関数は、CheckTokenMembershipのラッパーです。この関数を直接呼び出して、IsUserAnAdminを呼び出すのではなく、管理者グループの状態を判断することをお勧めします。 (リンク先のページから) – Espo

+0

私は前に警告に気付かなかった。私はマイクロソフトがなぜこのような単純なヘルパーを非難すると考えているのだろうかと思っています...幸いにも彼らは下位互換性のための良い実績があります。 –

0

あなたは、現在実行しているユーザーの話をしている場合は、

using System.Security.Principal; 

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

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

ない場合は、私がどのように見えた特定のユーザにアイデンティティを設定しなくするために、その可能性を期待しています。

関連する問題