Licences et IClassFactory2
L’interface IClassFactory sur un objet de classe fournit le mécanisme de création d’objet de base de COM. À l’aide d’IClassFactory, un serveur peut contrôler la création d’objets sur une machine. L’implémentation de la méthode IClassFactory::CreateInstance peut autoriser ou interdire la création d’objets en fonction de l’existence d’une licence d’ordinateur. Une licence de machine est une information distincte de l’application qui existe sur un ordinateur pour indiquer que le logiciel a été installé à partir d’une source valide, telle que les disques d’installation du fournisseur. Si la licence de l’ordinateur n’existe pas, le serveur peut interdire la création d’objets. Les licences d’ordinateur empêchent le piratage dans les cas où un utilisateur tente de copier le logiciel d’un ordinateur à un autre, car les informations de licence ne sont pas copiées avec le logiciel et que la machine qui reçoit la copie n’est pas concédée sous licence.
Toutefois, dans un secteur des logiciels de composants, les fournisseurs ont besoin d’un niveau de contrôle plus précis sur les licences. En plus du contrôle des licences d’ordinateur, un fournisseur doit autoriser certains clients à créer un objet de composant tout en refusant à d’autres clients la même fonctionnalité. Cela nécessite que l’application cliente obtienne une clé de licence du composant pendant que l’application cliente est encore en développement. L’application cliente utilise la clé de licence au moment de l’exécution pour créer des objets sur un ordinateur sans licence.
Par exemple, si un fournisseur fournit une bibliothèque de contrôles aux développeurs, le développeur qui achète la bibliothèque dispose d’une licence d’ordinateur complète, ce qui permet de créer les objets sur l’ordinateur de développement. Le développeur peut ensuite créer une application cliente sur l’ordinateur sous licence incorporant un ou plusieurs contrôles. Lorsque l’application cliente résultante est exécutée sur un autre ordinateur, les contrôles utilisés dans l’application cliente doivent être créés sur l’autre ordinateur, même si cette machine ne possède pas de licence d’ordinateur pour les contrôles du fournisseur d’origine.
L’interface IClassFactory2 fournit ce niveau de contrôle. Pour autoriser les licences basées sur des clés pour un composant donné, vous implémentez IClassFactory2 sur l’objet de fabrique de classe pour ce composant. IClassFactory2est dérivé de IClassFactory. Par conséquent, en implémentant IClassFactory2, l’objet de fabrique de classe répond aux exigences COM de base.
Pour incorporer un composant sous licence dans votre application cliente, utilisez les méthodes suivantes dans IClassFactory2 :
- La méthode GetLicInfo remplit une structure LICINFO avec des informations décrivant le comportement de licence de la fabrique de classes. Par exemple, la fabrique de classe peut fournir des clés de licence pour les licences au moment de l’exécution si le membre fRunTimeKeyAvail a la valeur TRUE.
- La méthode RequestLicKey fournit une clé de licence pour le composant. Une licence d’ordinateur doit être disponible lorsque le client appelle cette méthode.
- La méthode CreateInstanceLic crée un instance du composant sous licence si le paramètre de clé de licence (BSTRÂ bstrKey) est valide.
Notes
Dans ses informations de type, un composant utilise l’attribut sous licence pour marquer la coclasse qui prend en charge la licence via IClassFactory2.
Tout d’abord, vous avez besoin d’un outil de développement distinct qui est également un client du composant sous licence. L’objectif de cet outil est d’obtenir la clé de licence d’exécution et de l’enregistrer dans votre application cliente. Cet outil s’exécute uniquement sur une machine qui possède une licence d’ordinateur pour le composant. L’outil appelle les méthodes GetLicInfo et RequestLicKey pour obtenir la clé de licence d’exécution, puis enregistre la clé de licence dans votre application cliente. Par exemple, l’outil de développement peut créer un fichier d’en-tête (.h) contenant la clé de licence BSTR, puis inclure ce fichier .h dans votre application cliente.
Pour instancier le composant dans votre application cliente, essayez d’abord d’instancier l’objet directement avec IClassFactory::CreateInstance. Si CreateInstance réussit, la deuxième machine est concédée sous licence pour le composant et des objets peuvent être créés à volonté. Si CreateInstanceéchoue avec le code de retour CLASS_E_NOTLICENSED, la seule façon de créer l’objet consiste à passer la clé d’exécution à la méthode CreateInstanceLic . CreateInstanceLic vérifie la clé et crée l’objet si la clé est valide.
De cette façon, une application créée avec des composants (tels que des contrôles) peut s’exécuter sur un ordinateur qui n’a pas d’autre licence. Seule l’application cliente contenant la licence d’exécution est autorisée à créer les objets de composant en question.
L’interface IClassFactory2 prend en charge la flexibilité dans les schémas de licence. Par exemple, l’implémenteur de serveur peut chiffrer les clés de licence dans le composant pour renforcer la sécurité. Les implémenteurs de serveur peuvent également activer ou désactiver des niveaux de fonctionnalité dans leurs objets en fournissant différentes clés de licence pour différentes fonctions. Par exemple, une clé peut autoriser un niveau de fonctionnalité de base tandis qu’une autre autorise les fonctionnalités de base et avancées, et ainsi de suite.
Rubriques connexes