Many directory services are hierarchical in nature and thus lend themselves to a hierarchical object model. A natural way of displaying these relationships is to use the familiar browser tree view, where double-clicking any node expands the node to show what it contains. Both the object representation and the browser representation are used in the following section to illustrate ADSI features.
In the following object model figure, a top-level system object contains one Namespace object for every installed ADSI provider.
Each of the Namespace objects is itself a container that contains the top-level root nodes of every server, domain, or whatever other kinds of directory-system objects are defined as roots in each directory service.
The following figure shows browser representation of this same set of objects using the Visual Basic-based Dsbrowse.exe utility that comes with this SDK. The top-level ADSI object has been expanded to show the Namespace objects.
When you expand each Namespace object in the browser, the ADSI provider implementation of that Namespace object supplies the information you are requesting. This gives you access to both the power and the limitations of each directory service. For example, expanding the WinNT Namespace object yields the list of Domain objects or root nodes currently connected to the network. Expanding NDS and NWCOMPAT each also give the top-level root nodes on the network. (However, expanding the LDAP Namespace object does not do the same thing because LDAP supplies no network API to determine which servers are currently connected to the network.)
ADSI supplies a set of predefined objects and interfaces so that client applications can interact with directory services using a uniform set of methods. However, ADSI may not provide access to the complete functionality of a particular directory service. To help use the full power of each directory service, ADSI supplies a schema model that directory service providers and third-party software vendors can use to extend functionality beyond the interfaces ADSI offers.
The root-node container objects found within each provider Namespace object include an ADSI schema container object. This object contains the definition of all the functionality for that provider. For more information, see ADSI Schema Model.