检查对私有对象的访问

在允许客户端访问受保护的私有对象之前,受保护的服务器应用程序必须检查客户端的访问权限。 为此,服务器将 模拟令牌、安全描述符和一组请求的访问权限传递给 AccessCheck安全描述符的 DACL 中 (ACE) 访问控制条目指定允许或拒绝给各种受信人的访问权限。 AccessCheck 函数将每个 ACE 中的受信人与模拟令牌中标识的受信人进行比较。 有关用于授予或拒绝访问权限的算法的说明,请参阅 DACL 如何控制对对象的访问

AccessCheckAndAuditAlarm 函数执行类似的访问检查。 此外,它会根据安全描述符中的 SACL 在安全事件日志中生成审核记录。

AccessCheckByTypeAccessCheckByTypeAndAuditAlarm 函数类似于 AccessCheck 和 AccessCheckAndAuditAlarm,只不过它们允许你检查对对象的子对象(如属性集或属性)的访问。 AccessCheckByTypeResultListAccessCheckByTypeResultListAndAuditAlarm 函数也类似于 AccessCheck,只不过它们为对象属性和属性集的层次结构中的每个子对象提供访问检查结果。 这些函数使用 OBJECT_TYPE_LIST 结构来描述要检查其访问权限的对象层次结构。 生成审核消息的函数使用 AUDIT_EVENT_TYPE 枚举类型来指示要检查的对象是否为目录服务对象。 有关对象的层次结构及其子对象的详细信息,请参阅 控制对对象的属性的访问的 ACE

传递给 AccessCheck 和 AccessCheckAndAuditAlarm 函数的请求访问权限不得包含任何通用访问权限 服务器可以使用 MapGenericMask 函数根据 GENERIC_MAPPING 结构中指定的映射,将任何泛型访问权限转换为相应的特定和标准权限。

AreAllAccessesGrantedAreAnyAccessesGranted 函数将请求的访问掩码与授予的访问掩码进行比较。

有关使用 AccessCheck 函数的示例代码,请参阅 使用 C++ 中的 ACL 验证客户端访问

ConvertToAutoInheritPrivateObjectSecurity 函数以允许自动传播可继承 ACE 的格式创建并返回安全描述符。 此安全描述符包含当前安全描述符中继承和非继承的所有 ACE,并且采用 自相对 格式。 ConvertToAutoInheritPrivateObjectSecurity 函数通过将当前安全描述符中的所有 ACE 与其父安全描述符中的所有 ACE 进行比较来确定 ACE 是继承的还是非继承的。 这两组 ACE 之间可能不存在一对一的对应关系。 例如,允许读/写权限的 ACE 可以等效于两个 ACE:允许读取权限的 ACE 和允许写入权限的 ACE。 当当前安全描述符为父级时,可能无法提供父安全描述符。