The Active Directory router component populates an ADSI provider table from the installed ADSI providers listed in the registry when it receives its first request from the client application. Registry information can be found in Installing the Example Provider Component.
Operations that make a request from a directory for a pointer to an interface on an Active Directory object come through a function (GetObject in Visual Basic or Java or ADsOpenObject or ADsGetObject in C or C++), or an interface method (IADsContainer::GetObject). In the following figure, the ADSI client application passes such a bind request to the ADSI router component (1). The router component identifies the ProgID for the provider from the first part of the ADsPath and uses CLSIDFromProgID to find the matching CLSID in the registry(2) and loads the proper provider component (3).
ADSI Component Interactions in the Example Provider.
In the preceding figure, the provider component creates an Active Directory object representing the named directory element. The ADSI support component does a QueryInterface on the requested interface identifier. Once a pointer to that interface is retrieved (4), as with all COM client/server implementations, it is then passed back to the client (5), and from then on the client application works directly with the provider component (6).