Condividi tramite


Licenze e IClassFactory2

L'interfaccia IClassFactory in un oggetto classe fornisce il meccanismo di base per la creazione di oggetti di COM. Usando IClassFactory, un server può controllare la creazione di oggetti in base a un computer. L'implementazione del metodo IClassFactory::CreateInstance può consentire o impedire la creazione di oggetti in base all'esistenza di una licenza del computer. Una licenza del computer è un'informazione separata dall'applicazione presente in un computer per indicare che il software è stato installato da un'origine valida, ad esempio i dischi di installazione del fornitore. Se la licenza del computer non esiste, il server può impedire la creazione di oggetti. La licenza del computer impedisce la pirateria nei casi in cui un utente tenta di copiare il software da un computer a un altro, perché le informazioni sulla licenza non vengono copiate con il software e il computer che riceve la copia non è concesso in licenza.

Tuttavia, in un settore software componente, i fornitori hanno bisogno di un livello più elevato di controllo sulle licenze. Oltre al controllo delle licenze del computer, un fornitore deve consentire ad alcuni client di creare un oggetto componente negando ad altri client la stessa funzionalità. Ciò richiede che l'applicazione client ottenga una chiave di licenza dal componente mentre l'applicazione client è ancora in fase di sviluppo. L'applicazione client usa il codice di licenza in fase di esecuzione per creare oggetti in un computer senza licenza.

Ad esempio, se un fornitore fornisce una libreria di controlli agli sviluppatori, lo sviluppatore che acquista la libreria avrà una licenza completa del computer, consentendo la creazione degli oggetti nel computer di sviluppo. Lo sviluppatore può quindi compilare un'applicazione client nel computer con licenza che incorpora uno o più controlli. Quando l'applicazione client risultante viene eseguita in un altro computer, i controlli usati nell'applicazione client devono essere creati nell'altro computer anche se tale computer non dispone di una licenza del computer per i controlli del fornitore originale.

L'interfaccia IClassFactory2 fornisce questo livello di controllo. Per consentire licenze basate su chiave per qualsiasi componente specifico, implementare IClassFactory2 nell'oggetto class factory per tale componente. IClassFactory2è derivato da IClassFactory, quindi implementando IClassFactory2, l'oggetto factory di classe soddisfa i requisiti COM di base.

Per incorporare un componente concesso in licenza nell'applicazione client, usare i metodi seguenti in IClassFactory2:

  • Il metodo GetLicInfo riempie una struttura LICINFO con informazioni che descrivono il comportamento delle licenze della class factory. Ad esempio, la class factory può fornire le chiavi di licenza per le licenze in fase di esecuzione se il membro fRunTimeKeyAvail è TRUE.
  • Il metodo RequestLicKey fornisce un codice di licenza per il componente. Una licenza del computer deve essere disponibile quando il client chiama questo metodo.
  • Il metodo CreateInstanceLic crea un'istanza del componente concesso in licenza se il parametro della chiave di licenza (BSTRÂ bstrKey) è valido.

Nota

Nelle informazioni sul tipo, un componente usa l'attributo concesso in licenza per contrassegnare la coclasse che supporta le licenze tramite IClassFactory2.

 

In primo luogo, è necessario uno strumento di sviluppo separato che sia anche un client del componente concesso in licenza. Lo scopo di questo strumento è ottenere il codice di licenza di runtime e salvarlo nell'applicazione client. Questo strumento viene eseguito solo in un computer che dispone di una licenza di macchina per il componente. Lo strumento chiama i metodi GetLicInfo e RequestLicKey per ottenere il codice di licenza di runtime e quindi salva il codice di licenza nell'applicazione client. Ad esempio, lo strumento di sviluppo potrebbe creare un file di intestazione (con estensione h) contenente il codice di licenza BSTR e quindi includere il file H nell'applicazione client.

Per creare un'istanza del componente all'interno dell'applicazione client, provare prima a creare un'istanza dell'oggetto direttamente con IClassFactory::CreateInstance. Se CreateInstance ha esito positivo, il secondo computer viene concesso in licenza per il componente e gli oggetti possono essere creati. Se CreateInstanceha esito negativo con il codice restituito CLASS_E_NOTLICENedizione Standard D, l'unico modo per creare l'oggetto consiste nel passare la chiave di runtime al metodo CreateInstanceLic. CreateInstanceLic verifica la chiave e crea l'oggetto se la chiave è valida.

In questo modo, un'applicazione compilata con componenti (ad esempio i controlli) può essere eseguita in un computer che non dispone di altre licenze. Solo l'applicazione client contenente la licenza di runtime può creare gli oggetti componente in questione.

L'interfaccia IClassFactory2 supporta la flessibilità negli schemi di licenza. Ad esempio, l'implementatore del server può crittografare le chiavi di licenza nel componente per una maggiore sicurezza. Gli implementatori del server possono anche abilitare o disabilitare i livelli di funzionalità nei propri oggetti fornendo chiavi di licenza diverse per funzioni diverse. Ad esempio, una chiave potrebbe consentire un livello di base di funzionalità, mentre un'altra consente funzionalità di base e avanzate e così via.

Responsabilità del server COM