Я использую Python os.unlink(), и получаю "доступ запрещен".
Возможная причина была бы, если бы файл оставался открытым каким-либо процессом или системой. Но я не вижу, что это так. Поиск файла в procxp дает не хит. Файл Excel, несколько лет. После перезагрузки все равно невозможно отсоединить его.
Процесс выполняется с повышенными обязательными метками и включенными привилегиями безопасности, резервного копирования и восстановления. Программа python выводит токен процесса (используя GetTokenInformation ()) после включения привилегий и сообщает
SeSecurityPrivilege 2 SE_PRIVILEGE_ENABLED
SeBackupPrivilege 2 SE_PRIVILEGE_ENABLED
SeRestorePrivilege 2 SE_PRIVILEGE_ENABLED
В отчетах Iacls разрешены только записи в файле (без запрещенных записей), два из которых имеют идентификаторы безопасности, которые применяются к текущему процессу в соответствии с CheckTokenMembership (). Разрешения в этих двух ACE
(I)(RX) -- 0x001200a9
(I)(F) -- 0x001f01ff
(Шестнадцатеричные числа являются компонентом маски разрешений ACE, полученным с помощью GetSecurityDescriptorDacl().)
Насколько я понимаю, что разрешения Windows работают, Windows пойдет по списку ACE, пропуская те, которые не относятся к токену. Для каждого применимого ACE он должен накапливать разрешения, которые запрашиваются и которые предоставляются этими ACE. Он прекращает поиск в списке, если в какой-то момент все запрошенные разрешения предоставлены. Поскольку в этом случае последний ACE предоставляет все разрешения, он должен был быть успешным.
Каталог, содержащий файл, имеет аналогичные разрешения. Нет запрещающих ACE, и те же два SID, которые применяются к токену, имеют разрешения
(OI)(CI)(RX)
(I)(OI)(CI)(F)
соответственно.
Что может быть причиной ошибки «отказано в доступе»?