從類別到對象,它可以指定屬性,那么目錄對象的屬性如何被指定呢?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函數得到指定的目錄對象。 |