找回密码
 加入
搜索
查看: 7220|回复: 9

[系统综合] 请教advapi32.dll中,RegSetKeySecurity的用法。(已解决)

 火.. [复制链接]
发表于 2011-9-7 00:46:25 | 显示全部楼层 |阅读模式
本帖最后由 nmgwddj 于 2011-9-7 11:56 编辑
参数         类型及说明
hKey         Long,指定一个项的句柄,或指定一个标准项名
SecurityInformation         Long,对要保存的信息进行描述的标志
pSecurityDescriptor         SECURITY_DESCRIPTOR,这个结构包含了注册表项新的安全特性设置
其中“对要保存的信息进行描述的标志”和“这个结构包含了注册表项新的安全特性设置” 的值 该如何设置?

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

再此感谢!
 楼主| 发表于 2011-9-7 01:50:19 | 显示全部楼层
在P版那里看到了

http://www.autoitx.com/forum.php ... =%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], 0, $iResult[0] = 0)
但是不清楚  $iLevel  和 $pSecurDesc参数该如何设置,希望指点。
发表于 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

评分

参与人数 1金钱 +30 收起 理由
3mile + 30 学习了

查看全部评分

 楼主| 发表于 2011-9-7 11:56:30 | 显示全部楼层
回复 3# pusofalse


    非常感谢,问题解决。
发表于 2011-11-9 00:53:06 | 显示全部楼层
回复 3# pusofalse


    请问下,这个如果要替换子健权限是必须遍历还是本身支持?
发表于 2012-2-1 18:27:03 | 显示全部楼层
这个udf的功能很强大              
发表于 2012-3-1 19:41:30 | 显示全部楼层
超级版主 果然出手不凡啊 去试试
发表于 2012-3-27 20:56:59 | 显示全部楼层
好像不能继承权限子项
发表于 2012-9-23 16:08:16 | 显示全部楼层
本帖最后由 qq82015930 于 2012-9-24 00:33 编辑

回复 3# pusofalse


    Pusofalse版主 请教要改为只读应该怎么改?
虽然那英文翻译拉还是没看懂,不过用愚蠢的办法个个的试找到答案拉,谢谢
发表于 2013-4-7 07:14:59 | 显示全部楼层
回复 3# pusofalse


    How do I deny access to everybody
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-29 07:18 , Processed in 0.091792 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表