Re[3]: Детект прав админа у пользователя
От: Pavel Dvorkin Россия  
Дата: 29.03.24 15:54
Оценка: 53 (1)
Здравствуйте, VladD2, Вы писали:

Во-первых, все же, видимо, надо LOGON32_LOGON_BATCH, так как LOGON32_LOGON_INTERACTIVE вернет при включенном UAC токен юзера, а не админа.


А дальше надо было не брать весь код, а применить к ситуации

VD> using (safeTokenHandle)

VD> {
VD> using WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle());

Не надо тут никакой имперсонализации,

VD> return WindowsIdentity.RunImpersonated(newId.AccessToken, () =>

VD> {
VD> // Вот тут возвращает false на учетку локального админа

И GetCurrent тут не нужен. Это для случая текущего юзера

VD> return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);


Есть WindowsIdentity newId. Вот по нему и надо сделать new WindowsPrincipal и у него IsInRole

WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle());
WindowsPrincipal principal = new WindowsPrincipal(newId);
return principal.IsInRole(WindowsBuiltInRole.Administrator);

using сам расставь.

и CloseHandle не забудь.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.