Compartilhar via


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.

com aggregation model

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 extension model architecture

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.