Leaked source code of windows server 2003
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

//+----------------------------------------------------------------------------
// 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