Я использую 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)

соответственно.

Что может быть причиной ошибки «отказано в доступе»?

0