Ответ 1
Технически, если вы хотите узнать, является ли член локальной учетной записью администратора, вы можете получить идентификатор безопасности (SID) текущего пользователя через User
свойство в WindowsIdentity
class, так (статический 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
пользователя, чтобы узнать, является ли этот пользователь членом локальной admin, так:
bool isLocalAdmin = windowsIdentity.Groups.
Select(g => (SecurityIdentifier) g.Translate(typeof(SecurityIdentifier))).
Any(s => s == localAdminGroupSid);