我使用this方法授予\ deny访问注册表项的权限:
第一次GRANT_ACCESS
AddAceToObjectsSecurityDescriptor(wKey, SE_REGISTRY_KEY, UserName, TRUSTEE_IS_NAME, GENERIC_ALL, GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
然后是DENY_ACCESS
AddAceToObjectsSecurityDescriptor(wKey, SE_REGISTRY_KEY, UserName, TRUSTEE_IS_NAME, GENERIC_ALL, DENY_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
他们都工作了。在这两个电话之后,我试图再次拨打第一个电话以授予访问权限。但我不能这样做。没有错误消息,如ERROR_ACCESS_DENIED。 AddAceToObjectsSecurityDescriptor不返回错误代码。我的用户帐户是相应注册表项的所有者。此外,我仍然可以通过相同的UserName下的regedit手动更改权限。 AddAceToObjectsSecurityDescriptor方法有什么问题吗?
答案 0 :(得分: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);
答案 1 :(得分:0)
好吧,既然您上一次调用是对给定对象(注册表项)的DENY访问,那么您不能指望成功访问您拒绝访问的同一对象。这就是你得到ERROR_ACCESS_DENIED的原因。由于您是对象的所有者,因此您当然可以获取对象的所有权并根据需要重置安全描述符。