|
客戶程序也可以利用IADsClass、IADsProperty和IADsSyntax接口在運(yùn)行時刻確定目錄對象的詳細(xì)屬性信息。操作步驟如下:
a.先綁定到目錄對象的表結(jié)構(gòu)對象,可以直接訪問目錄對象的“schema”屬性。
b.用枚舉的辦法從表結(jié)構(gòu)對象中找到強(qiáng)制屬性或者可選屬性,如果客戶知道要訪問的屬性名則可以跳過這一步。
c.綁定到表結(jié)構(gòu)對象的包容器對象。
d.從表結(jié)構(gòu)對象的包容器對象獲得屬性的定義對象。
e.從屬性定義對象獲取屬性信息,包括屬性的語法信息等。
下面的代碼演示了如何從獲得表結(jié)構(gòu)對象到訪問“Owner”屬性的細(xì)節(jié)信息的過程:
Dim obj As IADs
Dim cl As IADsClass
Dim pr As IADsProperty
Dim sy As IADsSyntax
Dim sc As IADsContainer
Set obj = GetObject("WinNT://MyDomain/myMachine")
Set cl = GetObject(obj.Schema)
Set sc = GetObject(cl.Parent)
Set pr = sc.GetObject("Property","Owner")
MsgBox "Attribute: " & pr.Name
MsgBox "Syntax:" & pr.Syntax
Set sy = GetObject(sc.AdsPath & "/" & pr.Syntax)
MsgBox "Syntax object: " & sy.Name & " of OleAutoDataType: " & sy.OleAutoDataType
(6) 增加或者刪除目錄對象。
利用包容器對象的IADsContainer接口的方法(見表4),我們可以很方便地增加或者刪除目錄對象,舉例如下:
Dim Container as IADsContainer
Dim NewUser as IADsUser
Set Container = GetObject("WinNT://MyDomain")
' Create the new wrapper.
Set NewUser = Container.Create("user", "PanAimin")
' Write it back to the DS
NewUser.SetInfo
' Set Jane's password.
NewUser.SetPassword("123")
' Delete the user.
Call Container.Delete("user","Mary")
ADSI的各種操作比較簡單,只要我們能夠理解ADSI的基本結(jié)構(gòu),并且對核心的幾個接口以及常用提供者的一些接口有所了解,就可以用一致的方法訪問目錄服務(wù),這也說明了ADSI作為通用目錄服務(wù)標(biāo)準(zhǔn)為程序員帶來的最大益處。
實現(xiàn)ADSI提供者要比使用ADSI復(fù)雜得多,通常情況下,我們只需使用系統(tǒng)已經(jīng)定義的ADSI提供者。但如果確實應(yīng)用需要,我們可以實現(xiàn)自定義的ADSI提供者。為了實現(xiàn)一個ADSI提供者,有一些特性是必須要支持的,而其它的特性則是可選的。下面是一些必須要實現(xiàn)的特性:
(1) 路徑解析使用COM的命名規(guī)范(moniker),其中名字空間對象必須要實現(xiàn)IParseDisplayName::ParseDisplayName函數(shù)以及IADsOpenDSObject接口。
(2) IADs接口必須實現(xiàn)屬性的緩存技術(shù),只有IADs::GetInfo函數(shù)和IADs::SetInfo函數(shù)才刷新緩存或提交到底層目錄服務(wù)。
(3) 每一個包容器對象必須實現(xiàn)IADsContainer接口。
(4) 所有的ADSI對象都支持IDispatch接口,以便自動化客戶訪問屬性和方法。
(5) 對于非自動化客戶通過IDirectoryObject訪問ADSI目錄對象,而不是IADs接口。
(6) ADSI至少實現(xiàn)一個表結(jié)構(gòu)包容器對象,以及相應(yīng)的語法、屬性和類別對象,分別支持接口IADsSyntax、IADsProperty或IADsClass,每個根節(jié)點必須包含它自己的表結(jié)構(gòu)包容器對象。
為了讓ADSI能夠找到自定義的提供者,我們必須在實現(xiàn)了ADSI提供者之后,把它注冊到系統(tǒng)注冊表中。在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ADs\Providers鍵下添加新的提供者項(指向提供者組件的ProgID),如果讀者感興趣,可以檢查該鍵項,以便確定當(dāng)前系統(tǒng)已經(jīng)安裝了哪些提供者。
|