我们已经了解如何使用注册表编辑器 (regedit.exe) 更改注册表项和子项的所有权。本文将向你介绍如何通过命令行更改注册表项的所有权并授予权限的方法。
在 Windows 系统中, 可以使用 takeown.exe
和 icacls.exe
更改文件或文件夹的所有权和权限, 但并没有类似工具可以直接通过命令行更改注册表项的所有权。为此, 我们可以使用第三方工具 SetACL 来实现。
SetACL 的命令行参数简介
SetACL 是一个强大的工具, 可用于更改文件、注册表项、网络共享等对象的所有权和权限。以下是其命令行的基本语法
SetACL -on objectname -ot objecttype -actn action
-on
: 指定操作的对象路径 (如文件、注册表项, 网络共享, 服务, 打印机等)-ot
: 指定对象类型。对于文件或文件夹, 使用file
;对于注册表项, 使用reg
-actn
: 指定操作类型。setowner
用于更改所有权,ace
用于更改权限
有关更详细的说明, 请参考 SetACL文档
更改注册表项的所有权和权限
下载并安装 SetACL
- 前往 SetACL 官方网站, 下载并解压工具
- 将
setacl.exe
(根据系统选择 32 位或 64 位版本) 复制到一个文件夹, 例如D:\tools
注册表项的所有权并分配权限
假设要更改注册表项 HKEY_CLASSES_ROOT\CLSID\{D63B10C5-BB46-4990-A94F-E40B9D520160}
的所有权, 并授予 Administrators
组完全控制权限
在 管理员模式 下打开命令提示符, 运行以下命令
-
设置 Administrators 组为所有者
SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{D63B10C5-BB46-4990-A94F-E40B9D520160}" -ot reg -actn setowner -ownr "n:Administrators"
-
授予 Administrators 组完全控制权限
SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{D63B10C5-BB46-4990-A94F-E40B9D520160}" -ot reg -actn ace -ace "n:Administrators;p:full"
你可以使用注册表编辑器进行检查, 该 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
(NT SERVICE\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
设置为项和子项的所有者
更改注册表项权限时出错?
尝试更改你无权访问的文件/文件夹或注册表项的权限时, SetACL 报告以下错误。为防止发生此错误, 请确保先更改其所有权, 然后再更改控制权限
SetACL finished with error(s):
SetACL error message: The call to SetNamedSecurityInfo () failed
Operating system error message: Access is denied.
扩展阅读
-
Microsoft SubInACL
在 Windows XP 时代, Microsoft 还发布了另一个名为 SubInACL 的控制台工具。它是 Windows XP/2003 资源工具包工具的一部分。它可以更改文件、文件夹和注册表的所有权和权限。但由于 Microsoft 已停止使用 SubInACL, 并且它默认为 32 位文件和注册表路径 (在 Windows 64 位系统上), 因此在某些情况下无法在 64 位版本的 Windows 中使用 -
Microsoft Regini.exe
Regini.exe 是另一个内置工具, 可通过脚本更改注册表权限, 但无法更改注册表项的所有者 -
Helge Klein SetACL
SetACL 是功能最全面的工具, 支持更改所有权、权限, 并填补了 SubInACL 和 Regini 的不足
原文
Take Ownership of Registry Key & Assign Permissions Using Command-line
How to change registry values or permissions from a command line or a script