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。 该函数将 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 的 DACL,函数会将 ACE 重新排序为两个组。 第一个组具有直接应用于对象的 ACE。 第二个组继承了 ACE。 此排序可确保非继承 ACE 优先于继承的 ACE。 有关详细信息,请参阅 DACL 中的 ACE 顺序。
该函数在新的安全描述符的控制位中设置SE_DACL_AUTO_INHERITED和SE_SACL_AUTO_INHERITED标志。
该函数不会更改与 DACL 中拒绝访问的 ACE 相关的访问允许 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 |