看到一篇 有關 註冊表 權限的問題....
實際測試後 卻發現 ~~~取消的時候 無法 真正取消 恢復原來的權限~~
有人 了解 更細部的 權限控管嗎??
譬如: 通知 刪除 讀取控制 等等的 可以細到進階權限的方法嗎??
#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[8] ; 指向Sam键安全信息的安全描述符(security descriptor)指针。
$pKeyACL = $aKeySecur[6] ; 指向注册表键“访问控制列表(ACL)”的指针
; $pKeyACL = _GetSecurityDescriptorDacl($pKeySecurDesc) ; 另一种获取ACL指针的方法。
Dim $aExplicitAccess[1][4] ; 定义包含ACE信息的数组,为新用户设置新的权限。
$aExplicitAccess[0][0] = "administrator" ; 要设置权限的用户。
$aExplicitAccess[0][1] = $KEY_ALL_ACCESS ; KEY_ALL_ACCESS = 完全控制
$aExplicitAccess[0][2] = $SET_ACCESS ; 访问模式为SET_ACCESS
$aExplicitAccess[0][3] = $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)
|