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

另请参阅

客户端/服务器访问控制

客户端/服务器访问控制函数

CreatePrivateObjectSecurityEx

DestroyPrivateObjectSecurity

GENERIC_MAPPING

GUID