使用ACL和ACE

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

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.使用GetSecurityInfoGetNamedSecurityInfo函数从对象的安全描述符获取现有的DACL或SACL。

2.使用BuildExplicitAccessWithName功能填写EXPLICIT_ACCESS结构,并提供描述每个新ACE所需的信息。

3.Call SetEntriesInAcl,指定现有的ACL和EXPLICIT_ACCESS结构的数组。SetEntriesInAcl分配和初始化ACL及其ACE。

4.将SetSecurityInfoSetNamedSecurityInfo函数附加到对象的安全描述符中。

有关将新ACE合并到现有ACL的示例,请参阅允许访问.

SetEntriesInAcl功能将新的ACE信息与ACL中的现有ACE进行合并。考虑这种情况,例如,现有的ACL授予对指定的受托人的访问权限,并且EXPLICIT_ACCESS结构拒绝对同一受托人的访问。在这种情况下,SetEntriesInAcl为受托人添加了一个新的拒绝访问的ACE,并删除或修改受信任者的现有访问允许ACE。

SetEntriesInAcl功能可确保ACE在新ACL中的顺序正确。该函数将所有访问被拒绝的ACE定位在ACL的ACE列表的开头,超出任何访问允许的ACE。

高级访问控制功能使用TRUSTEE结构来识别受信任者。此结构使您能够使用名称字符串或SID来标识受托人。如果使用名称,则SetEntriesInAcl功能执行分配SID缓冲区并查找与该帐户名对应的SID的任务。有两个帮助函数BuildTrusteeWithSidBuildTrusteeWithName,它使用指定的SID或名称初始化TRUSTEE结构。另外三个帮助函数GetTrusteeFormGetTrusteeNameGetTrusteeType检索TRUSTEE结构的各个成员的值。