次の方法で共有


WindowsPrincipal.IsInRole メソッド

定義

現在のプリンシパルが、指定した Windows ユーザー グループに属しているかどうかを確認します。

オーバーロード

IsInRole(Int32)

現在のプリンシパルが、指定した相対識別子 (RID) の Windows ユーザー グループに属しているかどうかを確認します。

IsInRole(SecurityIdentifier)

現在のプリンシパルが、指定したセキュリティ識別子 (SID) の Windows ユーザー グループに属しているかどうかを確認します。

IsInRole(WindowsBuiltInRole)

現在のプリンシパルが、指定した WindowsBuiltInRole の Windows ユーザー グループに属しているかどうかを確認します。

IsInRole(String)

現在のプリンシパルが、指定した名前の Windows ユーザー グループに属しているかどうかを確認します。

注釈

このメソッドには 4 つのオーバーロードがあります。 パフォーマンス上の理由から、オーバーロードを IsInRole(SecurityIdentifier) 強くお勧めします。

IsInRole(Int32)

現在のプリンシパルが、指定した相対識別子 (RID) の Windows ユーザー グループに属しているかどうかを確認します。

public:
 virtual bool IsInRole(int rid);
public virtual bool IsInRole (int rid);
override this.IsInRole : int -> bool
abstract member IsInRole : int -> bool
override this.IsInRole : int -> bool
Public Overridable Function IsInRole (rid As Integer) As Boolean

パラメーター

rid
Int32

プリンシパルのメンバーシップ状態を確認する Windows ユーザー グループの RID。

戻り値

現在のプリンシパルが、指定した Windows ユーザー グループのメンバーである、つまり特定のロール内にある場合は true。それ以外の場合は false

次のコード例では、 メソッドの使用方法を IsInRole 示します。 WindowsBuiltInRole列挙体は、組み込みのロールを識別する RID のソースとして使用されます。 RID は、現在のプリンシパルのロールを決定するために使用されます。

public:
   static void DemonstrateWindowsBuiltInRoleEnum()
   {
      AppDomain^ myDomain = Thread::GetDomain();

      myDomain->SetPrincipalPolicy( PrincipalPolicy::WindowsPrincipal );
      WindowsPrincipal^ myPrincipal = dynamic_cast<WindowsPrincipal^>(Thread::CurrentPrincipal);

      Console::WriteLine( "{0} belongs to: ", myPrincipal->Identity->Name );

      Array^ wbirFields = Enum::GetValues( WindowsBuiltInRole::typeid );

      for each ( Object^ roleName in wbirFields )
      {
         try
         {
            Console::WriteLine( "{0}? {1}.", roleName,
               myPrincipal->IsInRole(  *dynamic_cast<WindowsBuiltInRole^>(roleName) ) );
         }
         catch ( Exception^ ) 
         {
            Console::WriteLine( "{0}: Could not obtain role for this RID.",
               roleName );
         }
      }
   }
using System;
using System.Threading;
using System.Security.Permissions;
using System.Security.Principal;

class SecurityPrincipalDemo
{
    public static void DemonstrateWindowsBuiltInRoleEnum()
    {
        AppDomain myDomain = Thread.GetDomain();

        myDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
        WindowsPrincipal myPrincipal = (WindowsPrincipal)Thread.CurrentPrincipal;
        Console.WriteLine("{0} belongs to: ", myPrincipal.Identity.Name.ToString());
        Array wbirFields = Enum.GetValues(typeof(WindowsBuiltInRole));
        foreach (object roleName in wbirFields)
        {
            try
            {
                // Cast the role name to a RID represented by the WindowsBuildInRole value.
                Console.WriteLine("{0}? {1}.", roleName,
                    myPrincipal.IsInRole((WindowsBuiltInRole)roleName));
                Console.WriteLine("The RID for this role is: " + ((int)roleName).ToString());
            }
            catch (Exception)
            {
                Console.WriteLine("{0}: Could not obtain role for this RID.",
                    roleName);
            }
        }
        // Get the role using the string value of the role.
        Console.WriteLine("{0}? {1}.", "Administrators",
            myPrincipal.IsInRole("BUILTIN\\" + "Administrators"));
        Console.WriteLine("{0}? {1}.", "Users",
            myPrincipal.IsInRole("BUILTIN\\" + "Users"));
        // Get the role using the WindowsBuiltInRole enumeration value.
        Console.WriteLine("{0}? {1}.", WindowsBuiltInRole.Administrator,
           myPrincipal.IsInRole(WindowsBuiltInRole.Administrator));
        // Get the role using the WellKnownSidType.
        SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
        Console.WriteLine("WellKnownSidType BuiltinAdministratorsSid  {0}? {1}.", sid.Value, myPrincipal.IsInRole(sid));
    }

    public static void Main()
    {
        DemonstrateWindowsBuiltInRoleEnum();
    }
}
Imports System.Threading
Imports System.Security.Permissions
Imports System.Security.Principal

Class SecurityPrincipalDemo

    Public Shared Sub DemonstrateWindowsBuiltInRoleEnum()
        Dim myDomain As AppDomain = Thread.GetDomain()

        myDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
        Dim myPrincipal As WindowsPrincipal = CType(Thread.CurrentPrincipal, WindowsPrincipal)
        Console.WriteLine("{0} belongs to: ", myPrincipal.Identity.Name.ToString())
        Dim wbirFields As Array = [Enum].GetValues(GetType(WindowsBuiltInRole))
        Dim roleName As Object
        For Each roleName In wbirFields
            Try
                ' Cast the role name to a RID represented by the WindowsBuildInRole value.
                Console.WriteLine("{0}? {1}.", roleName, myPrincipal.IsInRole(CType(roleName, WindowsBuiltInRole)))
                Console.WriteLine("The RID for this role is: " + Fix(roleName).ToString())

            Catch
                Console.WriteLine("{0}: Could not obtain role for this RID.", roleName)
            End Try
        Next roleName
        ' Get the role using the string value of the role.
        Console.WriteLine("{0}? {1}.", "Administrators", myPrincipal.IsInRole("BUILTIN\" + "Administrators"))
        Console.WriteLine("{0}? {1}.", "Users", myPrincipal.IsInRole("BUILTIN\" + "Users"))
        ' Get the role using the WindowsBuiltInRole enumeration value.
        Console.WriteLine("{0}? {1}.", WindowsBuiltInRole.Administrator, myPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
        ' Get the role using the WellKnownSidType.
        Dim sid As New SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, Nothing)
        Console.WriteLine("WellKnownSidType BuiltinAdministratorsSid  {0}? {1}.", sid.Value, myPrincipal.IsInRole(sid))

    End Sub

    Public Shared Sub Main()
        DemonstrateWindowsBuiltInRoleEnum()

    End Sub
End Class

注釈

新しいユーザーや新しいグループなどの新しく作成されたロール情報をテストする場合は、ログアウトしてログインして、ドメイン内でロール情報を強制的に伝達することが重要です。 これを行わないと、テストで が IsInRolefalseされる可能性があります。

パフォーマンス上の理由から、 IsInRole(SecurityIdentifier) オーバーロードは、ユーザーのロールを決定するための推奨されるオーバーロードとして推奨されます。

Note

Windows Vista では、ユーザー アカウント制御 (UAC: User Account Control) でユーザーの権限が決定されます。 ユーザーが組み込みの Administrators グループのメンバーである場合、そのユーザーには標準ユーザー アクセス トークンおよび管理者アクセス トークンの 2 つのランタイム アクセス トークンが割り当てられています。 既定では、ユーザーは標準ユーザー ロールに所属します。 管理特権を必要とするタスクを実行しようとすると、[同意] ダイアログ ボックスを使用してロールを動的に昇格できます。 メソッドを IsInRole 実行するコードでは、[同意] ダイアログ ボックスは表示されません。 標準ユーザー ロールの場合、組み込みの Administrators グループに属している場合でも、このコードは false を返します。 アプリケーション アイコンを右クリックし、管理者として実行することを示すことで、コードを実行する前に特権を昇格できます。

相対識別子 (RID) は、Windows ユーザー グループのセキュリティ識別子 (SID) のコンポーネントであり、クロスプラットフォームのローカライズの問題を防ぐためにサポートされています。 多くのユーザー アカウント、ローカル グループ、およびグローバル グループには、Windows のすべてのバージョンで一定の既定の RID 値があります。

たとえば、BUILTIN\Administrators ロールの RID は0x220。 メソッドの入力パラメーターとして 0x220 を IsInRole 使用すると、現在の true プリンシパルが管理者である場合にが返されます。

次の表に、既定の RID 値を示します。

組み込みユーザー RID
DOMAINNAME\Administrator 0x1F4
DOMAINNAME\Guest 0x1F5
組み込みのグローバル グループ RID
DOMAINNAME\Domain Admins 0x200
DOMAINNAME\Domain Users 0x201
DOMAINNAME\Domain Guests 0x202
組み込みのローカル グループ RID
BUILTIN\Administrators (BUILTIN\Administrators) 0x220
BUILTIN\Users 0x221
BUILTIN\Guests 0x222
BUILTIN\Account 演算子 0x224
BUILTIN\Server 演算子 0x225
BUILTIN\Print 演算子 0x226
BUILTIN\Backup 演算子 0x227
BUILTIN\Replicator 0x228

適用対象

IsInRole(SecurityIdentifier)

現在のプリンシパルが、指定したセキュリティ識別子 (SID) の Windows ユーザー グループに属しているかどうかを確認します。

public:
 virtual bool IsInRole(System::Security::Principal::SecurityIdentifier ^ sid);
public virtual bool IsInRole (System.Security.Principal.SecurityIdentifier sid);
[System.Runtime.InteropServices.ComVisible(false)]
public virtual bool IsInRole (System.Security.Principal.SecurityIdentifier sid);
override this.IsInRole : System.Security.Principal.SecurityIdentifier -> bool
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member IsInRole : System.Security.Principal.SecurityIdentifier -> bool
override this.IsInRole : System.Security.Principal.SecurityIdentifier -> bool
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.IsInRole : System.Security.Principal.SecurityIdentifier -> bool
Public Overridable Function IsInRole (sid As SecurityIdentifier) As Boolean

パラメーター

sid
SecurityIdentifier

Windows ユーザー グループを一意に識別する SecurityIdentifier

戻り値

現在のプリンシパルが、指定した Windows ユーザー グループのメンバーである場合は true。それ以外の場合は false

属性

例外

sidnullです。

Windows は Win32 エラーを返します。

次のコード例では、 メソッドの使用方法を WindowsPrincipal.IsInRole(SecurityIdentifier) 示します。 BuiltinAdministratorsSid列挙値は、現在のプリンシパルが管理者かどうかを判断するために使用されます。 完全なコード例については、 メソッドを WindowsPrincipal.IsInRole(Int32) 参照してください。

// Get the role using the WellKnownSidType.
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
Console.WriteLine("WellKnownSidType BuiltinAdministratorsSid  {0}? {1}.", sid.Value, myPrincipal.IsInRole(sid));
    ' Get the role using the WellKnownSidType.
    Dim sid As New SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, Nothing)
    Console.WriteLine("WellKnownSidType BuiltinAdministratorsSid  {0}? {1}.", sid.Value, myPrincipal.IsInRole(sid))

End Sub

注釈

SecurityIdentifier 、Windows 上のユーザーまたはグループを一意に識別します。 新しいユーザーや新しいグループなどの新しく作成されたロール情報をテストする場合は、ログアウトしてログインして、ドメイン内でロール情報を強制的に伝達することが重要です。 これを行わないと、テストで が IsInRolefalseされる可能性があります。

Note

Windows Vista では、ユーザー アカウント制御 (UAC: User Account Control) でユーザーの権限が決定されます。 ユーザーが組み込みの Administrators グループのメンバーである場合、そのユーザーには標準ユーザー アクセス トークンおよび管理者アクセス トークンの 2 つのランタイム アクセス トークンが割り当てられています。 既定では、ユーザーは標準ユーザー ロールに所属します。 管理特権を必要とするタスクを実行しようとすると、[同意] ダイアログ ボックスを使用してロールを動的に昇格できます。 メソッドを IsInRole 実行するコードでは、[同意] ダイアログ ボックスは表示されません。 標準ユーザー ロールの場合、組み込みの Administrators グループに属している場合でも、このコードは false を返します。 アプリケーション アイコンを右クリックし、管理者として実行することを示すことで、コードを実行する前に特権を昇格できます。

パフォーマンス上の理由から、これはユーザーのロールを決定するために推奨されるオーバーロードです。

適用対象

IsInRole(WindowsBuiltInRole)

現在のプリンシパルが、指定した WindowsBuiltInRole の Windows ユーザー グループに属しているかどうかを確認します。

public:
 virtual bool IsInRole(System::Security::Principal::WindowsBuiltInRole role);
public virtual bool IsInRole (System.Security.Principal.WindowsBuiltInRole role);
override this.IsInRole : System.Security.Principal.WindowsBuiltInRole -> bool
abstract member IsInRole : System.Security.Principal.WindowsBuiltInRole -> bool
override this.IsInRole : System.Security.Principal.WindowsBuiltInRole -> bool
Public Overridable Function IsInRole (role As WindowsBuiltInRole) As Boolean

パラメーター

role
WindowsBuiltInRole

WindowsBuiltInRole 値のいずれか 1 つ。

戻り値

現在のプリンシパルが、指定した Windows ユーザー グループのメンバーである場合は true。それ以外の場合は false

例外

role は正しい WindowsBuiltInRole 値ではありません。

次の例では、 列挙を WindowsBuiltInRole 使用して、現在のプリンシパルが であるかどうかを判断します Administrator。 完全なコード例については、 メソッドを WindowsPrincipal.IsInRole(Int32) 参照してください。

// Get the role using the WindowsBuiltInRole enumeration value.
Console.WriteLine("{0}? {1}.", WindowsBuiltInRole.Administrator,
   myPrincipal.IsInRole(WindowsBuiltInRole.Administrator));
' Get the role using the WindowsBuiltInRole enumeration value.
Console.WriteLine("{0}? {1}.", WindowsBuiltInRole.Administrator, myPrincipal.IsInRole(WindowsBuiltInRole.Administrator))

注釈

新しいユーザーや新しいグループなどの新しく作成されたロール情報をテストする場合は、ログアウトしてログインして、ドメイン内でロール情報を強制的に伝達することが重要です。 これを行わないと、テストで が IsInRolefalseされる可能性があります。

パフォーマンス上の理由から、 IsInRole(SecurityIdentifier) オーバーロードは、ユーザーのロールを決定するための推奨されるオーバーロードとして推奨されます。

Note

Windows Vista では、ユーザー アカウント制御 (UAC: User Account Control) でユーザーの権限が決定されます。 ユーザーが組み込みの Administrators グループのメンバーである場合、そのユーザーには標準ユーザー アクセス トークンおよび管理者アクセス トークンの 2 つのランタイム アクセス トークンが割り当てられています。 既定では、ユーザーは標準ユーザー ロールに所属します。 管理特権を必要とするタスクを実行しようとすると、[同意] ダイアログ ボックスを使用してロールを動的に昇格できます。 メソッドを IsInRole 実行するコードでは、[同意] ダイアログ ボックスは表示されません。 標準ユーザー ロールの場合、組み込みの Administrators グループに属している場合でも、このコードは false を返します。 アプリケーション アイコンを右クリックし、管理者として実行することを示すことで、コードを実行する前に特権を昇格できます。

適用対象

IsInRole(String)

現在のプリンシパルが、指定した名前の Windows ユーザー グループに属しているかどうかを確認します。

public:
 override bool IsInRole(System::String ^ role);
public:
 virtual bool IsInRole(System::String ^ role);
public override bool IsInRole (string role);
public virtual bool IsInRole (string role);
override this.IsInRole : string -> bool
abstract member IsInRole : string -> bool
override this.IsInRole : string -> bool
Public Overrides Function IsInRole (role As String) As Boolean
Public Overridable Function IsInRole (role As String) As Boolean

パラメーター

role
String

メンバーシップを確認する対象の Windows ユーザー グループの名前。

戻り値

現在のプリンシパルが、指定した Windows ユーザー グループのメンバーである場合は true。それ以外の場合は false

実装

次のコード例では、 メソッドの使用方法を WindowsPrincipal.IsInRole(String) 示します。

文字列 BUILTIN\AdministratorsBUILTIN\Users は、現在のプリンシパルが管理者かユーザーかを判断するために使用されます。 完全なコード例については、 メソッドを WindowsPrincipal.IsInRole(Int32) 参照してください。

// Get the role using the string value of the role.
Console.WriteLine("{0}? {1}.", "Administrators",
    myPrincipal.IsInRole("BUILTIN\\" + "Administrators"));
Console.WriteLine("{0}? {1}.", "Users",
    myPrincipal.IsInRole("BUILTIN\\" + "Users"));
' Get the role using the string value of the role.
Console.WriteLine("{0}? {1}.", "Administrators", myPrincipal.IsInRole("BUILTIN\" + "Administrators"))
Console.WriteLine("{0}? {1}.", "Users", myPrincipal.IsInRole("BUILTIN\" + "Users"))

注釈

新しいユーザーや新しいグループなどの新しく作成されたロール情報をテストする場合は、ログアウトしてログインして、ドメイン内でロール情報を強制的に伝達することが重要です。 これを行わないと、テストで が IsInRolefalseされる可能性があります。

パフォーマンス上の理由から、 IsInRole(SecurityIdentifier) オーバーロードは、ユーザーのロールを決定するための推奨されるオーバーロードとして推奨されます。

Note

Windows Vista では、ユーザー アカウント制御 (UAC: User Account Control) でユーザーの権限が決定されます。 ユーザーが組み込みの Administrators グループのメンバーである場合、そのユーザーには標準ユーザー アクセス トークンおよび管理者アクセス トークンの 2 つのランタイム アクセス トークンが割り当てられています。 既定では、ユーザーは標準ユーザー ロールに所属します。 管理特権を必要とするタスクを実行しようとすると、[同意] ダイアログ ボックスを使用してロールを動的に昇格できます。 メソッドを IsInRole 実行するコードでは、[同意] ダイアログ ボックスは表示されません。 標準ユーザー ロールの場合、組み込みの Administrators グループに属している場合でも、このコードは false を返します。 アプリケーション アイコンを右クリックし、管理者として実行することを示すことで、コードを実行する前に特権を昇格できます。

組み込みのロールの場合、 role 文字列は "BUILTIN\RoleNameHere" の形式である必要があります。 たとえば、Windows 管理者ロールのメンバーシップをテストするには、ロールを表す文字列を "BUILTIN\Administrators" にする必要があります。 円記号をエスケープする必要がある場合があることに注意してください。 次の表に、組み込みのロールの一覧を示します。

注意

文字列形式の BUILTIN ロールのスペルは、列挙体で WindowsBuiltInRole 使用されるスペルと異なります。 たとえば、列挙体の管理者のスペルは、"管理者" ではなく "管理者" です。 このオーバーロードを使用する場合は、次の表のロールのスペルを使用します。

組み込みのローカル グループ
BUILTIN\Administrators (BUILTIN\Administrators)
BUILTIN\Users
BUILTIN\Guests
BUILTIN\Account 演算子
BUILTIN\Server 演算子
BUILTIN\Print 演算子
BUILTIN\Backup 演算子
BUILTIN\Replicator

マシン固有のロールの role 場合、文字列は "MachineName\RoleNameHere" の形式にする必要があります。

ドメイン固有のロールの role 場合、文字列は "DomainName\RoleNameHere" という形式にする必要があります(例: "SomeDomain\Domain Users)。

注意

.NET Framework バージョン 1.0 では、 パラメーターでは role 大文字と小文字が区別されます。 .NET Framework バージョン 1.1 以降では、 パラメーターでは role 大文字と小文字が区別されません。

こちらもご覧ください

適用対象