#include <lsasecur.au3>
Local Const $KEY_ALL_ACCESS = 0xF003F
; 注册表键的完整路径。
Local $sRegKey = "HKLM\Software\test"
; 获取现有的 安全描述符,安全描述符中包含 访问控制列表,由SE_INFO_DACL指定。
Local $pOldSecur = _SeGetRegKeySecurity($sRegKey, $SE_INFO_DACL)
; 获取 安全描述符中的 访问控制列表。
Local $pOldDacl = _SeGetSecurityDescriptorDacl($pOldSecur)
; 初始化 新的安全描述符。
Local $pSecur = _SeInitSecurityDescriptor()
; 获取 授权者SID。
Local $pTrustee = _SeLookupAccountName("Everyone")
; 创建 新的访问控制列表。
Local $pDacl = _SeSetEntriesInAcl1( _
$pTrustee, _ ; 授权者SID。
$KEY_ALL_ACCESS, _ ; 完全控制。
$SE_GRANT_ACCESS, _ ; 允许访问。
$SE_INHERIT_KEY_SUBKEY, _ ; 权限继承到 该键及所有子键。
$pOldDacl) ; 原有的 访问控制列表。
; 设置 安全描述符中的 访问控制列表。
_SeSetSecurityDescriptorDacl($pSecur, $pDacl)
Local $fStatus = _SeSetRegKeySecurity( _
$sRegKey, _ ; 注册表键的路径。
$SE_INFO_DACL, _ ; 要设置的安全信息类型。
$pSecur) ; 包含DACL的 安全描述符。
MsgBox(0, $fStatus, _SeFormatMsg())
; 释放内存,必须。
_SeLocalFree($pDacl)
_SeHeapFree($pTrustee)
_SeHeapFree($pSecur)
_SeHeapFree($pOldSecur)
这段代码将在原有的权限基础上,添加Everyone用户并允许其 对指定注册表键的所有访问。如果要替换原有权限,将_SeSetEntriesInAcl1函数的第5个参数 $pOldDacl 改为 $SE_NULL_DACL 即可。
_SeSetEntriesInAcl1 的第2个参数$KEY_ALL_ACCESS为完全控制,更多合法的取值参考 Registry Key Security and Access Rights |