授權和 IClassFactory2
類別 物件上的 IClassFactory 介面提供 COM 的基本物件建立機制。 使用 IClassFactory,伺服器可以控制機器的物件建立。 IClassFactory::CreateInstance 方法的實作可以根據計算機授權的存在來允許或不允許建立物件。 計算機授權是與計算機上存在的應用程式分開的資訊,指出軟體是從有效來源安裝,例如廠商的安裝磁碟。 如果計算機授權不存在,伺服器就不允許建立物件。 當使用者嘗試將軟體從某個計算機複製到另一部計算機時,計算機授權會防止盜版,因為授權資訊不會隨軟體一起複製,而且接收複本的計算機未獲得授權。
不過,在元件軟體產業中,廠商需要更精細的授權控制層級。 除了計算機授權控制之外,廠商還需要允許某些用戶端建立元件對象,同時拒絕其他用戶端相同的功能。 這需要用戶端應用程式在用戶端應用程式仍在開發期間,從元件取得授權金鑰。 用戶端應用程式會在運行時間使用授權金鑰,在未授權的電腦上建立物件。
例如,如果廠商提供控件庫給開發人員,購買連結庫的開發人員將擁有完整的計算機授權,讓物件可以在開發計算機上建立。 然後,開發人員可以在授權機器上建置用戶端應用程式,併入一或多個控件。 當產生的用戶端應用程式在另一部計算機上執行時,即使該計算機沒有來自原始廠商之控件的計算機授權,也必須在另一部計算機上建立用戶端應用程式中使用的控件。
IClassFactory2 介面會提供此層級的控制。 若要允許任何指定元件的密鑰型授權,請在該元件的 Class Factory 對象上實 作 IClassFactory2 。 IClassFactory2衍生自 IClassFactory,因此藉由實作 IClassFactory2,Class Factory 對象會滿足基本 COM 需求。
若要將授權元件併入用戶端應用程式,請在 IClassFactory2 中使用下列方法:
- GetLicInfo 方法會填入 LICINFO 結構,其中包含描述類別處理站授權行為的資訊。 例如,如果 fRunTimeKeyAvail 成員為 TRUE,類別處理站可以提供運行時間授權的授權密鑰。
- RequestLicKey 方法會提供元件的授權密鑰。 用戶端呼叫此方法時,必須提供計算機授權。
- 如果授權密鑰參數 (BSTRÂ bstrKey) 有效,CreateInstanceLic 方法會建立授權元件的實例。
注意
在其類型資訊中,元件會使用已授權的屬性來標記透過 IClassFactory2支援授權的coclass。
首先,您需要個別的開發工具,也就是授權元件的用戶端。 此工具的目的是取得運行時間授權金鑰,並將其儲存在用戶端應用程式中。 此工具只會在擁有元件機器授權的計算機上執行。 此工具會呼叫 GetLicInfo 和 RequestLicKey 方法來取得運行時間授權金鑰,然後將授權金鑰儲存在用戶端應用程式中。 例如,開發工具可以建立包含 BSTR 授權金鑰的標頭 (.h) 檔案,然後將該 .h 檔案包含在用戶端應用程式中。
若要在用戶端應用程式內具現化元件,請先嘗試使用 IClassFactory::CreateInstance 直接具現化物件。 如果 CreateInstance 成功,則第二部機器是針對元件授權,而且可以同時建立物件。 如果 CreateInstance 因傳回碼CLASS_E_NOTLICENSED而失敗,建立物件的唯一方法是將運行時間密鑰傳遞至 CreateInstanceLic 方法。 CreateInstanceLic 會驗證金鑰,並在金鑰有效時建立 物件。
如此一來,建置元件的應用程式(例如控制件)可以在沒有其他授權的計算機上執行,只有包含運行時間授權的用戶端應用程式才能夠建立有問題的元件物件。
IClassFactory2 介面支持授權配置的彈性。 例如,伺服器實作器可以在元件中加密授權密鑰,以增加安全性。 伺服器實作者也可以為不同的功能提供不同的授權密鑰,來啟用或停用其物件中的功能層級。 例如,一個索引鍵可能會允許基本層級的功能,而另一個索引鍵則允許基本和進階功能等等。
相關主題