我们已经知道如何使用注册表编辑器(regedit.exe)更改注册表项和子项的所有权。本文告诉您如何使用命令行更改注册表项的所有权和授予权限。
Windows 有 takeown.exe
和 icacls.exe
控制台实用程序来 更改文件/文件夹 的所有权和权限,但是没有此类内置工具可使用命令行来更改注册表项的所有权。需要一个名为 SetACL
的第三方工具来执行此任务。
SetACL:命令行参数
在继续之前,让我们看一下使用 SetACL 更改文件/注册表所有权和权限的命令行语法。
SetACL -on objectname -ot objecttype -actn action -on:指定SetACL应该在其上操作的对象的路径(例如,文件,注册表项,网络共享,服务或打印机)。 -ot:指定对象类型。要更改文件或文件夹的所有权或权限,请使用对象类型 file 。对于注册表项,请使用对象类型 reg -actn:指定针对SetACL对指定对象应执行的操作。要获得所有权,请将操作设置为 setowner 。要更改权限,请将操作设置为 ace 。
(有关对象,类型和支持的操作的完整列表,请参阅SetACL文档)
使用命令行获取注册表项的所有权并分配权限
要使用SetACL更改注册表项的所有权和权限,请执行以下操作:
- 下载SetACL,将内容解压缩到一个文件夹中。
- 将相应版本的工具
setacl.exe
(32位和64位)复制到文件夹中,例如d:\tools
。 - 假设您要更改注册表分支的所有权
HKEY_CLASSES_ROOT\CLSID\{D63B10C5-BB46-4990-A94F-E40B9D520160}
并授予该Administrators
组完全控制权限。从管理命令提示符
窗口中运行以下两个命令:
SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{D63B10C5-BB46-4990-A94F-E40B9D520160}" -ot reg -actn setowner -ownr "n:Administrators" SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{D63B10C5-BB46-4990-A94F-E40B9D520160}" -ot reg -actn ace -ace "n:Administrators;p:full"
SetACL:更改注册表项的所有权并分配完全权限
第一个命令将 Administrators组
设置为键值的所有者
第二个命令将 Administrators
为密钥组分配 完全控制
权限。
该 Administrators组
拥有项及其子项,还具有完全控制权限,您可以使用注册表编辑器进行检查。
要点:要更改此键和子键
的所有权和权限,请 -rec Yes
在最后添加参数。有关更多信息,请看下图。
更改注册表项权限时出错?
尝试更改您无权访问的文件/文件夹或注册表项的权限时,SetACL报告以下错误。为防止发生此错误,请确保先更改密钥的所有权,然后再更改其许可权。
SetACL finished with error(s): SetACL error message: The call to SetNamedSecurityInfo () failed Operating system error message: Access is denied.
递归所有权和分配权限(此键和子键)
给 Administrators
所有权 并 授予键及其子键完全控制权限, 请在最后添加 -rec Yes
, 如下所示:
SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{D63B10C5-BB46-4990-A94F-E40B9D520160}" -ot reg -actn setowner -ownr "n:Administrators" -rec Yes SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{D63B10C5-BB46-4990-A94F-E40B9D520160}" -ot reg -actn ace -ace "n:Administrators;p:full" -rec Yes
设置 TrustedInstaller 为所有者 owner
若要设置 TrustedInstaller
为注册表项的所有者并递归分配其完全控制权限,请使用相同的命令行语法。您只需要更改 帐户/组
名称。这是您这次需要运行的命令:
SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{D63B10C5-BB46-4990-A94F-E40B9D520160}" -ot reg -actn setowner -ownr "n:nt service\trustedinstaller" -rec Yes SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{D63B10C5-BB46-4990-A94F-E40B9D520160}" -ot reg -actn ace -ace "n:"nt service\trustedinstaller";p:full" -rec Yes
运行上述命令后,将 TrustedInstaller
(NT SERVICE\TrustedInstaller
)设置为键和子键的所有者。
附加信息
- Microsoft SubInACL:在Windows
XP时代,Microsoft还发布了另一个名为SubInACL的控制台工具。它是Windows XP /
2003资源工具包工具的一部分。SubInACL可用于设置文件/文件夹和注册表的所有权和权限。但是,由于SubInACL已被Microsoft终止,并且默认为32位文件和注册表路径(在Windows
64位系统上),这使得它在某些情况下不能在Windows 64位版本中使用。 - Microsoft Regini.exe:您还有另一个名为regini.exe的内置控制台工具,该工具可让您使用基于文本的文件来更改注册表权限。但是,regini.exe无法更改注册表项的所有权。有关regini.exe的更多信息,请打开“命令提示符”窗口,然后键入
regini.exe /?
- Helge Klein SetACL 是广泛推荐的工具,它无疑填补了SubInACL留下的空白,并且还解决了的缺点
regini.exe
。与本文讨论的内容相比,SetACL可以做的事情更多。
Take Ownership of Registry Key & Assign Permissions Using Command-line
SetACL Download
How to change registry values or permissions from a command line or a script regini.exe