Platform SDK: Active Directory, ADSI, and Directory Services |
This section provides sample code and guidelines for reading from the abstract schema, which provides a subset of the information stored in the attributeSchema and classSchema objects in the schema container. If you need to retrieve information that's not available in the abstract schema, you can read the information directly from the schema container as described in Reading attributeSchema and classSchema Objects.
Use the "LDAP://schema" binding string to bind to an IADsContainer pointer on the abstract schema. You can use this pointer to enumerate the class, attribute, and syntax entries in the abstract schema. You can also use the GetObject method to retrieve individual entries.
// 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")
Use a similar binding string, "LDAP://schema/object", to bind directly to a class or attribute entry in the abstract schema. In this string, object is the lDAPDisplayName of a class or attribute. For classes bind to the IADsClass interface; for attributes, 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")
In addition, the IADs interface provides the IADs::get_Schema method. This method returns the ADsPath for the object's class in abstract schema binding string format. So, if you have an IADs pointer to an object, you can bind to its class in the abstract schema using the ADsPath returned from IADs::get_Schema.
For classes, here are the key properties provided by the abstract schema:
Method (Property) | Meaning |
---|---|
IADsClass::get_Abstract | Indicates whether this is an abstract class. |
IADsClass::get_Auxiliary | Indicates whether this is an auxiliary class. |
IADsClass::get_AuxDerivedFrom | Array of auxiliary classes this class derives from. |
IADsClass::get_Container | Indicates whether object's of this class can contain other objects, which is true if any class includes this class in its list of possibleSuperiors. |
IADsClass::get_DerivedFrom | Array of classes this class is derived from. |
IADsClass::get_MandatoryProperties | Retrieves an array of the mandatory properties that must be set for an instance of the class. The returned list includes all the mustContain and systemMustContain values for the class and the classes from which it is derived (including superclasses and auxiliary classes). |
IADsClass::get_OID | Retrieves the governsID of the class. |
IADsClass::get_OptionalProperties | Retrieves an array of the optional properties that might be set for an instance of the class. The returned list includes all the mayContain and systemMayContain values for the class and the classes from which it is derived (including superclasses and auxiliary classes). |
IADsClass::get_PossibleSuperiors | Retrieves an array of the possSuperiors values for the class, which indicates the object classes that can contain objects of this class. |
The abstract schema is stored in the subSchema object in the schema container. To get the distinguished name of the subSchema object, bind to rootDSE and read the subSchemaSubEntry property, as described in Serverless Binding and RootDSE. Note that it's much easier to read the abstract schema by binding to LDAP://schema, than by binding directly to the subSchema object.