WindowsPrincipal.IsInRole Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет, относится ли текущий участник к заданной группе пользователей Windows.
Перегрузки
IsInRole(Int32) |
Определяет, относится ли текущий участник к группе пользователей Windows с заданным относительным идентификатором (RID). |
IsInRole(SecurityIdentifier) |
Определяет, относится ли текущий субъект к группе пользователей Windows с заданным идентификатором безопасности (SID). |
IsInRole(WindowsBuiltInRole) |
Определяет, относится ли текущий субъект к группе пользователей Windows с заданным WindowsBuiltInRole. |
IsInRole(String) |
Определяет, относится ли текущий субъект к группе пользователей Windows с заданным именем. |
Комментарии
Для этого метода существует четыре перегрузки. По соображениям производительности настоятельно рекомендуется использовать перегрузку IsInRole(SecurityIdentifier) .
IsInRole(Int32)
Определяет, относится ли текущий участник к группе пользователей Windows с заданным относительным идентификатором (RID).
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
RID группы пользователей Windows, в которой требуется проверить состояние членства участника.
Возвращаемое значение
Значение true
, если текущий субъект является членом заданной группы пользователей Windows (в конкретной роли); в противном случае — значение false
.
Примеры
В следующем примере кода показано использование IsInRole методов . Перечисление WindowsBuiltInRole используется в качестве источника для идентификаторов 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) рекомендуется использовать в качестве предпочтительной перегрузки для определения роли пользователя.
Примечание
В Windows Vista привилегии пользователя определяются контролем учетных записей (UAC). Члену встроенной группы "Администраторы" присваивается два маркера доступа на время выполнения: маркер доступа обычного пользователя и маркер доступа администратора. По умолчанию назначена роль обычного пользователя. При попытке выполнить задачу, требующую прав администратора, можно динамически повысить уровень роли с помощью диалогового окна Согласие. Код, выполняющий IsInRole метод , не отображает диалоговое окно Согласие. Код возвращает значение false, если вы используете стандартную роль пользователя, даже если вы находитесь в группе Встроенные администраторы. Вы можете повысить привилегии перед выполнением кода, щелкнув правой кнопкой мыши значок приложения и указав, что вы хотите запустить от имени администратора.
Относительные идентификаторы (RID) являются компонентами идентификатора безопасности (SID) группы пользователей Windows и поддерживаются для предотвращения проблем кроссплатформенной локализации. Многие учетные записи пользователей, локальные группы и глобальные группы имеют значение RID по умолчанию, которое является постоянным во всех версиях Windows.
Например, rid для роли BUILTIN\Administrators 0x220. Использование 0x220 в true
качестве входного параметра метода приводит к IsInRole возврату, если текущий субъект является администратором.
В следующих таблицах перечислены значения RID по умолчанию.
Встроенные пользователи | RID |
---|---|
DOMAINNAME\Administrator | 0x1F4 |
DOMAINNAME\Guest | 0x1F5 |
Встроенные глобальные группы | RID |
---|---|
DOMAINNAME\Domain Admins | 0x200 |
ИМЯ_ДОМЕНА\Пользователи домена | 0x201 |
DOMAINNAME\Domain Guest | 0x202 |
Встроенные локальные группы | RID |
---|---|
BUILTIN\Administrators | 0x220 |
BUILTIN\Users | 0x221 |
BUILTIN\Guest | 0x222 |
BUILTIN\Account Operators | 0x224 |
BUILTIN\Server Operators | 0x225 |
BUILTIN\Print Operators | 0x226 |
BUILTIN\Backup Operators | 0x227 |
BUILTIN\Replicator | 0x228 |
Применяется к
IsInRole(SecurityIdentifier)
Определяет, относится ли текущий субъект к группе пользователей Windows с заданным идентификатором безопасности (SID).
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
Параметры
Объект SecurityIdentifier, уникально определяющий группу пользователей Windows.
Возвращаемое значение
Значение true
, если текущий участник является членом заданной группы пользователей Windows; в противном случае — значение false
.
- Атрибуты
Исключения
sid
имеет значение null
.
Система 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
.
Примечание
В Windows Vista привилегии пользователя определяются контролем учетных записей (UAC). Члену встроенной группы "Администраторы" присваивается два маркера доступа на время выполнения: маркер доступа обычного пользователя и маркер доступа администратора. По умолчанию назначена роль обычного пользователя. При попытке выполнить задачу, требующую прав администратора, можно динамически повысить уровень роли с помощью диалогового окна Согласие. Код, выполняющий IsInRole метод , не отображает диалоговое окно Согласие. Код возвращает значение false, если вы используете стандартную роль пользователя, даже если вы находитесь в группе Встроенные администраторы. Вы можете повысить привилегии перед выполнением кода, щелкнув правой кнопкой мыши значок приложения и указав, что вы хотите запустить от имени администратора.
По соображениям производительности эта перегрузка является предпочтительной для определения роли пользователя.
Применяется к
IsInRole(WindowsBuiltInRole)
Определяет, относится ли текущий субъект к группе пользователей Windows с заданным WindowsBuiltInRole.
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.
Возвращаемое значение
Значение true
, если текущий участник является членом заданной группы пользователей Windows; в противном случае — значение 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) рекомендуется использовать в качестве предпочтительной перегрузки для определения роли пользователя.
Примечание
В Windows Vista привилегии пользователя определяются контролем учетных записей (UAC). Члену встроенной группы "Администраторы" присваивается два маркера доступа на время выполнения: маркер доступа обычного пользователя и маркер доступа администратора. По умолчанию назначена роль обычного пользователя. При попытке выполнить задачу, требующую прав администратора, можно динамически повысить уровень роли с помощью диалогового окна Согласие. Код, выполняющий IsInRole метод , не отображает диалоговое окно Согласие. Код возвращает значение 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, для которой требуется проверить членство.
Возвращаемое значение
Значение true
, если текущий участник является членом заданной группы пользователей Windows; в противном случае — значение 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) производительности рекомендуется использовать перегрузку в качестве предпочтительной перегрузки для определения роли пользователя.
Примечание
В Windows Vista привилегии пользователя определяются контролем учетных записей (UAC). Члену встроенной группы "Администраторы" присваивается два маркера доступа на время выполнения: маркер доступа обычного пользователя и маркер доступа администратора. По умолчанию назначена роль обычного пользователя. При попытке выполнить задачу, требующую прав администратора, можно динамически повысить уровень роли с помощью диалогового окна Согласие. В коде, который выполняет IsInRole метод, диалоговое окно Согласие не отображается. Код возвращает значение false, если вы находитесь в роли стандартного пользователя, даже если вы входите в группу Встроенные администраторы. Вы можете повысить привилегии перед выполнением кода, щелкнув правой кнопкой мыши значок приложения и указав, что вы хотите запустить от имени администратора.
Для встроенных ролей role
строка должна иметь вид BUILTIN\RoleNameHere. Например, чтобы проверить членство в роли администратора Windows, строка, представляющая роль, должна иметь значение BUILTIN\Administrators. Обратите внимание, что может потребоваться экранировать обратную косую черту. В следующей таблице перечислены встроенные роли.
Примечание
Написание ролей BUILTIN в строковом формате отличается от орфографии, используемой в перечислении WindowsBuiltInRole . Например, правописание администратора в перечислении — "Администратор", а не "Администраторы". При использовании этой перегрузки используйте правописание для роли из следующей таблицы.
Встроенные локальные группы |
---|
BUILTIN\Administrators |
BUILTIN\Users |
BUILTIN\Guest |
BUILTIN\Account Operators |
BUILTIN\Server Operators |
BUILTIN\Print Operators |
BUILTIN\Backup Operators |
BUILTIN\Replicator |
Для ролей, относящихся к компьютеру role
, строка должна быть в формате MachineName\RoleNameHere.
Для ролей, относящихся к домену role
, строка должна быть в формате "DomainName\RoleNameHere"; например, "SomeDomain\Domain Users
".
Примечание
В .NET Framework версии 1.0 role
параметр учитывает регистр. В .NET Framework версии 1.1 и более поздних версиях role
параметр не учитывает регистр.