ADSI 架構模型
架構與字典類似,因為它會保存目錄服務已知之每一種物件類型的定義。 ADSI 用戶端應用程式可以瀏覽架構,以探索任何指定 ADSI 實作的功能。 此外,ADSI 也提供可用來與目錄服務基礎架構通訊的架構管理介面。
某些架構是可延伸的,ADSI 提供者或第三方供應商可以選擇發佈新介面或現有介面的其他屬性。 ADSI 用戶端會使用此數據來判斷每個目錄服務支援的功能。
架構物件有三種:類別、屬性和語法,分別支持架構管理介面 IADsClass、IADsProperty 和 IADsSyntax。
注意
類別是多載的字詞。 有 C++ 類別、Java 類別、COM 類別和 ADSI 類別。 在本檔中,除非另有限定,否則這個字會參考架構對象的類別或類型。
ADSI 會抽象化每個目錄服務的架構,並將它放在 Namespace 物件中的每個最上層根節點中。 若要識別目錄服務在指定根節點上支援的類別,您可以列舉架構物件,並取得類別物件、屬性對象和語法物件的清單。 如需詳細資訊,請參閱 使用ADSI架構。
ADSI LDAP 提供者架構快取
ADSI 的LDAP提供者會嘗試將架構數據快取到本機電腦。 子schema 是由儲存在位於目錄服務企業根目錄的 subSchemaSubEntry 屬性中的辨別名稱來識別。 除了提供子架構數據之外,LDAP v3 伺服器也應該公開 modifyTimeStamp 屬性,用來判斷上次修改架構的時間。
當 ADSI 第一次系結至 LDAP 伺服器時,它會使用 subSchemaSubEntry 屬性擷取子架構數據。 如果 ADSI 成功尋找 subschema 物件,它會將指標儲存在連接到 LDAP 伺服器的電腦上登錄中的數據。 如需這些值儲存在登錄中確切位置的資訊,請參閱 ADSI 和用戶帳戶控制。
ADSI 接著會嘗試處理架構數據,並讀取 modifyTimeStamp 屬性。 如果modifyTimeStamp屬性存在且ADSI已成功處理架構,ADSI會將子架構寫入磁碟,並在機碼下建立下列兩個登錄值。 如果子架構數據存在,但無法處理,則不會建立下列兩個登錄值:
- Time 值,其中包含modifyTimeStamp屬性。 這個值是用來確保架構數據是最新的,並防止持續重載架構數據。
- File 值,其中包含 ADSI 在檔案系統中儲存架構數據的路徑。 根據預設,ADSI 會快取 systemroot>\SchCache 目錄中的子架構<,其檔名會對應至 LDAP 伺服器的名稱。
如果可以處理子架構數據,但不會 公開modifyTimeStamp 屬性,則會在記憶體中快取架構數據,但不會寫入磁碟。 如果LDAP v3伺服器已透過本機電腦上的ADSI連絡,且快取的子架構不存在,很可能是因為下列其中一個原因:
- 伺服器未公開正確的屬性。
- ADSI 無法處理架構。
- ADSI 無法將檔案寫入文件系統。