top
Loading...
目錄服務技術介紹——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函數得到指定的目錄對象。

北斗有巢氏 有巢氏北斗