ConvertToAutoInheritPrivateObjectSecurity 函数 (securitybaseapi.h)
ConvertToAutoInheritPrivateObjectSecurity 函数将安全描述符及其访问控制列表 (ACL) 转换为支持自动传播可继承访问控制项 (ACE) 的格式。
语法
BOOL ConvertToAutoInheritPrivateObjectSecurity(
[in, optional] PSECURITY_DESCRIPTOR ParentDescriptor,
[in] PSECURITY_DESCRIPTOR CurrentSecurityDescriptor,
[out] PSECURITY_DESCRIPTOR *NewSecurityDescriptor,
[in, optional] GUID *ObjectType,
[in] BOOLEAN IsDirectoryObject,
[in] PGENERIC_MAPPING GenericMapping
);
参数
[in, optional] ParentDescriptor
指向对象的父容器 的安全描述符 的指针。 如果没有父容器,则此参数为 NULL。
[in] CurrentSecurityDescriptor
指向 对象的当前安全描述符的指针。
[out] NewSecurityDescriptor
指向变量的指针,该变量接收指向新分配的 自相对安全描述符的指针。 调用方负责调用 DestroyPrivateObjectSecurity 函数来释放此安全描述符。
[in, optional] ObjectType
指向 GUID 结构的指针,该结构标识与 CurrentSecurityDescriptor 参数关联的对象类型。 如果对象没有 GUID,则此参数必须为 NULL。
[in] IsDirectoryObject
如果 为 TRUE,则新对象是容器,可以包含其他对象。 如果 为 FALSE,则新对象不是容器。
[in] GenericMapping
指向 GENERIC_MAPPING 结构的指针,该结构指定从每个泛型权限到对象特定权限的映射。
返回值
如果函数成功,该函数将返回非零值。
如果函数失败,则返回零。 要获得更多的错误信息,请调用 GetLastError。
注解
ConvertToAutoInheritPrivateObjectSecurity 函数尝试确定是否从父安全描述符的 SACL) 继承 (DACL) 和系统访问控制列表中的 ACE (SACL) 。 函数将 ParentDescriptor 参数传递给 CreatePrivateObjectSecurityEx 函数,以获取仅包含继承 ACE 的 ACL。 然后,它将这些 ACE 与原始安全描述符中的 ACE 进行比较,以确定继承了哪些原始 ACE。 ACE 不需要一对一匹配。 例如,允许对受托人进行读写访问的 ACE 可以等效于两个 ACE:允许读取访问的 ACE 和允许写入访问的 ACE。
原始安全描述符中与从父安全描述符继承的 ACE 等效的任何 ACE 都标有INHERITED_ACE标志,并添加到新的安全描述符中。 原始安全描述符中的所有其他 ACE 都作为非遗传 ACE 添加到新的安全描述符中。
如果原始 DACL 没有任何继承的 ACE,则函数在新的安全描述符的控制位中设置SE_DACL_PROTECTED标志。 同样,如果未继承 SACL 中的 ACE,则设置SE_SACL_PROTECTED标志。
对于继承 ACE 的 ACL,函数将 ACE 重新排序为两组。 第一个组具有直接应用于 对象的 ACE。 第二个组继承了 ACE。 此排序可确保非继承 ACE 优先于继承的 ACE。 有关详细信息,请参阅 DACL 中 ACE 的顺序。
函数在新安全描述符的控制位中设置SE_DACL_AUTO_INHERITED和SE_SACL_AUTO_INHERITED标志。
函数不会更改允许访问 ACE 相对于 DACL 中拒绝访问的 ACE 的顺序,因为这样做会更改生成的安全描述符的语义。 如果函数无法在不更改语义的情况下转换 DACL,则它将 DACL 保持不变,并设置SE_DACL_PROTECTED标志。
新的安全描述符具有与原始安全描述符相同的所有者和主组。
新的安全描述符等效于原始安全描述符,因此调用方无需任何访问权限或 特权 ,也可以将安全描述符更新为新格式。
此函数适用于 ACL_REVISION 和 ACL_REVISION_DS ACL。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | securitybaseapi.h (包括 Windows.h) |
Library | Advapi32.lib |
DLL | Advapi32.dll |