SetNamedSecurityInfoW 函数 (aclapi.h)

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

语法

DWORD SetNamedSecurityInfoW(
  [in]           LPWSTR               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-terminated 字符串的指针,该字符串指定要为其设置安全信息的对象的名称。 这可以是 NTFS 文件系统、网络共享、注册表项、信号灯、事件、互斥体、文件映射或可等待计时器上的本地文件或远程文件或目录的名称。

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

[in] ObjectType

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

[in] SecurityInfo

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

[in, optional] psidOwner

指向标识对象所有者的 SID 结构的指针。 如果调用方没有 SeRestorePrivilege 常量(请参阅 Privilege Constants),则此 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)中的任何元素,系统会根据继承规则自动将任何可继承的 访问控制条目(ACE)传播到现有子对象。

可以将 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 应用]
目标平台 窗户
标头 aclapi.h
Advapi32.lib
DLL Advapi32.dll

另请参阅

ACL

访问控制

基本访问控制函数

GetNamedSecurityInfo

GetSecurityInfo

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

SE_OBJECT_TYPE

SID

SetSecurityInfo