Технически, если вы хотите увидеть, является ли участник локальным администратором учетная запись , то вы можете получить идентификатор безопасности (SID) текущего пользователя через User
свойство для WindowsIdentity
класса , вот так (статический GetCurrent
метод возвращает текущего пользователя Windows):
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
string sid = windowsIdentity.User.ToString();
Свойство User
возвращает SID пользователя, у которого есть ряд предопределенных значений для различных групп и пользователей .
Затем вы должны проверить, имеет ли SID следующий шаблон, указывающий, что это учетная запись локального администратора (которая является известным SID) :
S-1-5- {другие детали SID} -500
Или, если вы не хотите разбирать строки, вы можете использовать класс SecurityIdentifier
:
// Get the built-in administrator account.
var sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid,
null);
// Compare to the current user.
bool isBuiltInAdmin = (windowsIdentity.User == sid);
Однако я подозреваю, что вы действительно хотите знать, что текущий пользователь является членом группы администраторов для локального компьютера. Вы можете получить этот SID, используя WellKnownSidType
из BuiltinAdministratorsSid
:
// Get the SID of the admin group on the local machine.
var localAdminGroupSid = new SecurityIdentifier(
WellKnownSidType.BuiltinAdministratorsSid, null);
Затем вы можете проверить Groups
свойство на WindowsIdentity
пользователя, чтобы узнать, является ли этот пользователь членом локальной группы администраторов, например:
bool isLocalAdmin = windowsIdentity.Groups.
Select(g => (SecurityIdentifier) g.Translate(typeof(SecurityIdentifier))).
Any(s => s == localAdminGroupSid);