SetNamedSecurityInfoA 函数 (aclapi.h)

SetNamedSecurityInfo 函数在指定对象的安全描述符中设置指定的安全信息。 调用方按名称标识对象。

语法

DWORD SetNamedSecurityInfoA(
  [in]           LPSTR                pObjectName,
  [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] pObjectName

指向 以 null 结尾的字符串的指针,该字符串指定要为其设置安全信息的对象的名称。 这可以是 NTFS 文件系统、网络共享、注册表项、信号灯、事件、互斥体、文件映射或可等待计时器上的本地或远程文件或目录的名称。

有关不同对象类型的字符串格式的说明,请参阅 SE_OBJECT_TYPE

[in] ObjectType

SE_OBJECT_TYPE枚举的值,指示由 pObjectName 参数命名的对象的类型。

[in] SecurityInfo

一组位标志,指示要设置的安全信息的类型。 此参数可以是 SECURITY_INFORMATION 位标志的组合。

[in, optional] psidOwner

指向标识对象所有者的 SID 结构的指针。 如果调用方没有 SeRestorePrivilege 常量 (请参阅 特权常量) ,则此 SID 必须包含在调用方令牌中,并且必须启用 SE_GROUP_OWNER 权限。 SecurityInfo 参数必须包含 OWNER_SECURITY_INFORMATION 标志。 若要设置所有者,调用方必须具有对对象的WRITE_OWNER访问权限或启用SE_TAKE_OWNERSHIP_NAME特权。 如果未设置所有者 SID,则此参数可以为 NULL

[in, optional] psidGroup

指向标识对象的主要组的 SID 的指针。 SecurityInfo 参数必须包含 GROUP_SECURITY_INFORMATION 标志。 如果未设置主组 SID,则此参数可以为 NULL

[in, optional] pDacl

指向 对象的新 DACL 的指针。 SecurityInfo 参数必须包含 DACL_SECURITY_INFORMATION 标志。 调用方必须具有对 对象的WRITE_DAC访问权限或对象的所有者。 如果未设置 DACL,则此参数可以为 NULL

[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) 对象的系统访问控制列表中的任何元素设置任意访问控制 (列表,系统会根据继承规则自动将) ) 的任何可继承访问控制项传播到现有子对象。

可以将 SetNamedSecurityInfo 函数用于以下类型的对象:

  • NTFS 上的本地或远程文件或目录
  • 本地或远程打印机
  • 本地或远程 Windows 服务
  • 网络共享
  • 注册表项
  • 信号灯、事件、互斥体和可等待计时器
  • 文件映射对象
  • 目录服务对象
SetNamedSecurityInfo 函数不会根据首选顺序重新排序允许访问或拒绝访问的 ACE。 将可继承的 ACE 传播到现有子对象时, SetNamedSecurityInfo 将继承的 ACE 按顺序放在子对象的 DACL 中的所有非继承 ACE 之后。

此函数以 纯文本形式传输信息。 除非系统已关闭签名,但不会执行加密,否则此函数传输的信息将进行签名。

更新由 UNC 路径指示的文件夹(例如 \Test\TestFolder)的访问权限时,将删除原始继承的 ACE,并且不包含完整卷路径。

示例

有关使用此函数的示例,请参阅 修改对象的 ACL获取对象所有权

注意

aclapi.h 标头将 SetNamedSecurityInfo 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

要求
最低受支持的客户端 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

SetSecurityInfo