Python:更改注册表项的权限(取得所有权和完全控制权)以修改它们
我想循环遍历配置单元中的所有注册表项和子项,找到包含指定字符串的值,并将其替换为新字符串(我正在使用 到目前为止,我的代码适用于Python:更改注册表项的权限(取得所有权和完全控制权)以修改它们,python,registry,uac,file-ownership,Python,Registry,Uac,File Ownership,我想循环遍历配置单元中的所有注册表项和子项,找到包含指定字符串的值,并将其替换为新字符串(我正在使用 到目前为止,我的代码适用于所有权为管理员且管理员拥有完全控制权的密钥,但不适用于其他密钥 我可以设置所有密钥的权限,以便管理员可以完全控制,但我希望避免这种情况。相反,我只想更改与指定字符串匹配的密钥的权限。修改值后,应将权限设置回原来的状态 我从2012年就看到了这一点,但我希望避免为此安装软件 由于没有人回答这个问题,我想我应该分享我的解决方案,使用库设置给定密钥的权限: 这将为系统和管理员
所有权
为管理员
且管理员
拥有完全控制权
的密钥,但不适用于其他密钥
我可以设置所有密钥的权限,以便管理员可以完全控制,但我希望避免这种情况。相反,我只想更改与指定字符串匹配的密钥的权限。修改值后,应将权限设置回原来的状态
我从2012年就看到了这一点,但我希望避免为此安装软件 由于没有人回答这个问题,我想我应该分享我的解决方案,使用库设置给定密钥的权限: 这将为
系统
和管理员
将HKLM\SOFTWARE\MyKey
密钥权限设置为完全控制
,但其他组将没有读写权限。请注意,ksd
变量中包含原始ACL,直到我们对其运行.SetDacl()
,因此如果您想在操作后写回原始权限,只需先将其备份到另一个变量,如ksd\u bac
,然后运行win32api.RegSetKeySecurity(key,con.DACL\u SECURITY\u INFORMATION,ksd\u bac)
操作完成后
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)