读取抽象架构

本主题提供了从抽象架构读取数据的代码示例和准则,抽象架构提供了存储在模式容器中 attributeSchemaclassSchema 对象的数据子集。 要检索抽象架构中不可用的数据,可直接从架构容器中读取数据,如读取 attributeSchema 和 classSchema 对象

使用“LDAP://schema”绑定字符串绑定到抽象架构上的 IADsContainer 指针。 使用此指针可枚举抽象架构中的类、属性和语法条目。 还可以使用 IADsContainer.GetObject 方法来检索单个条目。

// Bind to the abstract schema.
IADsContainer *pAbsSchema = NULL;
hr = ADsGetObject(L"LDAP://schema",
                  IID_IADsContainer,
                  (void**)&pAbsSchema);
' Bind to the abstract schema.
Dim adschema As IADsContainer
Set adschema = GetObject("LDAP://schema")

使用类似的绑定字符串“LDAP://schema/<object>”,可直接绑定到抽象架构中的类或属性条目。 在该字符串中,“<object>”是类或属性的 lDAPDisplayName。 对于类,绑定到 IADsClass 接口;对于属性,绑定到 IADsProperty 接口。

// Bind to the user class entry in the abstract schema.
IADsClass *pClass;
hr = ADsGetObject(L"LDAP://schema/user",
                  IID_IADsClass,
                  (void**)&pClass);
Bind to the user class entry in the abstract schema.
Dim userclass As IADsClass
Set userclass = GetObject("LDAP://schema/user")

此外,IADs 接口还提供 IADs.Schema属性。 此属性以抽象架构绑定字符串格式返回对象类的 ADsPath。 如果有一个指向对象的 IADs 指针,则可以使用 IADs.Schema 返回的 ADsPath 与抽象架构中的类绑定。

对于类,下表列出了抽象架构提供的关键属性。

properties 含义
IADsClass.Abstract 表明这是否是一个抽象类。
IADsClass.Auxiliary 表明这是否是一个辅助类。
IADsClass.AuxDerivedFrom 此类派生自的辅助类数组。
IADsClass.Container 表示此类的对象是否可以包含其他对象,如果有任何类将该类包含在其 possibleSuperiors 列表中,则其值为 true。
IADsClass.DerivedFrom 此类派生出的类数组。
IADsClass.MandatoryProperties 检索必须为该类实例设置的必需属性数组。 返回的列表包括该类及其派生类(包括超级类和辅助类)的所有 mustContainsystemMustContain 值。
IADsClass.OID 检索类的 governsID。
IADsClass.OptionalProperties 检索可以为该类实例设置的可选属性数组。 返回的列表包括该类及其派生类(包括超级类和辅助类)的所有 mayContainsystemMayContain 值。
IADsClass.PossibleSuperiors 检索类的 possibleSuperiors 值数组,它表示可以包含该类对象的对象类。

 

抽象模式存储在架构容器中的 subSchema 对象中。 要获取 subSchema 对象的可分辨名称,请绑定到 rootDSE 并读取 subSchemaSubEntry 属性,如无服务器绑定和 RootDSE中所述。 请注意,通过绑定到“LDAP://schema”来读取抽象架构比直接绑定到 subSchema 对象更高效。