表1 IADs接口的属性
属性名
类型
说明
Name
BSTR
对象名字
AdsPath
BSTR
对象的全路径
Class
BSTR
对象的类别(表结构对象的路径)
GUID
BSTR
对象的全局唯一标识(GUID)
Parent
BSTR
父包容器的路径
Schema
BSTR
表结构对象的路径
表2 IADs接口的方法
方法名
参数
说明
GetInfo
用属性值重新装入对象
SetInfo
提交属性值的变化
Get
BSTR bstrName,
VARIANT *pvProp
获取指定名字的属性值
Put
BSTR bstrName,
VARIANT vProp
设置指定名字的属性值
GetEx
BSTR bstrName,
VARIANT *pvProp
获取指定名字的单值或多值属性值
PutEx
LONG lnControlCode,
BSTR bstrName,
VARIANT vProp
设置指定名字的单值或多值属性值;若lnControlCode为ADS_PROPERTY_CLEAR,可以删除属性
GetInfoEx
VARIANT vProps,
LONG lReserved
与GetInfo类似,优化处理
另一个重要的接口是IADsContainer,它是所有包容器对象必须要实现的接口。IADsContainer接口的属性和方法如表3和表4所示。
表3 IADsContainer接口的属性
属性名
类型
说明
Count
long
包容器中对象的个数
_NewEnum
LPUNKNOWN
返回包容器中对象的枚举器
Filter
VARIANT
BSTR数组,每个BSTR指定了过滤器的定义
Hints
VARIANT
属性数组,其用法与GetInfoEx类似
表4 IADsContainer接口的方法
方法名
参数
说明
GetObject
BSTR bstrClass,
BSTR bstrRelativeName,
LPDISPATCH *pNewObject
得到包容器对象中指定对象的IDispatch接口指针
Create
BSTR bstrClass,
BSTR bstrRelativeName,
LPDISPATCH *pNewObject
在包容器对象中创建指定名字的目录对象,并返回对象的IDispatch接口指针
Delete
BSTR bstrClass,
BSTR bstrRelativeName
删除包容器对象中指定的目录对象
CopyHere
BSTR bstrSource,
BSTR bstrNewName,
LPDISPATCH* pNewObject
拷贝目录对象到当前包容器对象中
MoveHere
BSTR bstrSource,
BSTR bstrNewName,
LPDISPATCH* pNewObject
移动目录对象到当前包容器对象中
IADs和IADsContainer接口分别代表了目录服务中的目录对象和包容器对象,为了对一个名字空间进行各种目录操作,我们必须从最基本的根出发,ADSI为我们提供了接口IADsNamespaces用以表达名字空间对象。IADsNamespaces接口比较简单,它只有一个属性“DefaultContainer”,此属性指定了客户程序访问的基本包容器对象的路径。
仅仅一个IADs接口还难以表达一个目录对象的全部特征,前面已经提到,ADSI用类别来定义目录对象的特征,并且类别对象本身也是目录对象,它除了实现IADs接口外,还实现了IADsClass接口。IADsClass接口从IADs派生,其属性如表5所示。
表5 IADsClass接口的属性
属性名
类型
说明
PrimaryInterface
BSTR
可直接访问到此类别属性的接口ID
CLSID
BSTR
与之相连的COM对象的CLSID
OID
BSTR
定义此类别的对象标识符
Abstract
VARIANT_BOOL
指示此类别是否为抽象类,若是的话,则它不能被实例化,但其它类可以继承该类别
Auxiliary
VARIANT_BOOL
指示此类别是否为辅助类
MandatoryProperties
VARIANT
与之相连的目录对象必须支持的属性名数组
OptionalProperties
VARIANT
与之相连的目录对象支持的可选属性名数组
NamingProperties
VARIANT
与之相连的目录对象支持的命名属性名数组(用于指示相对标识名RDN)
DerivedFrom
VARIANT
此类所继承的类的路径数组
AuxDerivedFrom
VARIANT
此类所继承的辅助类的路径数组
PossibleSuperiors
VARIANT
可能包含此类实例的类的路径数组
Containment
VARIANT
可能被包含此类中的类的路径数组
Container
VARIANT_BOOL
指示此类是否为包容器对象类别
HelpFileName
BSTR
帮助文件名
HelpFileContext
long
帮助环境标识符
IADsClass接口只有一个方法Qualifiers,用来返回描述附加限制对象的集合对象。在IADsClass接口的属性中,PrimaryInterface属性可直接指示客户程序去请求对应的接口ID,以便访问该类别所指示的属性,比如,在目录服务中,“User”类指示用户对象实现了一个ADSI接口IADsUser,它包含属性“姓”、“名”、“职称”、“电话”等等。
……