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 标志,并使用 pDacl 和 bDaclDefaulted 参数中的值。 如果此参数为 FALSE,则函数将清除SE_DACL_PRESENT标志,并忽略 pDacl 和 bDaclDefaulted 。
[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 |