閱讀英文

共用方式為


程序代碼概觀

下圖是實作 ADSI 範例提供者元件所需程式代碼區塊的概念表示法。 下圖說明每個區段。 經驗豐富的 COM 程式設計人員可能會發現這是範例提供者元件的適當概觀。 如需詳細資訊,請參閱 程式代碼詳細數據

sample provider implementation

下列編號項目會對應至圖中的區塊專案。

  1. 載入 DLL (Libmain.cpp,Guid.cpp)。 DLL 的進入點。 兩個提供者物件的 Class Factory 靜態物件定義:Guid.cpp包含各種範例提供者元件對象的實作 CLSID 定義。
  2. Provider 物件類別處理站和建立程式代碼(Cprovcf.cpp、Cprov.cpp、Stdfact.cpp)。 提供者物件是在Moniker系結作業期間支援 IParseDisplayName 的物件,如範例提供者元件中尋找和系結中所述。
  3. 系結至物件 (Getobj.cpp)。 此程式代碼會呼叫剖析器來檢查指定的 ADsPath 語法是否正確,然後針對要建立為 Active Directory 物件的專案,執行從 ADsPath 到原生目錄服務路徑的任何必要對應。 它會查閱這種類型的對象的架構定義,並填入必要屬性。 建立 Active Directory 對象之後,會針對呼叫端擷取 IUnknown 的介面指標
  4. 提供者命名空間的剖析器(Parse.cpp)。 這是專案 3 叫用的程式代碼。 剖析器會驗證傳入的 ADsPath 字串對於它自己的命名空間來說語法正確。
  5. 命名空間對象的類別處理站、建立和列舉(Cnamcf.cpp、Cnamesp.cpp、Cenumns.cpp)。 命名空間物件是容器物件,可以列舉來尋找此命名空間的所有根節點物件。
  6. 泛型 Active Directory 物件的類別處理站和建立程式代碼,以及泛型 ADs 容器物件的建立和列舉程式代碼(Cgenobj.cpp、Cenumobj.cpp、Common.cpp、Core.cpp)。 建立 Active Directory 物件時,會執行此程序代碼。
  7. 篩選和列舉 VARIANT(Cenumvar.cpp、Object.cpp)。 在 ADSI 中管理單一型別的 VARIANT 元素集合時,會使用此程式代碼。
  8. 全球(Globals.cpp)。 命名空間關鍵詞、從原生數據格式到 ADs Automation VARIANT 類型的語法對應結構全都在這裡定義。
  9. 封送處理/取消封送處理數據(Pack.cpp、Property.cpp、Smpoper.cpp)。 當對象的屬性載入屬性快取時,就會從原生數據格式轉換成支援的 Automation VARIANT 類型集。 當具有指標的結構在記憶體中複製、刪除或移動時,必須執行數據的其他特殊處理。
  10. 屬性快取 (Cprops.cpp)。 快取屬性是 ADSI 環境的一項功能。 IADs::GetInfoIADs::GetInfoExIADs::SetInfo 方法會在屬性快取上運作。
  11. 記憶體管理(Memory.cpp)。 使用一組記憶體函式來配置和釋放記憶體,可讓範例提供者元件追蹤記憶體使用量並停止記憶體流失。
  12. 架構物件和管理(Cschobj.cpp、Cprpobj.cpp、Cclsobj.cpp、Cenumsch.cpp)。 這包括建立、管理及列舉架構物件的例程。 這包括架構類別物件、屬性對象和語法物件,以及能夠列舉架構類別容器物件。
  13. 操作系統特定呼叫 (RegDSAPI.cpp)。 這包括參考原生作業系統的所有呼叫。 在其他函式中,它們包括開啟、關閉、讀取和修改物件的函式,以及存取架構和屬性數據的函式。 範例提供者元件是使用登錄模擬目錄階層。 只有函式名稱對提供者寫入器非常感興趣。
  14. IDispatch 實作(Cdispmgr.cpp)。 此程式代碼會存取類型連結庫數據,以允許以自動化相容的方式叫用介面方法。