读取抽象架构
本主题提供了从抽象架构读取数据的代码示例和准则,抽象架构提供了存储在模式容器中 attributeSchema 和 classSchema 对象的数据子集。 要检索抽象架构中不可用的数据,可直接从架构容器中读取数据,如读取 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 | 检索必须为该类实例设置的必需属性数组。 返回的列表包括该类及其派生类(包括超级类和辅助类)的所有 mustContain 和 systemMustContain 值。 |
IADsClass.OID | 检索类的 governsID。 |
IADsClass.OptionalProperties | 检索可以为该类实例设置的可选属性数组。 返回的列表包括该类及其派生类(包括超级类和辅助类)的所有 mayContain 和 systemMayContain 值。 |
IADsClass.PossibleSuperiors | 检索类的 possibleSuperiors 值数组,它表示可以包含该类对象的对象类。 |
抽象模式存储在架构容器中的 subSchema 对象中。 要获取 subSchema 对象的可分辨名称,请绑定到 rootDSE 并读取 subSchemaSubEntry 属性,如无服务器绑定和 RootDSE中所述。 请注意,通过绑定到“LDAP://schema”来读取抽象架构比直接绑定到 subSchema 对象更高效。