Arquitetura de extensão ADSI
As extensões ADSI são baseadas no modelo de agregação COM com vários aprimoramentos. As extensões devem seguir todas as regras COM. Para obter mais informações, consulte a especificação COM.
Aqui está uma revisão do modelo de agregação COM.
Um agregado, também conhecido como um objeto interno, é um objeto que um agregador cria. Seu objeto de extensão é uma agregação.
Um agregador, também conhecido como um objeto externo, é um objeto que cria uma agregação. ADSI é um agregador.
O objeto interno delega seu IUnknown ao IUnknown do agregador.
As extensões ADSI adicionam os seguintes aprimoramentos à agregação COM para atender aos seus requisitos:
- Permite que cada gravador de extensão estenda objetos ADSI. Um gravador de extensão pode registrar sua extensão com ADSI e não ser afetado pela existência de outras extensões. No modelo de agregação COM, o agregador deve ter o CLSID da agregação. O ADSI relaxa esse requisito, fazendo-se atuar como o agregador para todas as extensões. Portanto, em vez de formar uma camada de componentes aninhados, as extensões estão no mesmo nível.
- Permite um objeto, um IDispatch. O suporte à automação é um dos recursos mais importantes do ADSI. O suporte à automação é obtido porque o ADSI oferece suporte à interface IDispatch. Os gravadores de extensão são incentivados a oferecer suporte à interface IDispatch . No entanto, deve haver apenas uma interface IDispatch em um determinado objeto. O ADSI integra e coleta as várias interfaces IDispatch de diferentes extensões e as apresenta como um IDispatch consistente para o controlador de automação. Cada extensão, quando agregada, deve redirecionar suas chamadas IDispatch para o IDispatch fornecido pelo ADSI.
Todas essas soluções são possíveis devido aos serviços que o ADSI Object Manager fornece, que residem em cada provedor ADSI.
A figura a seguir mostra a arquitetura do Modelo de Extensão ADSI.
ADSI suporta dois níveis de extensão:
- Suporte de vinculação antecipada. Este é o primeiro nível de extensão. Uma extensão deve suportar o registro e implementar novas interfaces. Os consumidores de extensão devem usar ferramentas ou hosts de script que oferecem suporte à vinculação antecipada, por exemplo, Visual C++ , Visual Basic.
- Suporte de vinculação tardia. Isso acontece quando uma extensão satisfaz todos os requisitos de vinculação iniciais e implementa uma interface adicional, IADsExtension. Os implementadores de extensão podem usar qualquer ferramenta que opere como um controlador de automação, como o Windows Script Host, Active Server Pages ou HTML com VBScript.