找回密码
 加入
搜索
查看: 6161|回复: 10

修改注册表权限问题

[复制链接]
发表于 2009-6-4 09:55:32 | 显示全部楼层 |阅读模式
本帖最后由 qqgghh1 于 2009-6-4 10:42 编辑

您好:
再次请教:winxp系统下注册表有权限变更的选项,但是WIN2K系统下没有,如果现在我要对WIN2K系统下注册表中HKEY_LOCAL_MACHINE主键下某一键值进行修改,让一般用户登陆也能进行某项操作。比如更改电源管理方案。如何实现。昨天的提问中pusofalse 给了关于提升注册表权限的函数,这个在2K和XP下都可以使用吗?为什么2K的注册表中没有权限选项?恳请老大提供协助,谢谢!
以下,两个添加权限的例子,不要拿来做坏事。。。-,-

#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)
 楼主| 发表于 2009-6-4 10:00:07 | 显示全部楼层
备注下上面的函数是pusofalse兄提供的。pusofalse兄,能否抽空再帮小弟看看这个需求啊,谢谢!
 楼主| 发表于 2009-6-4 10:01:06 | 显示全部楼层
备注下上面的函数是pusofalse兄提供的。pusofalse兄,能否抽空再帮小弟看看这个需求啊,谢谢!
 楼主| 发表于 2009-6-4 10:42:37 | 显示全部楼层
万能的神啊,这个在2K,XP,2003下都生效。已测试0K,再次感谢pusofalse兄
发表于 2009-9-2 09:40:40 | 显示全部楼层
晕死。你测试生效的发出来分享一下啊。!
发表于 2009-9-12 23:17:33 | 显示全部楼层
没有看到$KEY_ALL_ACCESS的值是多少啊?
发表于 2009-9-12 23:20:20 | 显示全部楼层
Re 6#:
还真是无聊啊,你发过的提问贴都不知去看下的吗?
发表于 2009-9-16 10:37:30 | 显示全部楼层
哪个生效的?帖出来给我们
发表于 2012-3-10 14:59:29 | 显示全部楼层
LocalSecurityAuthority.au3这个参数哪里有?有的贡献个啦
发表于 2012-4-14 14:59:52 | 显示全部楼层
提示  以下错误   
"O:\test.au3"(19,76) : warning: $KEY_ALL_ACCESS: 使用前并未进行声明.
$aExplicitAccess[0][1] = $KEY_ALL_ACCESS        ; KEY_ALL_ACCESS = 完全控制
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"O:\test.au3"(28,71) : error: 表达式错误
$iResult = _SetNamedSecurityInfo("Machine\Sam\Sam", $SE_REGISTRY_KEY,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"O:\test.au3"(40,1) : error: 表达式错误
or
^
"O:\test.au3"(19,76) : error: $KEY_ALL_ACCESS: 未声明的全局变量.
$aExplicitAccess[0][1] = $KEY_ALL_ACCESS        ; KEY_ALL_ACCESS = 完全控制
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
O:\test.au3 - 3 错误, 1 警告
issing E
发表于 2014-4-29 00:37:51 | 显示全部楼层
回复 1# qqgghh1


    你好

這篇文章中的 提升 SAM 的權限 經過測試 好像 可以提升 但是取消的時候 好像會錯誤  造成 權限還是卡住   可以多講解一下嗎
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-17 00:51 , Processed in 0.079914 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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