了解了客戶程式的程式設計方法以及adsi提供者的基本內容之後,現在我們來看看從客戶程式到adsi提供者元件的互動過程(如圖4所示),以便加深讀者對adsi的理解。
圖4 客戶程式與adsi提供者的互動過程
客戶程式首先向adsi發乙個物件繫結請求(圖中步驟1),adsi元件根據客戶給出的adsi物件路徑,提取出標識提供者progid的字串,比如「winnt」、「ldap」或者自定義的提供者progid,進一步在登錄檔中找到此progid所對應的clsid(圖中步驟2)。然後裝入提供者元件程式(圖中步驟3),接下去的任務就交給提供者元件,由它建立物件並返回給adsi元件(圖中步驟4),進一步返回給客戶程式(圖中步驟5)。以後客戶與目錄物件直接進行通訊(圖中步驟6)。這是客戶繫結adsi目錄物件的實現過程。
四、adsi例程式
這一部分我們將介紹乙個adsi例程式dsbrowse,它是乙個vb表單視窗程式,此程式可以對當前機器上的所有adsi提供者進行瀏覽,圖5分別給出了dsbrowse執行的初始狀態以及開啟nt域之後的目錄物件列表圖。
(a) 初始執行狀態 (b) 開啟winnt域之後的狀態
圖5 例程式dsbrowse執行示意圖
dsbrowse例程式非常簡單,在表單視窗的初始化函式中,根據程式指定的根路徑,對它所包容的物件進行列舉。預設情形是,我們在初始路徑中指定「ads:」,它是adsi的總根,包容了當前機器上的所有名字空間,如圖5(a)所示,dsbrowse列出了當前機器上的5個名字空間:iis、ldap、nds、nwcompat和winnt。有的名字空間需要指定相應的伺服器
,不能進行無伺服器列舉,所以我們不能直接用dsbrowse進行列舉,但有的名字空間可以進行無伺服器列舉,對這種名字空間我們可以點選名字空間前的加號即可列出它所包容的目錄物件或者子包容器物件。比如,我們在「winnt」名字空間點選可列出當前網路環境下所有的nt域,進一步在某個nt網域名稱上點選可列出此域中所有的目錄物件,包括此域的使用者、計算機、使用者組、服務等物件。
我們在視窗的樹狀控制中選中某個物件,再點選右上角的「properties」按鈕,dsbrowse程式會用乙個對話方塊顯示被選中物件的屬性資訊,如圖6所示。屬性對話方塊列出了相應物件的名字、路徑、是否為包容器物件、以及它的屬性表,使用者可以通過下部的控制修改物件的屬性。
圖6 例程式dsbrowse的屬性對話方塊
adscmd list ldap://mailserver/cn=recipients,ou=mysite,o=myorganization
我們也可以讓adscmd程式直接給出指定路徑的目錄物件的屬性資訊,例如:
adscmd dump ldap://mailserver/cn=panaimin,cn=recipients,ou=mysite,o=myorganization
當然,adscmd不僅可以訪問microsoft exchange server的使用者資訊,也可以訪問其它任意名字空間的目錄服務資訊。
五、結束語
adsi是一項正在發展中的技術,它體現了網路時代訪問和管理資訊的基本思想。microsoft正逐步把它標準化,adsi也將成為windows 2000作業系統
的一項新特性,雖然我們在windows nt 4.0以及一些應用軟體中已經看到了adsi的應用,但無論是winnt或者是用於microsoft exchange server使用者訪問的ldap協議,adsi的支援都是不完全的,我們還無法通過winnt名字空間新增nt使用者。雖然adsi支援windows nt的安全特性,但實際上這種特性還有待於進一步完善。
adsi技術的全面應用必須要等到windows 2000發布之後才有可能。隨著windows 2000發布日的臨近,adsi最終必將統一目錄服務介面。作為windows程式設計師,我們必須對此作好準備。本文對adsi作了基本的介紹,文中提到的介面或者基本原則不會再變化,但個別細節有可能在新的版本中有所不同。請讀者在使用中注意這一點。
目錄服務技術介紹 ADSI(一)
目錄服務技術介紹 adsi 潘愛民 北京大學計算機科學技術研究所 100871 摘要 本文介紹了microsoft提出的活動目錄服務介面 adsi 技術。文章首先講述了adsi的結構,然後介紹了adsi的 程式設計 方法,最後通過例子簡單說明了adsi的用法。一 adsi簡介 adsi active...
目錄服務技術介紹 ADSI(二)
下面列出目前已經實現的adsi目錄服務 1 windows nt域使用者管理。2 ldap exchange server 目錄服務。3 internet information server 4 nds novell netware directory services 目前,在乙個企業內部存在多...
目錄服務技術介紹 ADSI(三)
表1 iads介面的屬性 屬性名型別說明 name bstr 物件名字 adspath bstr 物件的全路徑 class bstr 物件的類別 表結構物件的路徑 guid bstr 物件的全域性唯一標識 guid parent bstr 父包容器的路徑 schema bstr 表結構物件的路徑 表...