读取抽象架构

本主题提供了一个代码示例和从抽象架构中读取的指南,该示例提供架构容器中 attributeSchemaclassSchema 对象中存储的数据子集。 若要检索抽象架构中不可用的数据,请直接从架构容器读取数据,如 Read 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。 如果有指向对象的 IAD 指针 ,则可以使用从 IADs.Schema 返回的 ADsPath 在抽象架构中绑定到其类。

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

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

 

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