Часто я хочу установить разрешение только для папки, но все программы, которые я пробовал, будут рекурсивно проходить через все субфайлы и папки во время процесса. Есть ли способ избежать этого, поскольку это происходит медленно?
Что я пробовал:
Проводник Windows: не работает, как вы можете видеть в графическом интерфейсе, он перебирает все подобъекты.
SetAcl.exe от Хельге Кляйн: не удается, как показал отличный инструмент под названием ProcessMonitor
SetACL.exe -on "PATH" -ot file -actn ace -ace "n:USER;p:read_ex;i:np;m:set" -rec no
Для тех, кто не знает, предложение «i: np» означает, что разрешение применяется только к «этой папке».
icacls: сбой (монитор процессов)
icacls "PATH" /grant USER:(NP)RX
(выполняет то же самое, что и команда setacl выше)
(командные строки только примеры)
В современный Windows API автоматически рекурсивно проходит через дерево каталогов, когда программа изменяет права доступа к каталогу, нет возможности предотвратить это. Windows также недостаточно умен, чтобы понимать, когда конкретное изменение не влияет на дочерние объекты.
Однако, если программа использует старую Функция SetFileSecurity этого не происходит.
Так что вы можете попробовать поискать старые утилиты, например, написанные для Windows 2000 или более ранней версии.
Или вы можете использовать встроенный cacls
инструмент командной строки, пользоваться им не так удобно, как icacls
и официально не рекомендуется, но он не влияет на дочерние объекты, если вы не передадите /t
вариант.