使用 IADs 接口

ADSI,目录服务的每个元素都由 ADSI 对象表示,该对象是支持标准 COM IUnknown 接口以及 IDispatchIADs 接口的组件对象模型 (COM) 对象。 IAD 为 ADSI 对象提供基本维护功能。

每个 ADSI 对象都必须支持此接口,该接口的作用如下:

  • 按名称、类或 ADsPath 提供对象标识。
  • 标识用于管理创建和删除对象的对象容器。
  • 获取对象架构定义。
  • 将对象属性加载到属性缓存,并将更改提交到永久性目录存储。
  • 访问和修改属性缓存中的对象属性值。

IADs 接口旨在确保 ADSI 对象为网络管理员和目录服务提供商提供各种基础目录服务的高效且一致的表示形式。

adsi object supporting the iads interface

上图显示了一个通用 ADSI 对象,该对象支持基本接口 IADsIADsPropertyListIUnknownIDirectoryObjectIDispatch。 此类 ADSI 对象通过其支持的接口管理基础目录服务的数据存储中的数据。 此数据称为对象的属性,获取和设置这些属性的例程称为属性方法。 只读属性有一个获取属性值的属性方法。 读取/写入属性有两种方法:一种设置值的方法和一种获取值的方法。 属性是使用属性缓存在每个 ADSI 对象上实现的。 IADs::get_ADsPathIADs::put_ADsPath 是属性方法的示例。 属性方法对于 Visual Basic 和其他支持直接引用属性的自动化客户端来说并不明显。 例如,Visual Basic 使用 Object.ADsPath 语法直接引用 IADs::ADsPath。 有关详细信息,请参阅接口属性方法

此外,ADSI 对象与其他 ADSI 对象交互,并通过方法直接与命名空间进行交互。 方法立即执行。 方法的示例包括 IADs::SetInfoIADs::GetInfo

属性、属性方法和方法均通过标准 COM 接口进行访问。

ADSI 对象由其 ADsPath 唯一标识。 例如,LDAP 命名空间的 ADsPath 为"LDAP://MyServer/DC=Fabrikam,DC=COM"。 有关 ADsPaths 的详细信息,请参阅ADSI 绑定。 对于熟悉 COM 名字对象的程序员,这在概念上类似于 COM 名字对象显示名称。

任何包含其他 ADSI 对象的 ADSI 对象(称为 ADSI 容器对象)也支持 IADsContainer 接口,该接口提供用于管理对象包含的 ADSI 对象的创建、删除和枚举的方法和属性。 下图显示了 ADSI 容器对象。

adsi container object

大多数 ADSI 对象都包含在其他对象中。 唯一没有父容器的 ADSI 对象是顶级 ADSI 命名空间 对象 ("ADS:")。

除了使用 IADsContainer::Create 方法创建的任何对象之外,容器对象的 IADs::SetInfo 方法还会永久存储 ADSI 容器对象的缓存属性。 IADsContainer::Delete 不会影响属性缓存,但会删除此对象表示的基础命名空间目录元素。