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 |