目录服务技术介绍——ADSI(四)

从类别到对象,它可以指定属性,那么目录对象的属性如何被指定呢?ADSI通过接口IADsProperty进行描述,IADsProperty接口的属性和方法如表6所示。

表6 IADsProperty接口的属性

属性名
类型
说明

OID
BSTR
唯一的对象标识符

Syntax
BSTR
语法路径

MaxRange
long
对于多值属性,最大属性数

MinRange
Long
对于多值属性,最小属性数

MultiValued
VARIANT_BOOL
多值属性标志

最后一个重要接口为IADsSyntax,它只有一个属性,如表7所示。

表7 IADsSyntax接口的属性

属性名
类型
说明

OleAutoDataType
long
代表此语法的自动化数据类型


ADSI定义了许多接口,上面介绍的只是ADSI的基本接口,从这些接口我们可以看到,ADSI用表结构的方式描述目录对象的属性,这种方式可扩展性很强。目录对象本身是个抽象概念,它可以包含许多与应用有关的属性,ADSI目录服务提供者可以利用表结构描述这些属性,以便客户程序可以对目录对象进行有效的访问。

ADSI还定义了一些常用的目录对象使用的接口,比如IADsUser、IADsO、IADsComputer、IADsGroup、IADsOU、IADsDomain、IADsService,它们分别代表了用户、组织、计算机、用户组、部门、域、系统服务。

除了使用以上介绍的ADSI接口访问ADSI目录服务之外,客户程序也可以使用ADO的标准接口访问目录服务,它可以利用ADO的记录集对象访问ADSI的包容器,对包容器对象进行枚举或者检索。ADO与ADSI的关系如图3所示。

图3 客户程序访问ADSI目录服务的两种方法

三、ADSI编程模型

了解了ADSI的基本结构之后,现在我们再讨论ADSI的编程模型。首先,我们介绍目录对象的路径表示法,通常我们使用URL路径表示法,如下:

<Namespace>:

或者 <Namespace>://<Provider-specific stuff>

如果我们不知道名字空间的符号表示,可以从ADSI的最基础的根“ADS:”开始,比如,我们在NT 4.0下对“ADS:”进行枚举可以得到以下5个名字空间:

IIS

LDAP:

NDS:

NWCOMPAT:

WinNT:

如果我们要用ADSI访问NT用户信息,可以使用下面格式的路径:

WinNT://<domain_name>/<User_Name>

如果我们要用ADSI访问Microsoft Exchange Server的用户信息,可以使用下面格式的路径:

LDAP://<Server_Name>/cn=<User_Name>,cn=Recipients,ou=<Site_Name>,o=<Organization_Name>

这表示在<Organization_Name>组织下的<Site_Name>站点中的帐户<User_Name>,<Server_Name>为此站点的一个服务器,它提供LDAP服务。

下面我们讨论几个基本的编程问题:

(1) 绑定到路径指定的对象。

客户程序可以利用以下的方法绑定到路径所指定的对象:

□    C或者C++程序可以使用ADsGetObject或者ADsOpenObject获得指定对象的接口指针,如果我们不能确定对象支持哪个接口,我们可以在函数中指定接口IADs,因为所有的ADSI目录对象都支持此接口,函数返回之后,再调用QueryInterface成员请求其它的接口指针。

□    对于VB或者VBScript应用程序,可以调用GetObject函数得到指定的目录对象。

posted @ 2005-08-23 23:14  James.Ying  阅读(887)  评论(1编辑  收藏  举报