Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


kaZilla
Цитата:
Надо сделать автоскрипт на смену резрешений в реестре для ветки »
согласен с Maza Faka, такие задачи лучше решать "в лоб"... теоретически, установку прав можно сделать без сторонних утилит (где-то тут мелькал линк на описалово), но сия задача весьма трудоемкая и даже оффсайт AutoIT рекомендует использовать сторонние модули (Set ACL properties in Windows)... я проверил предложенный ptrex COM объект - работает, НО мне не удалось завести метод $SET_ACCESS в режиме правки текущего ACL (без добавления нового), кроме того не удалось добавить ACL при отсутствии прав на ветку, но при наличии владения (RegEdit в этом случае добавляет права нормально)... поэтому я пока не вижу смысла в полной чистке всех прав ($ACTN_CLEARDACL), т.к. добавить их потом нет никакой возможности, а заявленная способность нескольких операций "за раз" увы, не работает... и тем не менее для большинства простых случаев этот способ будет полезен, рабочий пример (значения констант нужно скопировать с топика ptrex):
Код: Выделить весь код
$strFileName   = "HKCU\TEST"
$strUsername   = "S-1-5-32-544" ; Administrators
$strPermission = "read"
; Снятие наследуемых разрешений
$SetACL1 = ObjCreate("SetACL.SetACLCtrl.1")
If IsObj($SetACL1) Then
    $nError = $SetACL1.SetObject($strFileName, $SE_REGISTRY_KEY)
    $nError = $SetACL1.SetObjectFlags($INHPARNOCOPY, 0, True, False)
    $nError = $SetACL1.SetAction($ACTN_SETINHFROMPAR)
    $nError = $SetACL1.Run
EndIf
; Удаление заданной учетной записи из списков доступа
$SetACL1 = ObjCreate("SetACL.SetACLCtrl.1")
If IsObj($SetACL1) Then
    $nError = $SetACL1.SetObject($strFileName, $SE_REGISTRY_KEY)
    $nError = $SetACL1.AddTrustee($strUsername, "", True, False, $ACTN_REMOVETRUSTEE, True, False)
    $nError = $SetACL1.SetAction($ACTN_TRUSTEE)
    $nError = $SetACL1.Run
EndIf
; Установка прав для заданной учетной записи
$SetACL1 = ObjCreate("SetACL.SetACLCtrl.1")
If IsObj($SetACL1) Then
    $nError = $SetACL1.SetObject($strFileName, $SE_REGISTRY_KEY)
    $nError = $SetACL1.SetAction($ACTN_ADDACE)
    $nError = $SetACL1.AddACE($strUsername, True, $strPermission, $INHPARNOCHANGE, False, $SET_ACCESS, $ACL_DACL)
    $nError = $SetACL1.Run
EndIf
Прямой линк на оффсайт SetACL: http://sourceforge.net/projects/setacl/
там же лежит CMD-вариант утилиты, хотя для серьезных задач рекомендую SubInACL

Отправлено: 11:53, 21-11-2008 | #1191