Олицетворение для Windows в Python 3 с использованием win32security

Я работал над способом доступа и изменения привилегий к файлу в Windows через Python 3, точнее, с помощью библиотеки win32security.

Из этих двух ответов Как разрешить/запретить доступ на запись к каталогу в Windows с помощью Python? и Установка разрешений для папок в Windows с помощью Python, я придумал следующее:

sd = win32security.GetFileSecurity(TESTFILE,win32security.DACL_SECURITY_INFORMATION)
dacl = sd.GetSecurityDescriptorDacl()
dacl.AddAccessAllowedAceEx(win32security.ACL_REVISION, 3, 2032127, win32security.LookupAccountName("", "theUser")[0])
sd.SetSecurityDescriptorDacl(1, dacl, 0)
win32security.SetFileSecurity(TESTFILE,win32security.DACL_SECURITY_INFORMATION,sd)

Это работает как шарм с файлами, которым не требуется приглашение администратора, но при доступе к защищенным файлам отображается эта ошибка:

pywintypes.error: (5, «SetFileSecurity», «Доступ запрещен».)

Следовательно, я ищу способ выдать себя за текущего пользователя с помощью win32security.ImpersonateLoggedOnUser(...). Однако я не могу найти правильные аргументы для указания в качестве параметра. В Python 2.6 была версия win32Security.LogonUser, но не версия 3.4.

Может ли кто-нибудь указать мне правильные аргументы или соответствующую документацию для этого?


person user3311142    schedule 03.02.2015    source источник
comment
Если SetFileSecurity уже не удалось, чего вы надеетесь добиться, выдавая себя за текущего пользователя? Вы не сказали, какая версия Windows; если это Vista или более поздняя версия, вы можете подняться, чтобы получить токен в группе администраторов.   -  person Eryk Sun    schedule 07.02.2015
comment
Спасибо за ваши комментарии @eryksun. Я использую Windows 8.1. Я попробовал «win32security.LogonUser», и вы правы, синтаксис сработал. Однако это не решило мою проблему. Как вы подразумевали, нелогично/бессмысленно выдавать себя за текущего пользователя, но причина, по которой я хотел это сделать (и то, что я считал целью «impersonateLoggedOnUser»), состоит в том, чтобы обойти приглашение администратора (показывая даже при использовании учетной записи администратора), чтобы разрешить программа для внесения следующих изменений на вашем компьютере. Ошибка отказа в доступе сохраняется, даже если я снижаю настройки UAC, чтобы никогда не уведомлять.   -  person user3311142    schedule 08.02.2015
comment
@eryksun - Если у вас есть понимание ... Я все равно скоро обновлю свой вопрос.   -  person user3311142    schedule 08.02.2015
comment
Олицетворение обычно используется службой для действий от имени другого пользователя. Если UAC включен и служба имеет SeTcbPrivilege (например, работает как локальный пользователь SYSTEM), то она может даже получить привилегированный токен администратора без необходимости повышения (поскольку это действительно было бы бессмысленно для процесса, который уже имеет привилегии действовать как часть ОС).   -  person Eryk Sun    schedule 08.02.2015