SetPrivateObjectSecurity 函数 (securitybaseapi.h)

SetPrivateObjectSecurity 函数修改私有对象的安全描述符

若要指定受保护的服务器是否支持自动继承 访问控制项 (ACE) ,请使用 SetPrivateObjectSecurityEx 函数。

语法

BOOL SetPrivateObjectSecurity(
  [in]           SECURITY_INFORMATION SecurityInformation,
  [in]           PSECURITY_DESCRIPTOR ModificationDescriptor,
  [in, out]      PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
  [in]           PGENERIC_MAPPING     GenericMapping,
  [in, optional] HANDLE               Token
);

参数

[in] SecurityInformation

指示要设置的安全描述符的各个部分。 此值可以是 SECURITY_INFORMATION 位标志的组合。

[in] ModificationDescriptor

指向 SECURITY_DESCRIPTOR 结构的指针。 SecurityInformation 参数指示的此安全描述符的各个部分将应用于 ObjectsSecurityDescriptor 安全描述符。

[in, out] ObjectsSecurityDescriptor

指向 指向SECURITY_DESCRIPTOR 结构的指针的指针。 此安全描述符必须采用 自相对 形式。 必须使用 HeapAlloc 函数从进程堆 (GetProcessHeap) 分配安全描述符的内存。

输入时,这是专用对象的当前安全描述符。 函数对其进行修改以生成新的安全描述符。 如有必要, SetPrivateObjectSecurity 函数会分配额外的内存以生成更大的安全描述符。

[in] GenericMapping

指向 GENERIC_MAPPING 结构的指针,该结构指定与每个通用访问权限对应的特定和标准访问权限。

[in, optional] Token

客户端 访问令牌 的句柄,代表其修改专用对象的安全性。 若要确保客户端已为新的所有者 安全标识符 提供合法值 (SID) ,此参数是必需的。 令牌必须打开才能TOKEN_QUERY访问。

返回值

如果函数成功,该函数将返回非零值。

如果函数失败,则返回零。 要获得更多的错误信息,请调用 GetLastError。

注解

此函数仅供资源管理器使用。 若要实现用于更新安全描述符的标准访问控制语义,资源管理器应在调用 SetPrivateObjectSecurity 之前验证是否满足以下条件:

  • 如果正在设置对象的所有者,则调用 进程 必须具有WRITE_OWNER权限或对象的所有者。
  • 如果正在设置对象的 任意访问控制列表 (DACL) ,则调用进程必须具有WRITE_DAC权限或是对象的所有者。
  • 如果正在设置对象的 系统访问控制列表 (SACL) ,则必须为调用进程启用SE_SECURITY_NAME特权。
如果不满足上述条件,则对此函数的调用不会失败;但是,不强制实施标准访问策略。

调用此函数的进程不应模拟客户端,因为客户端通常没有基础令牌操作所需的适当权限。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 securitybaseapi.h (包括 Windows.h)
Library Advapi32.lib
DLL Advapi32.dll

另请参阅

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

客户端/服务器访问控制概述

CreatePrivateObjectSecurity

DestroyPrivateObjectSecurity

GENERIC_MAPPING

GetPrivateObjectSecurity

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

SetFileSecurity

SetKernelObjectSecurity

SetPrivateObjectSecurityEx

SetUserObjectSecurity