kk_lee69 发表于 2014-5-1 00:34:14

修改注册表权限问题 ( 有更细部的权限可以控制吗??)

看到一篇 有關 註冊表 權限的問題....
實際測試後 卻發現 ~~~取消的時候 無法 真正取消 恢復原來的權限~~

有人 了解 更細部的 權限控管嗎??
譬如: 通知 刪除讀取控制 等等的可以細到進階權限的方法嗎??


#include <Array.au3>
#include <LocalSecurityAuthority.au3>

; 设置注册表Machine\Sam\Sam键的权限。
; ==================================================================================


; 返回包含Machine\Sam\Sam键安全信息的数组
$aKeySecur = _GetNamedSecurityInfo("Machine\Sam\Sam", $SE_REGISTRY_KEY,

$DACL_SECURITY_INFORMATION)

$pKeySecurDesc = $aKeySecur      ; 指向Sam键安全信息的安全描述符(security descriptor)指针。
$pKeyACL = $aKeySecur      ; 指向注册表键“访问控制列表(ACL)”的指针

; $pKeyACL = _GetSecurityDescriptorDacl($pKeySecurDesc)                ; 另一种获取ACL指针的方法。

Dim $aExplicitAccess      ; 定义包含ACE信息的数组,为新用户设置新的权限。

$aExplicitAccess = "administrator"                ; 要设置权限的用户。
$aExplicitAccess = $KEY_ALL_ACCESS      ; KEY_ALL_ACCESS = 完全控制
$aExplicitAccess = $SET_ACCESS                ; 访问模式为SET_ACCESS
$aExplicitAccess = $SUB_CONTAINERS_AND_OBJECTS_INHERIT      ; 权限继承其所有子键。

$pNewDacl = _SetEntriesInAcl($aExplicitAccess, $pKeyACL) ; 在原有的ACL基础上,新添加一个ACE。返回一个

新的ACL指针,用于_SetNamedSecurityInfo设置权限。

; 设置权限
$iResult = _SetNamedSecurityInfo("Machine\Sam\Sam", $SE_REGISTRY_KEY,

$DACL_SECURITY_INFORMATION, 0, 0, $pNewDacl, 0)

If $iResult = True Then
      Msgbox(0, "提升权限", "成功")
Else
      Msgbox(0, "提升权限", "失败,错误码:" & @ERROR)
EndIf

$aExplicitEntries = _GetExplicitEntriesFromACL($pNewDacl); 返回"访问控制列表ACL"中的“访问控制条目(?

or入口)ACE”的信息,包含在一个二维数组中。

_ArrayDisplay($aExplicitEntries)


; 删除刚刚添加的权限

_DeleteAce($pNewDacl, 0)      ; 删除第一个ACE(以0为基始,新添加的ACE始终都是在ACL的头部)。
$iResult = _SetNamedSecurityInfo("Machine\Sam\Sam", $SE_REGISTRY_KEY,

$DACL_SECURITY_INFORMATION, 0, 0, $pNewDacl, 0) ;重新设置权限

$aExplicitEntries = _GetExplicitEntriesFromACL($pNewDacl);再次返回ACE条目(or 入口?)信息。

_ArrayDisplay($aExplicitEntries)

damoo 发表于 2014-5-1 11:11:43

同问,这个我也想知道,就不知道可否再深入。
页: [1]
查看完整版本: 修改注册表权限问题 ( 有更细部的权限可以控制吗??)