InitializeAcl函数创建一个新的ACL结构。
ACL是访问控制列表。
BOOL InitializeAcl(
PACL 【ACL】, | //访问控制列表的地址 |
DWORD 【nAclLength】, | //访问控制列表的大小 |
DWORD 【dwAclRevision】 | //访问控制列表的修订级别 |
); |
参数
【ACL】
指向由此函数初始化的ACL结构。
【nAclLength】
指定【ACL】参数指向的缓冲区的长度(以字节为单位)。该值必须足够大以包含ACL头和所有访问控制条目(ACE)存储在ACL中。
在计算ACL的大小时,请注意,ACL中的ACE中的ACE会将其SidStart成员指定的SidStart成员复制到ACE结构,从ACE的{ 989796059}成员。因此,ACL中添加的ACL {ACL)需要ACE的空间减少SidStart成员的大小(DWORD)。
例如,大到足以包含单个ACCESS_ALLOWED_ACE的ACL缓冲区的大小是:
cbAcl = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE)
+ GetLengthSid(pSid) - sizeof(DWORD) ;
另一个例子:大小足够容纳七个ACCESS_DENIED_ACE结构的ACL缓冲区的大小是:
cbAcl = sizeof(ACL) + 7 * ( sizeof(ACCESS_DENIED_ACE) - sizeof(DWORD)) +
GetLengthSid(pSid1)+ GetLengthSid(pSid2)+ ...+ GetLengthSid(pSid7)
【dwAclRevision】
指定ACL的修订级别。此参数必须设置为当前版本级别,此版本级别定义为此版本的Windows的ACL_REVISION。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
由此函数初始化的ACL不包含ACE。它是空的,而不是一个不存在的ACL。如果一个空的ACL被应用于一个对象,它隐含地拒绝对该对象的所有访问。
也可以看看
ACCESS_ALLOWED_ACE, ACCESS_DENIED_ACE, ACL, AddAccessAllowedAce, AddAccessDeniedAce, AddAce, AddAuditAccessAce, DeleteAce, GetAce, GetAclInformation, IsValidAcl, SetAclInformation, SID