setSecurityInfo 函数 (aclapi.h)
SetSecurityInfo 函数在指定对象的安全描述符中设置指定的安全信息。 调用方通过句柄标识对象。
若要设置对象的 SACL,调用方必须启用 SE_SECURITY_NAME 特权。
语法
DWORD SetSecurityInfo(
[in] HANDLE handle,
[in] SE_OBJECT_TYPE ObjectType,
[in] SECURITY_INFORMATION SecurityInfo,
[in, optional] PSID psidOwner,
[in, optional] PSID psidGroup,
[in, optional] PACL pDacl,
[in, optional] PACL pSacl
);
参数
[in] handle
要为其设置安全信息的对象的句柄。
[in] ObjectType
SE_OBJECT_TYPE枚举的成员,指示句柄参数标识的对象类型。
[in] SecurityInfo
一组位标志,指示要设置的安全信息的类型。 此参数可以是 SECURITY_INFORMATION 位标志的组合。
[in, optional] psidOwner
指向标识对象所有者的 SID 的指针。 SID 必须是可以分配为安全描述符的所有者 SID 的 SID。 SecurityInfo 参数必须包含OWNER_SECURITY_INFORMATION标志。 如果未设置所有者 SID,此参数可以为 NULL 。
[in, optional] psidGroup
指向标识对象主组的 SID 的指针。 SecurityInfo 参数必须包含GROUP_SECURITY_INFORMATION标志。 如果未设置主组 SID,此参数可以为 NULL 。
[in, optional] pDacl
指向对象的新 DACL 的指针。 除非 SecurityInfo 参数的值包含 DACL_SECURITY_INFORMATION 标志,否则将忽略此参数。 如果 SecurityInfo 参数的值包括 DACL_SECURITY_INFORMATION 标志,并且此参数的值设置为 NULL,则会向所有人授予对该对象的完全访问权限。 有关 NULL DACL 的信息,请参阅 创建 DACL。
[in, optional] pSacl
指向对象的新 SACL 的指针。 SecurityInfo 参数必须包含以下任何标志:SACL_SECURITY_INFORMATION、LABEL_SECURITY_INFORMATION、ATTRIBUTE_SECURITY_INFORMATION、SCOPE_SECURITY_INFORMATION或BACKUP_SECURITY_INFORMATION。 如果设置SACL_SECURITY_INFORMATION或SCOPE_SECURITY_INFORMATION,则调用方必须启用SE_SECURITY_NAME特权。 如果未设置 SACL,此参数可以为 NULL 。
返回值
如果函数成功,该函数将返回ERROR_SUCCESS。
如果函数失败,它将返回 WinError.h 中定义的非零错误代码。
注解
如果要 (DACL) 或 (SACL) 对象的系统访问控制列表中的任何元素设置任意可继承访问控制列表,系统会根据 ACE 继承规则自动将任何可继承的访问控制条目 (ACE) 传播到现有子对象。
可以将 SetSecurityInfo 函数与以下类型的对象一起使用:
- NTFS 上的本地或远程文件或目录
- Named pipes
- 本地或远程打印机
- 本地或远程 Windows 服务
- 网络共享
- 注册表项
- 信号灯、事件、互斥体和可等待计时器
- 进程、线程、作业和文件映射对象
- 窗口工作站和桌面
- 目录服务对象
SetSecurityInfo 函数不会根据首选顺序对允许的访问重新排序或拒绝访问 ACE。 将可继承的 ACE 传播到现有子对象时, SetSecurityInfo 会将继承的 ACE 按顺序放置在子对象的 DACL 中的所有非继承 ACE 之后。
要求
最低受支持的客户端 | Windows XP [桌面应用|UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用|UWP 应用] |
目标平台 | Windows |
标头 | aclapi.h |
Library | Advapi32.lib |
DLL | Advapi32.dll |