在 Windows 7 或更高版本中,有没有办法拒绝程序在注册表中任何位置的写入权限?
请说明您的答案适用于哪个版本的 Windows。
答案1
在 Windows Vista 及更高版本中,您可以通过设置完整性级别将相关程序的级别设为“低”或“不受信任”。
一种方法是使用icacls.exe
公用事业设置程序的完整性级别。例如,假设您要将 notepad.exe 设置为低完整性级别。在提升的命令提示符下,键入:
icacls notepad.exe /setintegritylevel low
这可以防止记事本影响具有中等或高完整性级别的系统级对象,例如系统文件、各种注册表配置单元等。
根据所讨论的计划,这可能是非常好的,也可能是非常馊主意。
完整性级别可能令人困惑。请花时间仔细查看文档,学习如何发现当前完整性级别,并了解您尝试进行的更改的全部影响。
是非常做这件事时要小心,因为很容易把事情搞得一团糟,特别是如果你对自己所做的事情不是很确定的话。备份,在副本上做实验,不要在家里尝试,秘书会否认所有知识,等等。
答案2
虽然不是直接的,但可以创造一种可以发挥作用的情况。
您可以在注册表中为用户帐户设置安全设置,但不能为程序设置安全设置。
您还可以以其他用户身份启动程序。因此,理论上您可以创建一个无法修改的用户帐户,然后专门将该用户设置为无权修改该特定注册表项,但授予其读取该项的权限,并可选择写入其他项。
注意: 限制对注册表的访问可能会导致奇怪的错误,因为程序通常不会检查它们想要写入的注册表部分是否可以实际读取,特别是如果您在 HKEY_Current User 部分设置权限。
设置权限
打开注册表并导航到要更改权限的项。右键单击该项(文件夹)并选择权限...
从这里您可以授予权限。注意完全控制 = 执行所有操作,包括:查询值、设置值、创建子项、枚举子项、通知、创建链接、删除、写入 dac、写入所有者和读取控制。
特殊权限允许您设置个人权利。为此,请按下按钮Advanced。