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 de 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, comme les disques d’installation du fournisseur. Si la licence de l’ordinateur n’existe pas, le serveur peut interdire la création d’objets. La gestion des licences des ordinateurs empêche le piratage dans les cas où un utilisateur tente de copier le logiciel d’un ordinateur vers un autre, car les informations de licence ne sont pas copiées avec le logiciel et la machine qui reçoit la copie n’est pas concédée sous licence.

Toutefois, dans un secteur des logiciels de composant, les fournisseurs ont besoin d’un niveau de contrôle plus fin sur les licences. En plus du contrôle de licence d’ordinateur, un fournisseur doit autoriser certains clients à créer un objet composant tout en refusant à d’autres clients la même fonctionnalité. Cela nécessite que l’application cliente obtienne une clé de licence à partir du composant alors que l’application cliente est toujours en cours de 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 aura 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 intégrant un ou plusieurs des 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 classes pour ce composant. IClassFactory2est dérivé de IClassFactory. Par conséquent, en implémentant IClassFactory2, l’objet fabrique de classes 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 la licence au moment de l’exécution si le membre fRunTimeKeyAvail est TRUE.
  • La méthode RequestLicKey fournit une clé de licence pour le composant. Une licence de machine doit être disponible lorsque le client appelle cette méthode.
  • La méthode CreateInstanceLic crée une instance du composant sous licence si le paramètre de clé de licence (BSTR bstrKey) est valide.

Note

Dans ses informations de type, un composant utilise l'attribut de licence pour marquer la coclasse qui gère la gestion des licences 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 un ordinateur 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 au moment de l’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 vous incluez ce fichier .h dans votre application cliente.

Pour instancier le composant au sein de 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 les 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 aucune 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és 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.

Responsabilités du serveur COM