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

注釈

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

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

Note

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

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

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

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

組み込みユーザー リッド
DOMAINNAME\Administrator 0x1F4
DOMAINNAME\Guest 0x1F5
組み込みのグローバル グループ リッド
DOMAINNAME\Domain Admins 0x200
DOMAINNAME\Domain Users 0x201
DOMAINNAME\Domain Guests 0x202
組み込みのローカル グループ リッド
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上のユーザーまたはグループを一意に識別します。 新しいユーザーや新しいグループなどの新しく作成されたロール情報をテストする場合は、ログアウトしてログインして、ドメイン内でロール情報を強制的に伝達することが重要です。 これを行わないと、 IsInRole テストで falseが返される可能性があります。

Note

Windows Vista では、ユーザー アカウント制御 (UAC) によってユーザーの権限が決定されます。 組み込みの 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

パラメーター

返品

現在のプリンシパルが指定した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))

注釈

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

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

Note

Windows Vista では、ユーザー アカウント制御 (UAC) によってユーザーの権限が決定されます。 組み込みの 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\AdministratorsおよびBUILTIN\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"))

注釈

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

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

Note

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

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

Note

文字列形式の BUILTIN ロールのスペルは、 WindowsBuiltInRole 列挙型で使用されるスペルと異なります。 たとえば、列挙体の管理者のスペルは "Administrator" であり、"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)。

Note

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

こちらもご覧ください

適用対象