SetSecurityDescriptorDacl

【勇芳软件工作室】汉化HomePreviousNext

SetSecurityDescriptorDacl功能在自由访问控制列表(ACL)中设置信息。如果安全描述符中已经存在自由ACL,则会被替换。

BOOL SetSecurityDescriptorDacl(

PSECURITY_DESCRIPTOR 【pSecurityDescriptor】,//安全描述符的地址
BOOL 【bDaclPresent】,//存在自由ACL的标志
PACL 【pDacl】,//自由ACL的地址
BOOL 【bDaclDefaulted】//默认自由ACL的标志
); 

参数

【pSecurityDescriptor】

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

【bDaclPresent】

指定一个指示安全描述符中存在自由ACL的标志。如果此参数为TRUE,该函数将在SECURITY_DESCRIPTOR_CONTROL结构中设置SE_DACL_PRESENT标志,并使用【pDacl】【bDaclDefaulted】参数中的值。如果为FALSE,则该函数将清除SE_DACL_PRESENT标志,并忽略【pDacl】【bDaclDefaulted】.

【pDacl】

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

【bDaclDefaulted】

指定指示自由ACL的来源的标志。如果此标志为TRUE,则自动ACL已被某些默认机制检索。如果为FALSE,用户必须明确指定自由ACL。该函数将此值存储在SECURITY_DESCRIPTOR_CONTROL结构的SE_DACL_DEFAULTED标志中。如果未指定此参数,则清除SE_DACL_DEFAULTED标志。

返回值

如果函数成功,返回值不为零。

如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.

备注

空和不存在的自由ACL之间存在重要区别。当自由ACL是空的时,它不包含访问控制条目,并且没有明确授予访问权限。因此,对对象的访问被隐式地拒绝。另一方面,当对象没有DACL时,对对象没有分配保护,并且授予任何访问请求。

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

*当【pDacl】参数指向自由ACL并且【bDaclPresent】标志为TRUE时,将指定自适应ACL,并且必须包含访问允许的ACE以允许访问该对象。

*当【pDacl】参数不指向自由ACL并且【bDaclPresent】标志为TRUE时,将指定NULL自由ACL。允许所有访问。

*当【pDacl】参数不指向自由ACL并且【bDaclPresent】标志为FALSE时,可以通过继承或默认机制为对象提供自由ACL。

也可以看看

ACL, GetSecurityDescriptorDacl, InitializeSecurityDescriptor, IsValidSecurityDescriptor, SECURITY_DESCRIPTOR, SECURITY_DESCRIPTOR_CONTROL, SetSecurityDescriptorGroup, SetSecurityDescriptorOwner, SetSecurityDescriptorSacl