You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
5.6 KiB
147 lines
5.6 KiB
//+----------------------------------------------------------------------------
|
|
// File: factory.hxx
|
|
//
|
|
// Synopsis:
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
#ifndef _FACTORY_HXX
|
|
#define _FACTORY_HXX
|
|
|
|
|
|
// Routines -------------------------------------------------------------------
|
|
HRESULT LicenseManagerFactory(IUnknown * pUnkOuter, REFIID riid, void ** ppvObj);
|
|
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Class: CLicenseManager
|
|
//
|
|
// Synopsis:
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
class CLicenseManager : public CComponent,
|
|
public IObjectWithSite,
|
|
public IOleObject,
|
|
public ILicensedClassManager,
|
|
public ILocalRegistry,
|
|
public IRequireClasses,
|
|
public IPersistStream,
|
|
public IPersistStreamInit,
|
|
public IPersistPropertyBag
|
|
{
|
|
friend HRESULT LicenseManagerFactory(IUnknown * pUnkOuter, REFIID riid, void ** ppvObj);
|
|
typedef CComponent parent;
|
|
|
|
public:
|
|
CLicenseManager(IUnknown * pUnkOuter);
|
|
~CLicenseManager();
|
|
|
|
// IUnknown methods
|
|
DEFINE_IUNKNOWN_METHODS;
|
|
|
|
// IObjectWithSite methods
|
|
STDMETHOD(SetSite)(IUnknown * pUnkSite);
|
|
STDMETHOD(GetSite)(REFIID riid, void **ppvSite);
|
|
|
|
// IOleObject methods
|
|
STDMETHOD(SetClientSite)(IOleClientSite * pClientSite);
|
|
STDMETHOD(GetClientSite)(IOleClientSite ** ppClientSite);
|
|
STDMETHOD(SetHostNames)(LPCOLESTR, LPCOLESTR) { return E_NOTIMPL; }
|
|
STDMETHOD(Close)(DWORD) { return E_NOTIMPL; }
|
|
STDMETHOD(SetMoniker)(DWORD, IMoniker *) { return E_NOTIMPL; }
|
|
STDMETHOD(GetMoniker)(DWORD, DWORD, IMoniker **) { return E_NOTIMPL; }
|
|
STDMETHOD(InitFromData)(IDataObject *, BOOL, DWORD) { return E_NOTIMPL; }
|
|
STDMETHOD(GetClipboardData)(DWORD, IDataObject **) { return E_NOTIMPL; }
|
|
STDMETHOD(DoVerb)(LONG, LPMSG, IOleClientSite *, LONG, HWND, LPCRECT) { return E_NOTIMPL; }
|
|
STDMETHOD(EnumVerbs)(IEnumOLEVERB **) { return E_NOTIMPL; }
|
|
STDMETHOD(Update)() { return E_NOTIMPL; }
|
|
STDMETHOD(IsUpToDate)() { return E_NOTIMPL; }
|
|
STDMETHOD(GetUserClassID)(CLSID *) { return E_NOTIMPL; }
|
|
STDMETHOD(GetUserType)(DWORD, LPOLESTR *) { return E_NOTIMPL; }
|
|
STDMETHOD(SetExtent)(DWORD, SIZEL *) { return E_NOTIMPL; }
|
|
STDMETHOD(GetExtent)(DWORD, SIZEL *) { return E_NOTIMPL; }
|
|
STDMETHOD(Advise)(IAdviseSink *, DWORD *) { return E_NOTIMPL; }
|
|
STDMETHOD(Unadvise)(DWORD) { return E_NOTIMPL; }
|
|
STDMETHOD(EnumAdvise)(IEnumSTATDATA **) { return E_NOTIMPL; }
|
|
|
|
STDMETHOD(GetMiscStatus)(DWORD dwAspect, DWORD *pdwStatus)
|
|
{
|
|
if (!pdwStatus)
|
|
return E_INVALIDARG;
|
|
|
|
*pdwStatus = OLEMISC_SETCLIENTSITEFIRST | OLEMISC_INVISIBLEATRUNTIME;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHOD(SetColorScheme)(LOGPALETTE *) { return E_NOTIMPL; }
|
|
|
|
// ILicensedClassManager methods
|
|
STDMETHOD(OnChangeInRequiredClasses)(IRequireClasses * pRequireClasses);
|
|
|
|
// ILocalRegistry methods
|
|
STDMETHOD(CreateInstance)(CLSID clsid,
|
|
IUnknown * punkOuter,
|
|
REFIID riid,
|
|
DWORD dwClsCtx,
|
|
void ** ppvObj);
|
|
STDMETHOD(GetTypeLibOfClsid)(CLSID clsid, ITypeLib ** ptlib);
|
|
STDMETHOD(GetClassObjectOfClsid)(REFCLSID rclsid,
|
|
DWORD dwClsCtx,
|
|
LPVOID lpReserved,
|
|
REFIID riid,
|
|
void ** ppcClassObject);
|
|
|
|
// IRequireClasses methods
|
|
STDMETHOD(CountRequiredClasses)(ULONG * pcClasses);
|
|
STDMETHOD(GetRequiredClasses)(ULONG iClass, CLSID * pclsid);
|
|
|
|
// IPersist methods
|
|
STDMETHOD(GetClassID)(CLSID * pclsid);
|
|
|
|
// IPersistStream methods
|
|
STDMETHOD(IsDirty)();
|
|
STDMETHOD(Load)(IStream * pstm);
|
|
STDMETHOD(Save)(IStream * pstm, BOOL fClearDirty);
|
|
STDMETHOD(GetSizeMax)(ULARGE_INTEGER * pcbSize);
|
|
|
|
// IPersistStreamInit methods
|
|
STDMETHOD(InitNew)();
|
|
|
|
// IPersistPropertyBag methods
|
|
STDMETHOD(Load)(IPropertyBag * pPropBag, IErrorLog * pErrorLog);
|
|
STDMETHOD(Save)(IPropertyBag * pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties);
|
|
|
|
protected:
|
|
struct LICENSE // CLSID-License structure
|
|
{
|
|
CLSID clsid; // CLSID of the object
|
|
BSTR bstrLic; // License (as a BSTR)
|
|
IClassFactory2 * pcf2; // Cached class factory (not persisted)
|
|
};
|
|
DEFINE_ARY(LICENSE);
|
|
|
|
IUnknown * _pUnkSite; // Site object
|
|
|
|
BOOL _fDirty:1; // Object is dirty
|
|
BOOL _fLoaded:1; // Object has been loaded
|
|
BOOL _fPersistPBag:1; // IPersistPropertyBag is being used
|
|
BOOL _fPersistStream:1; // IPersistStream is being used
|
|
|
|
GUID _guidLPK; // Identifying GUID of the .LPK
|
|
|
|
CAryLICENSE _aryLic; // Array of CLSID-License pairs
|
|
|
|
HRESULT PrivateQueryInterface(REFIID riid, void ** ppvObj);
|
|
|
|
HRESULT FindInStream(IStream * pstm, BYTE * pbData, ULONG cbData);
|
|
HRESULT Load(IStream * pstm, ULONG cbSize);
|
|
|
|
HRESULT AddClass(REFCLSID rclsid, int * piLic);
|
|
BOOL FindClass(REFCLSID rclsid, int * piLic);
|
|
};
|
|
|
|
|
|
#endif // _FACTORY_HXX
|