Здравствуйте, VladD2, Вы писали:
VD>Так заработало. Но только с локальной учёткой. С доменной не работает.
VD>С если заменить LOGON32_LOGON_BATCH обратно на LOGON32_LOGON_INTERACTIVE, вроде работает. Но при этом\ bool isAdmin =
VD>VD>windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
VD>
VD>начинает возвращать false.
Тут вот какая ситуация. Начиная с Vista, при включенном UAC при логине админа создаются 2 токена — один админский, другой юзеровский. Вроде как LOGON32_LOGON_INTERACTIVE возвращает юзеровский, а LOGON32_LOGON_BATCH — админский. В конце концов можно попробовать оба, тебе же не работать с ними потом надо, а только выяснить.
Ну а что касается ролей, то можно попробовать IsInRole по RID (это младшая часть SID)
DOMAINNAME\Administrator 0x1F4
DOMAINNAME\Domain Admins 0x200
BUILTIN\Administrators 0x220
https://learn.microsoft.com/ru-ru/dotnet/api/system.security.principal.windowsprincipal.isinrole?view=net-7.0#system-security-principal-windowsprincipal-isinrole(system-int32)
Если хоть что-то есть хоть в одном токене — ответ да.