0

我使用方法授予\拒绝对注册表项的访问权限:

第一个 GRANT_ACCESS

AddAceToObjectsSecurityDescriptor(wKey, SE_REGISTRY_KEY, UserName, TRUSTEE_IS_NAME, GENERIC_ALL, GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);

然后拒绝访问

AddAceToObjectsSecurityDescriptor(wKey, SE_REGISTRY_KEY, UserName, TRUSTEE_IS_NAME, GENERIC_ALL, DENY_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);

他们都工作了。在这两个电话之后,我试图再次拨打第一个电话以授予访问权限。但我做不到。没有像 ERROR_ACCESS_DENIED 这样的错误消息。AddAceToObjectsSecurityDescriptor 不返回错误代码。我的用户帐户是相应注册表项的所有者。此外,我仍然可以在相同的用户名下通过 regedit 手动更改权限。AddAceToObjectsSecurityDescriptor 方法有问题吗?

4

2 回答 2

1

尝试使用 DENY_ACCESS 和 SET_ACCESS。例子:

AddAceToObjectsSecurityDescriptor(wKey, SE_REGISTRY_KEY, UserName, TRUSTEE_IS_NAME, GENERIC_ALL, SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);

AddAceToObjectsSecurityDescriptor(wKey, SE_REGISTRY_KEY, UserName, TRUSTEE_IS_NAME, GENERIC_ALL, DENY_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
于 2015-08-24T09:41:37.267 回答
0

好吧,由于您最后一次调用是拒绝对给定对象(注册表键)的访问,因此您不能期望成功访问您刚刚拒绝访问的同一对象。这就是您收到 ERROR_ACCESS_DENIED 的原因。由于您是对象的所有者,您当然可以取得对象的所有权并根据需要重置安全描述符。

于 2012-06-10T16:24:33.487 回答