首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:更改注册表项的权限(取得所有权和完全控制权)以修改它们

Python:更改注册表项的权限(取得所有权和完全控制权)以修改它们
EN

Stack Overflow用户
提问于 2017-05-07 23:08:50
回答 1查看 779关注 0票数 2

我想遍历配置单元中的所有注册表项和子项,找到包含指定字符串的值并将其替换为新的字符串(我正在使用winreg修改此code )

到目前为止,我的代码在ownershipAdministrator的键上工作,并且Administrator对其有full control,但在其他键上没有。

我可以设置所有密钥的权限,以便管理员拥有完全控制权限,但我希望避免这种情况。相反,我只想更改与指定字符串匹配的键的权限。修改该值后,应将权限设置回原来的状态。

我从2012年就看到了这款answer,但我想避免为它安装软件。

EN

回答 1

Stack Overflow用户

发布于 2020-01-15 06:32:44

由于没有人回答这个问题,我想我应该分享我使用pywin32库在给定密钥上设置权限的解决方案:

代码语言:javascript
复制
import win32con as con
import win32api
import ntsecuritycon as ntc
import pywintypes
import win32security

key = win32api.RegOpenKey(con.HKEY_LOCAL_MACHINE, 'Software\\MyKey', 0, con.KEY_ALL_ACCESS)
ksd = win32api.RegGetKeySecurity(key, con.DACL_SECURITY_INFORMATION)

acl = pywintypes.ACL()
acl.AddAccessAllowedAce(ntc.GENERIC_ALL, win32security.ConvertStringSidToSid('S-1-5-18'))
acl.AddAccessAllowedAce(ntc.GENERIC_ALL, win32security.ConvertStringSidToSid('S-1-5-32-544'))

ksd.SetDacl(True, acl, False)

win32api.RegSetKeySecurity(key, con.DACL_SECURITY_INFORMATION, ksd)

这会将SYSTEMAdministratorsHKLM\SOFTWARE\MyKey密钥权限设置为FULL CONTROL,但没有其他组具有读或写访问权限。请注意,在我们对ksd变量运行.SetDacl()之前,该变量中都有原始的ACL,所以如果您想在操作后写回原始权限,只需先将其备份到另一个变量,如ksd_bac,然后在操作后运行win32api.RegSetKeySecurity(key, con.DACL_SECURITY_INFORMATION, ksd_bac)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43833089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档