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 之后。

注意 如果对对象的子级的共享访问权限不可用,则此函数不会将未受保护的 ACE 传播给子级。 例如,如果目录以独占访问权限打开,则当目录的安全性发生更改时,操作系统不会将未受保护的 ACE 传播到该目录的子目录或文件。
 
警告 如果打开提供的 句柄ACCESS_MASK 值为 MAXIMUM_ALLOWED,则 SetSecurityInfo 函数不会将 ACE 传播给子级。
 

要求

要求
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 aclapi.h
Library Advapi32.lib
DLL Advapi32.dll

另请参阅

ACL

访问控制

基本访问控制函数

GetNamedSecurityInfo

GetSecurityInfo

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

SE_OBJECT_TYPE

SID

SetNamedSecurityInfo