ctypes.windll.shell32.IsUserAdmin () не возвращает 1, когда пользователь находится в группе администраторов - PullRequest
2 голосов
/ 11 ноября 2011

Я пытаюсь использовать

ctypes.windll.shell32.IsUserAdmin ()

чтобы определить, был ли запущенный процесс запущен пользователем в группе администраторов, но я получаю противоречивые / неправильные результаты.

В Windows 7 Professional, при входе в систему как пользователь, который не является администратором, но является членом группы администраторов, я получаю

>>> ctypes.windll.shell32.IsUserAnAdmin()
0

Но пользователь в группе администраторов.

Я получаю ожидаемый ответ на компьютере с Windows Server 2008 при входе в систему с правами администратора;

>>> ctypes.windll.shell32.IsUserAnAdmin()
1

Кто-нибудь знает / имеет какие-либо подсказки относительно того, почему я получаю 0, возвращенный на коробке win7, даже если пользователь находится в группе администраторов?

  • Мне интересно, может ли проблема быть вызвана некоторым взаимодействием локальных администраторов / групп доменов, но мои знания там отрывочны в лучшем случае ..

Спасибо

Мт.

1 Ответ

10 голосов
/ 11 ноября 2011

Это UAC. Если вы бежите с повышенными правами, вы увидите ожидаемое поведение. Но со стандартным токеном под UAC у вашего пользователя нет прав администратора, даже если он находится в группе администраторов.

Для специальной учетной записи администратора UAC не применяется, и процессам под этим специальным пользователем всегда предоставляется привилегированный токен. Таким образом, вы видите разницу не с ОС, а с пользователем. Войдите в систему как специальная учетная запись администратора в Windows 7 и убедитесь, что она ведет себя так же, как и в случае с сервером 2008.

...