setSecurityDescriptorDacl 函数 (securitybaseapi.h)

SetSecurityDescriptorDacl 函数在 DACL) (自由访问控制列表中设置信息。 如果 安全描述符中已存在 DACL,则替换 DACL。

语法

BOOL SetSecurityDescriptorDacl(
  [in, out]      PSECURITY_DESCRIPTOR pSecurityDescriptor,
  [in]           BOOL                 bDaclPresent,
  [in, optional] PACL                 pDacl,
  [in]           BOOL                 bDaclDefaulted
);

参数

[in, out] pSecurityDescriptor

指向函数将 DACL 添加到的 SECURITY_DESCRIPTOR 结构的指针。 此安全描述符必须采用 绝对 格式,这意味着其成员必须是指向其他结构的指针,而不是指向连续数据的偏移量。

[in] bDaclPresent

指示安全描述符中是否存在 DACL 的标志。 如果此参数为 TRUE,则函数在 SECURITY_DESCRIPTOR_CONTROL 结构中设置 SE_DACL_PRESENT 标志,并使用 pDaclbDaclDefaulted 参数中的值。 如果此参数为 FALSE,则函数将清除SE_DACL_PRESENT标志,并忽略 pDaclbDaclDefaulted

[in, optional] pDacl

指向 ACL 结构的指针,该结构指定安全描述符的 DACL。 如果此参数为 NULL,则会向安全描述符分配 NULL DACL,从而允许对对象进行所有访问。 DACL 由安全描述符引用,而不是复制到安全描述符中。

[in] bDaclDefaulted

指示 DACL 源的标志。 如果此标志为 TRUE,则表示某个默认机制已检索 DACL。 如果 为 FALSE,则表示 DACL 已由用户显式指定。 函数将此值存储在 SECURITY_DESCRIPTOR_CONTROL 结构的 SE_DACL_DEFAULTED 标志中。 如果未指定此参数,则会清除 SE_DACL_DEFAULTED 标志。

返回值

如果函数成功,则函数返回非零值。

如果函数失败,则返回零。 要获得更多的错误信息,请调用 GetLastError。

注解

空的和不存在的 DACL 之间存在一个重要差别。 当 DACL 为空时,它不包含访问控制 条目 (ACE) ;因此,不会显式授予任何访问权限。 因此会隐式拒绝访问对象。

如果对象没有 DACL (pDacl 参数为 NULL) ,则不会向该对象分配任何保护,并且会授予所有访问请求。 若要帮助维护安全性,请使用 DACL 限制访问。

bDaclPresent 标志和 pDacl 参数的不同配置有三种可能的结果:

  • pDacl 参数指向 DACL 且 bDaclPresent 标志为 TRUE 时,将指定 DACL,并且它必须包含允许访问的 ACE 才能允许访问对象。
  • 如果 pDacl 参数未指向 DACL 且 bDaclPresent 标志为 TRUE,则指定 NULL DACL。 允许所有访问。 不应对 对象使用 NULL DACL,因为任何用户可以更改安全描述符的 DACL 和所有者。 这将干扰 对象的使用。
  • pDacl 参数不指向 DACL 且 bDaclPresent 标志为 FALSE 时,可以通过继承或默认机制为对象提供 DACL。

示例

有关使用此函数的示例,请参阅 为新对象创建安全描述符

要求

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

另请参阅

GetSecurityDescriptorDacl

InitializeSecurityDescriptor

IsValidSecurityDescriptor

低级别访问控制

低级别访问控制函数

SECURITY_DESCRIPTOR

SECURITY_DESCRIPTOR_CONTROL

SetSecurityDescriptorGroup

SetSecurityDescriptorOwner

SetSecurityDescriptorSacl