特定のユーザー(ドメインアカウント)が現在のコンピュータ(アプリケーションが実行されるコンピュータ)の組み込みAdministratorsグループのメンバであるかどうかをプログラムで(.NETで)チェックする必要があります。与えられたユーザーが組み込みのAdministratorsグループのメンバーであるかどうかを確認する方法?
可能ですか?
特定のユーザー(ドメインアカウント)が現在のコンピュータ(アプリケーションが実行されるコンピュータ)の組み込みAdministratorsグループのメンバであるかどうかをプログラムで(.NETで)チェックする必要があります。与えられたユーザーが組み込みのAdministratorsグループのメンバーであるかどうかを確認する方法?
可能ですか?
私がネットを知りませんが、Win32では、簡単な方法は、()IsUserAnAdminを呼び出すことです。あなたはより多くの制御が必要な場合は、トークンのプロセスを開き、
[編集]をチェックする必要があり、各グループのCheckTokenMembershipで確認することができます。
私はこの回答に行ったようにあなたは、ループのグループができますいくつかのより多くを読んだ後
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);
}
は、Win32あり、.NETのサンプルコードについてpinvoke.net(ありがとうchopeen)を参照してください。このためのAPIはP/Invokeすることができます:IsUserAnAdmin
質問はVistaでもっと複雑です... blog postを参照してください。
"IsUserAnAdmin関数は、CheckTokenMembershipのラッパーです。この関数を直接呼び出して、IsUserAnAdminを呼び出すのではなく、管理者グループの状態を判断することをお勧めします。 (リンク先のページから) – Espo
私は前に警告に気付かなかった。私はマイクロソフトがなぜこのような単純なヘルパーを非難すると考えているのだろうかと思っています...幸いにも彼らは下位互換性のための良い実績があります。 –
あなたは、現在実行しているユーザーの話をしている場合は、
using System.Security.Principal;
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal wp = new WindowsPrincipal(identity);
if (wp.IsInRole("BUILTIN\Administrators"))
// Is Administrator
else
// Is Not
ない場合は、私がどのように見えた特定のユーザにアイデンティティを設定しなくするために、その可能性を期待しています。
System.DirectoryServices.AccountManagement名前空間は.NET 3.5では初めてのものですか? –
リンクされた記事の最初の文: "新しい3.5のものを見て、私は" System.DirectoryServices.AccountManagement "という名前の新しいアセンブリを見つけました。 – Espo
申し訳ありませんが、私はそれを逃した。 CheckTokenMembershipを回答に追加して回答を完了させることができますか? –