英語で読む

次の方法で共有


ライセンスと IClassFactory2

クラス オブジェクトの IClassFactory インターフェイスは、COM の基本的なオブジェクト作成メカニズムを提供します。 IClassFactoryを使用すると、サーバーはマシンごとにオブジェクトの作成を制御できます。 IClassFactory::CreateInstance メソッドの実装では、マシン ライセンスの存在に基づいてオブジェクトの作成を許可または禁止できます。 マシン ライセンスとは、ベンダーのインストール ディスクなど、有効なソースからソフトウェアがインストールされたことを示す、コンピューター上に存在するアプリケーションとは別の情報です。 マシン ライセンスが存在しない場合、サーバーはオブジェクトの作成を禁止できます。 ライセンス情報がソフトウェアと共にコピーされず、コピーを受け取るマシンにライセンスが付与されていないために、ユーザーがコンピューター間でソフトウェアをコピーしようとした場合、マシン ライセンスによって著作権侵害が防止されます。

ただし、コンポーネント ソフトウェア業界では、ベンダーはライセンスを細かく制御する必要があります。 ベンダーは、マシン ライセンス制御に加えて、一部のクライアントにコンポーネント オブジェクトの作成を許可し、他のクライアントに同じ機能を拒否する必要があります。 そのためには、クライアント アプリケーションがまだ開発中である間に、クライアント アプリケーションがコンポーネントからライセンス キーを取得する必要があります。 クライアント アプリケーションは、実行時にライセンス キーを使用して、ライセンスのないマシン上にオブジェクトを作成します。

たとえば、ベンダーが開発者にコントロールのライブラリを提供する場合、ライブラリを購入した開発者は完全なマシン ライセンスを持ち、開発用コンピューターでオブジェクトを作成できます。 その後、開発者は、1 つ以上のコントロールを組み込んだライセンスされたマシン上にクライアント アプリケーションを構築できます。 結果のクライアント アプリケーションを別のコンピューターで実行する場合、そのコンピューターが元のベンダーのコントロールのマシン ライセンスを持っていない場合でも、クライアント アプリケーションで使用されるコントロールを他のコンピューターに作成する必要があります。

IClassFactory2 インターフェイスは、このレベルの制御を提供します。 特定のコンポーネントのキーベースのライセンスを許可するには、そのコンポーネントのクラス ファクトリ オブジェクト IClassFactory2 を実装します。 IClassFactory2 IClassFactory2から派生しているため、IClassFactory2 実装することで、クラス ファクトリ オブジェクトは基本的な COM 要件を満たします。

ライセンスされたコンポーネントをクライアント アプリケーションに組み込むには、IClassFactory2で次のメソッドを使用します。

  • GetLicInfo メソッドは、クラス ファクトリのライセンス動作を説明する情報を LICINFO 構造体に入力します。 たとえば、クラス ファクトリは、fRunTimeKeyAvail メンバーが TRUE 場合に、ランタイム ライセンスのライセンス キーを提供できます。
  • RequestLicKey メソッドは、コンポーネントのライセンス キーを提供します。 クライアントがこのメソッドを呼び出すときは、マシン ライセンスを使用できる必要があります。
  • CreateInstanceLic メソッドは、ライセンス キー パラメーター (BSTRÂ bstrKey) が有効な場合に、ライセンスされたコンポーネントのインスタンスを作成します。

注意

コンポーネントの型情報では、ライセンスが付与された属性を使用して、IClassFactory2を介したライセンスをサポートするコクラスをマークします。

 

まず、ライセンスコンポーネントのクライアントでもある別の開発ツールが必要です。 このツールの目的は、ランタイム ライセンス キーを取得し、クライアント アプリケーションに保存することです。 このツールは、コンポーネントのマシン ライセンスを持つマシンでのみ実行されます。 このツールは、GetLicInfo を呼び出し、RequestLicKeyメソッドをしてランタイム ライセンス キーを取得し、ライセンス キーをクライアント アプリケーションに保存します。 たとえば、開発ツールでは、BSTR ライセンス キーを含むヘッダー (.h) ファイルを作成し、その .h ファイルをクライアント アプリケーションに含めることができます。

クライアント アプリケーション内でコンポーネントをインスタンス化するには、最初に IClassFactory::CreateInstanceを使用してオブジェクトを直接インスタンス化してみてください。 CreateInstance 成功した場合、2 台目のコンピューターにはコンポーネントのライセンスが付与され、オブジェクトは必要に応じて作成できます。 CreateInstance 戻りコード CLASS_E_NOTLICENSEDで失敗した場合、オブジェクトを作成する唯一の方法は、ランタイム キーを CreateInstanceLic メソッドに渡すことです。 CreateInstanceLic はキーを検証し、キーが有効な場合はオブジェクトを作成します。

この方法では、コンポーネント (コントロールなど) を使用してビルドされたアプリケーションは、他のライセンスを持たないコンピューター上で実行できます。対象のコンポーネント オブジェクトの作成は、ランタイム ライセンスを含むクライアント アプリケーションのみが許可されます。

IClassFactory2 インターフェイスは、ライセンス スキームの柔軟性をサポートします。 たとえば、サーバー実装者は、セキュリティを強化するためにコンポーネントのライセンス キーを暗号化できます。 サーバー実装者は、さまざまな機能に異なるライセンス キーを提供することで、オブジェクトの機能レベルを有効または無効にすることもできます。 たとえば、1 つのキーで基本レベルの機能が許可され、もう 1 つのキーで基本機能と高度な機能が許可される場合があります。

COM サーバーの責任