nmgwddj 发表于 2011-9-7 00:46:25

请教advapi32.dll中,RegSetKeySecurity的用法。(已解决)

本帖最后由 nmgwddj 于 2011-9-7 11:56 编辑


参数         类型及说明
hKey         Long,指定一个项的句柄,或指定一个标准项名
SecurityInformation         Long,对要保存的信息进行描述的标志
pSecurityDescriptor         SECURITY_DESCRIPTOR,这个结构包含了注册表项新的安全特性设置
其中“对要保存的信息进行描述的标志”和“这个结构包含了注册表项新的安全特性设置” 的值 该如何设置?

给个例子即可,不能这里坐等代码,我可以自己研究研究。在网络上搜索了一下,都是一些关于vb的例子。看不太明白。

再此感谢!

nmgwddj 发表于 2011-9-7 01:50:19

在P版那里看到了

http://www.autoitx.com/forum.php?mod=viewthread&tid=6635&highlight=%D7%A2%B2%E1%B1%ED
Func _RegSetKeySecurity($hKey, $iLevel, $pSecurDesc)
      Local $iResult
      $iResult = DllCall("advapi32.dll", "long", "RegSetKeySecurity", _
                        "hWnd", $hKey, "int", $iLevel, "ptr", $pSecurDesc)
      Return SetError($iResult, 0, $iResult = 0)
但是不清楚$iLevel和 $pSecurDesc参数该如何设置,希望指点。

pusofalse 发表于 2011-9-7 02:45:58

#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

nmgwddj 发表于 2011-9-7 11:56:30

回复 3# pusofalse


    非常感谢,问题解决。

qq724174 发表于 2011-11-9 00:53:06

回复 3# pusofalse


    请问下,这个如果要替换子健权限是必须遍历还是本身支持?

pchome2000 发表于 2012-2-1 18:27:03

这个udf的功能很强大            {:face (327):}

qq1244521 发表于 2012-3-1 19:41:30

{:face (125):}超级版主 果然出手不凡啊 去试试

nuoyan 发表于 2012-3-27 20:56:59

好像不能继承权限子项

qq82015930 发表于 2012-9-23 16:08:16

本帖最后由 qq82015930 于 2012-9-24 00:33 编辑

回复 3# pusofalse


    Pusofalse版主 请教要改为只读应该怎么改?
虽然那英文翻译拉还是没看懂,不过用愚蠢的办法个个的试找到答案拉,谢谢{:face (270):}

q113960096 发表于 2013-4-7 07:14:59

回复 3# pusofalse


    How do I deny access to everybody
页: [1]
查看完整版本: 请教advapi32.dll中,RegSetKeySecurity的用法。(已解决)