Windows NT 4.0版提供了一组新的高级访问控制功能,用于处理访问控制列表(ACL)和安全描述符。这些功能可以更容易地创建新的ACL或修改现有的ACL。
SetEntriesInAcl功能创建一个新的ACL。SetEntriesInAcl可以为ACL指定一组全新的ACE,也可以将新的ACE与现有ACL的ACE进行合并。SetEntriesInAcl使用EXPLICIT_ACCESS结构数组来指定新ACE的信息。每个EXPLICIT_ACCESS结构包含描述单个ACE的信息。此信息包括访问权限,ACE的类型,控制ACE继承的标志以及标识受托人的TRUSTEE结构。
向现有ACL添加新的ACE
1.使用GetSecurityInfo或GetNamedSecurityInfo函数从对象的安全描述符获取现有的DACL或SACL。
2.使用BuildExplicitAccessWithName功能填写EXPLICIT_ACCESS结构,并提供描述每个新ACE所需的信息。
3.Call SetEntriesInAcl,指定现有的ACL和EXPLICIT_ACCESS结构的数组。SetEntriesInAcl分配和初始化ACL及其ACE。
4.将SetSecurityInfo或SetNamedSecurityInfo函数附加到对象的安全描述符中。
有关将新ACE合并到现有ACL的示例,请参阅允许访问.
SetEntriesInAcl功能将新的ACE信息与ACL中的现有ACE进行合并。考虑这种情况,例如,现有的ACL授予对指定的受托人的访问权限,并且EXPLICIT_ACCESS结构拒绝对同一受托人的访问。在这种情况下,SetEntriesInAcl为受托人添加了一个新的拒绝访问的ACE,并删除或修改受信任者的现有访问允许ACE。
SetEntriesInAcl功能可确保ACE在新ACL中的顺序正确。该函数将所有访问被拒绝的ACE定位在ACL的ACE列表的开头,超出任何访问允许的ACE。
高级访问控制功能使用TRUSTEE结构来识别受信任者。此结构使您能够使用名称字符串或SID来标识受托人。如果使用名称,则SetEntriesInAcl功能执行分配SID缓冲区并查找与该帐户名对应的SID的任务。有两个帮助函数BuildTrusteeWithSid和BuildTrusteeWithName,它使用指定的SID或名称初始化TRUSTEE结构。另外三个帮助函数GetTrusteeForm,GetTrusteeName和GetTrusteeType检索TRUSTEE结构的各个成员的值。