Здравствуйте!
Подскажите пожалуйста, как получить из ACE програмно флаг о том, что данное право унаследовано от родительского объекта (галочка такая есть во вкладке Security: Allow inheritable permissions from parent to propagate to this object). Пробовал смотреть флаг INHERITED_ACE, но он не всегда работает.
И вообще, как получить, куда права наследуются (только на этот объект, на этот объеки и его подкаталоги, ...).
Мож есть дока какая по этим флагам или пример. Смотрел Check_CD из MSDN — там наследований нет, а так все здорово.
Заранее спасибо.
Здравствуйте, 50Hz, Вы писали:
H>Здравствуйте! H>Подскажите пожалуйста, как получить из ACE програмно флаг о том, что данное право унаследовано от родительского объекта (галочка такая есть во вкладке Security: Allow inheritable permissions from parent to propagate to this object). Пробовал смотреть флаг INHERITED_ACE, но он не всегда работает.
Это как понять?
H>И вообще, как получить, куда права наследуются (только на этот объект, на этот объеки и его подкаталоги, ...).
Те же флаги.
H>Мож есть дока какая по этим флагам или пример. Смотрел Check_CD из MSDN — там наследований нет, а так все здорово.
Есть. MSDN.
Ты скажи чего тебе конкретно нужно или какой код не работает так, как ты предполагаешь.
50>Пробовал смотреть флаг INHERITED_ACE, но он не всегда работает
это как не всегда?
Кратко:
INHERITED_ACE — если флаг установлен в ACE это значит, что этот ACE унаследован
INHERIT_ONLY_ACE — если флаг установлен в ACE, то этот ACE не рассматривается при проверке доступа к данному объекту, однако может наследоваться дочерними объектами (зависит от OBJECT_INHERIT_ACE и CONTAINER_INHERIT_ACE)
CONTAINER_INHERIT_ACE — этот ACE может наследоваться в потомках, бесконечно долго
NO_PROPAGATE_INHERIT_ACE — этот ACE может наследоваться только в прямых потомках данного объекта, в потомках потомков этого ACE уже не будет
Здравствуйте, Dima2, Вы писали:
50>Пробовал смотреть флаг INHERITED_ACE, но он не всегда работает D>это как не всегда?
D>Кратко: D>INHERITED_ACE — если флаг установлен в ACE это значит, что этот ACE унаследован
D>INHERIT_ONLY_ACE — если флаг установлен в ACE, то этот ACE не рассматривается при проверке доступа к данному объекту, однако может наследоваться дочерними объектами (зависит от OBJECT_INHERIT_ACE и CONTAINER_INHERIT_ACE)
D>CONTAINER_INHERIT_ACE — этот ACE может наследоваться в потомках, бесконечно долго
D>NO_PROPAGATE_INHERIT_ACE — этот ACE может наследоваться только в прямых потомках данного объекта, в потомках потомков этого ACE уже не будет
Не всегда — это так: смотрю флаги к какой нибудь директории, которавя наследует права от родительского объекта. В Винде для этой директории стоит флаг, что разрешено раследование прав от парента. А флага INHERITED_ACE я к данной папек не нахожу. Может дгугой флаг за наследовавние отвечает? Но, что самое интересное, если для данной папки в Винде флажок этот убрать, а затем поставить наместо и нажать Apply, а затем запустить мою прогу, то влаг INHERITED_ACE в ней появляется. Как с этим бороться или что я не так делаю?
Еще: в Винде при установке прав есть выбор, куда их наследовать. Там 7 пунктов. Так вот какие комбинации флагов формируют эти пункты?
Здравствуйте, 50Hz, Вы писали:
H>Не всегда — это так: смотрю флаги к какой нибудь директории, которавя наследует права от родительского объекта. В Винде для этой директории стоит флаг, что разрешено раследование прав от парента.
Ты имееш ввиду checkbox "Allow inheritable permission....."
H>А флага INHERITED_ACE я к данной папек не нахожу.
Выражайся точнее, этот флаг может быть только в одном из ACE DACL для этого объекта, а что значит "INHERITED_ACE я к данной папек не нахожу" не совсем понятно.
Разрешение наследования не означает что должен стоять флаг INHERITED_ACE, этот флаг стоит у ACE уже унаследованных от какого-либо объекта, но его может не быть в ACE, которые непосредственно созданы тобой (т.е. не унаследованы).
H>Еще: в Винде при установке прав есть выбор, куда их наследовать. Там 7 пунктов. Так вот какие комбинации флагов формируют эти пункты?
Не понял что 7 пунктов, это где?
Приведи лучше код как ты смотриш флаги, иерархию объектов и какие флаги ты получаеш с помощью своей программы, я думаю это снимет массу вопросов.
Здравствуйте, Dima2, Вы писали:
H>Не всегда — это так: смотрю флаги к какой нибудь директории, которавя наследует права от родительского объекта. В Винде для этой директории стоит флаг, что разрешено раследование прав от парента. D>Ты имееш ввиду checkbox "Allow inheritable permission....."
Да! Именно этот флаг.
H>А флага INHERITED_ACE я к данной папек не нахожу. D>Выражайся точнее, этот флаг может быть только в одном из ACE DACL для этого объекта, а что значит "INHERITED_ACE я к данной папек не нахожу" не совсем понятно.
Да я знаю, но в том-то и дело, что нет ни в одном.
D>Разрешение наследования не означает что должен стоять флаг INHERITED_ACE, этот флаг стоит у ACE уже унаследованных от какого-либо объекта, но его может не быть в ACE, которые непосредственно созданы тобой (т.е. не унаследованы).
Как же тогда узнать, что данная ACE унаследована от родительского объекта?
H>Еще: в Винде при установке прав есть выбор, куда их наследовать. Там 7 пунктов. Так вот какие комбинации флагов формируют эти пункты? D>Не понял что 7 пунктов, это где?
Имел ввиду следующее:
— This folder only
— This folder, subfolders & files
— This folder & subfolders
— This folder & files
...
D>Приведи лучше код как ты смотриш флаги, иерархию объектов и какие флаги ты получаеш с помощью своей программы, я думаю это снимет массу вопросов.
Я просто взял прогу из MSDN: CHECK CD называется. Ей флаги и смотрю, а когда разберусь как все это дело наследуется, то вставлю кусок этого сэмпла себе в прогу.