容器和叶

Active Directory 域服务包含对象的层次结构,而其中除目录层次结构的根之外,每个对象实例均包含在其他对象中。 此层次结构的结构比目录和文件的文件系统更为灵活。 相反,Active Directory 架构中的规则确定了哪些对象类可包含其他对象类的实例。 例如,User 对象类的默认架构定义包括 Organizational-UnitContainer对象类,以作为潜在的上级;即,User 对象实例的潜在父对象或容器。 这意味着 Organizational-Unit 对象可包含 User 对象,但 User 对象无法包含其他 User 对象,除非 User 类的架构定义已更改。

除可用于定义服务器林中可存在的类和属性的架构对象(即,classSchemaattributeSchema 对象)之外,Active Directory 域服务中的任一对象均可能为容器。 具体而言,出现在对象类定义的 possSuperiorssystemPossSuperiors 属性中的任一对象类均可能为容器。 有关预定义对象类的容器的详细信息,请参阅 Active Directory 域服务参考。 可通过编程方式绑定到抽象架构,并使用 IADsClass::get_ContainmentIADsClass::get_PossibleSuperiors 方法获取给定类可包含或被包含的类。 有关详细信息,请参阅读取抽象架构。 此外,还可读取任一对象实例的 possibleInferiors 属性,从而确定此对象可包含的对象类。 请注意,possibleInferiors 是一个构造的属性,这意味着它是通过其他类定义的 possSuperiors/systemPossSuperiors 值计算所得,且实际并未存储在目录中。

请注意,Active Directory 架构会定义 Container 类。 如前所述,无需将对象作为 Container 类的实例从而变成一个容器。 此外,还有一个 Leaf 类;虽然此类的子类通常并非容器,但实际却可变为容器。

最后,可对与某一对象类关联的显示说明符设置标志,从而指示用户界面应始终将此类的实例显示为叶而不是容器。 此举有助于防止用户界面因过多容器而显得混乱。 有关详细信息,请参阅将容器视为叶节点