Здравствуйте, 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 не забудь.