Lizenzierung und IClassFactory2

Die IClassFactory-Schnittstelle für ein Klassenobjekt stellt den grundlegenden Objekterstellungsmechanismus von COM bereit. Mithilfe von IClassFactory kann ein Server die Objekterstellung auf Computerbasis steuern. Die Implementierung der IClassFactory::CreateInstance-Methode kann die Objekterstellung basierend auf dem Vorhandensein einer Computerlizenz zulassen oder verbieten. Bei einer Computerlizenz handelt es sich um informationen, die von der Anwendung getrennt sind, die auf einem Computer vorhanden ist, um anzugeben, dass die Software aus einer gültigen Quelle installiert wurde, z. B. von den Installationsdatenträgern des Herstellers. Wenn die Computerlizenz nicht vorhanden ist, kann der Server die Objekterstellung nicht zulassen. Die Computerlizenzierung verhindert Piraterie in Fällen, in denen ein Benutzer versucht, die Software von einem Computer auf einen anderen zu kopieren, da die Lizenzinformationen nicht mit der Software kopiert werden und der Computer, der die Kopie erhält, nicht lizenziert ist.

In einer Komponentensoftwarebranche benötigen Anbieter jedoch eine genauere Kontrolle über die Lizenzierung. Zusätzlich zur Steuerung der Computerlizenz muss ein Anbieter einigen Clients erlauben, ein Komponentenobjekt zu erstellen, während anderen Clients die gleiche Funktion verweigert wird. Dies erfordert, dass die Clientanwendung einen Lizenzschlüssel aus der Komponente abruft, während sich die Clientanwendung noch in der Entwicklung befindet. Die Clientanwendung verwendet den Lizenzschlüssel zur Laufzeit, um Objekte auf einem nicht lizenzierten Computer zu erstellen.

Wenn ein Anbieter beispielsweise eine Bibliothek mit Steuerelementen für Entwickler bereitstellt, verfügt der Entwickler, der die Bibliothek kauft, über eine vollständige Computerlizenz, sodass die Objekte auf dem Entwicklungscomputer erstellt werden können. Der Entwickler kann dann eine Clientanwendung auf dem lizenzierten Computer erstellen, die mindestens ein Steuerelement enthält. Wenn die resultierende Clientanwendung auf einem anderen Computer ausgeführt wird, müssen die in der Clientanwendung verwendeten Steuerelemente auf dem anderen Computer erstellt werden, auch wenn dieser Computer keine Computerlizenz für die Steuerelemente des ursprünglichen Anbieters besitzt.

Die IClassFactory2-Schnittstelle stellt diese Steuerungsebene bereit. Um die schlüsselbasierte Lizenzierung für eine bestimmte Komponente zuzulassen, implementieren Sie IClassFactory2 für das Klassenfactoryobjekt für diese Komponente. IClassFactory2wird von IClassFactory abgeleitet, sodass das Klassenfactoryobjekt durch die Implementierung von IClassFactory2 die grundlegenden COM-Anforderungen erfüllt.

Verwenden Sie die folgenden Methoden in IClassFactory2, um eine lizenzierte Komponente in Ihre Clientanwendung zu integrieren:

  • Die GetLicInfo-Methode füllt eine LICINFO-Struktur mit Informationen, die das Lizenzierungsverhalten der Klassenfactory beschreiben. Beispielsweise kann die Klassenfactory Lizenzschlüssel für die Laufzeitlizenzierung bereitstellen, wenn das fRunTimeKeyAvail-ElementTRUE ist.
  • Die RequestLicKey-Methode stellt einen Lizenzschlüssel für die Komponente bereit. Eine Computerlizenz muss verfügbar sein, wenn der Client diese Methode aufruft.
  • Die CreateInstanceLic-Methode erstellt eine instance der lizenzierten Komponente, wenn der Lizenzschlüsselparameter (BSTRÂ bstrKey) gültig ist.

Hinweis

In den Typinformationen verwendet eine Komponente das -Attribut, das lizenziert ist, um die Co-Klasse zu markieren, die die Lizenzierung über IClassFactory2 unterstützt.

 

Zunächst benötigen Sie ein separates Entwicklungstool, das auch ein Client der lizenzierten Komponente ist. Der Zweck dieses Tools besteht darin, den Laufzeitlizenzschlüssel abzurufen und in Ihrer Clientanwendung zu speichern. Dieses Tool wird nur auf einem Computer ausgeführt, der über eine Computerlizenz für die Komponente verfügt. Das Tool ruft die Methoden GetLicInfo und RequestLicKey auf, um den Laufzeitlizenzschlüssel abzurufen, und speichert den Lizenzschlüssel dann in Ihrer Clientanwendung. Das Entwicklungstool könnte z. B. eine Headerdatei (.h) erstellen, die den BSTR-Lizenzschlüssel enthält. Anschließend würden Sie diese H-Datei in Ihre Clientanwendung einschließen.

Um die Komponente in Ihrer Clientanwendung zu instanziieren, versuchen Sie zunächst, das Objekt direkt mit IClassFactory::CreateInstance zu instanziieren. Wenn CreateInstance erfolgreich ist, wird der zweite Computer für die Komponente lizenziert, und Objekte können nach Bedarf erstellt werden. Wenn CreateInstancemit dem Rückgabecode CLASS_E_NOTLICENSED fehlschlägt, besteht die einzige Möglichkeit zum Erstellen des Objekts darin, den Laufzeitschlüssel an die CreateInstanceLic-Methode zu übergeben. CreateInstanceLic überprüft den Schlüssel und erstellt das -Objekt, wenn der Schlüssel gültig ist.

Auf diese Weise kann eine Anwendung, die mit Komponenten (z. B. Steuerelementen) erstellt wurde, auf einem Computer ausgeführt werden, der über keine andere Lizenz verfügt. Nur die Clientanwendung, die die Laufzeitlizenz enthält, darf die betreffenden Komponentenobjekte erstellen.

Die IClassFactory2-Schnittstelle unterstützt Flexibilität bei Lizenzierungsschemas. Der Serverimplementierer kann z. B. Lizenzschlüssel in der Komponente verschlüsseln, um die Sicherheit zu erhöhen. Serverimplementierer können auch Funktionalitätsebenen in ihren Objekten aktivieren oder deaktivieren, indem sie unterschiedliche Lizenzschlüssel für verschiedene Funktionen bereitstellen. Beispielsweise kann ein Schlüssel eine Basisfunktionalitätsebene zulassen, während ein anderer grundlegende und erweiterte Funktionen usw. zulässt.

COM-Serveraufgaben