Source code of Windows XP (NT5)
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.
|
|
//+----------------------------------------------------------------------------
// File: main.cxx
//
// Synopsis: This file contains the core routines and globals for creating
// LICMGR.DLL
//
//-----------------------------------------------------------------------------
// Includes -------------------------------------------------------------------
#include <mgr.hxx>
#include <factory.hxx>
// Globals --------------------------------------------------------------------
BEGIN_PROCESS_ATTACH ATTACH_METHOD(ProcessAttachMIME64) END_PROCESS_ATTACH
BEGIN_PROCESS_DETACH END_PROCESS_DETACH
BEGIN_THREAD_ATTACH END_THREAD_ATTACH
BEGIN_THREAD_DETACH END_THREAD_DETACH
BEGIN_PROCESS_PASSIVATE END_PROCESS_PASSIVATE
BEGIN_THREAD_PASSIVATE END_THREAD_PASSIVATE
BEGIN_CLASS_FACTORIES FACTORY(CLSID_LicenseManager, LicenseManagerFactory, NULL) END_CLASS_FACTORIES
DEFINE_REGISTRY_SECKEY(LicenseManagerCLSID, CLSID, {5220cb21-c88d-11cf-b347-00aa00a28331}) DEFAULT_VALUE(Microsoft Licensed Class Manager 1.0) BEGIN_SUBKEY(Implemented Categories) BEGIN_SUBKEY({7DD95801-9882-11CF-9FA9-00AA006C42C4}) END_SUBKEY BEGIN_SUBKEY({7DD95802-9882-11CF-9FA9-00AA006C42C4}) END_SUBKEY END_SUBKEY BEGIN_SUBKEY(InprocServer32) DEFAULT_VALUE(<m>) BEGIN_NAMED_VALUES NAMED_VALUE(ThreadingModel, Apartment) END_NAMED_VALUES END_SUBKEY BEGIN_SUBKEY(MiscStatus) DEFAULT_VALUE(0) END_SUBKEY BEGIN_SUBKEY(ProgID) DEFAULT_VALUE(License.Manager.1) END_SUBKEY BEGIN_SUBKEY(Version) DEFAULT_VALUE(1.0) END_SUBKEY BEGIN_SUBKEY(VersionIndependentProgID) DEFAULT_VALUE(License.Manager) END_SUBKEY END_REGISTRY_KEY
DEFINE_REGISTRY_KEY(LicenseManagerProgID, License.Manager.1) DEFAULT_VALUE(Microsoft Licensed Class Manager 1.0) BEGIN_SUBKEY(CLSID) DEFAULT_VALUE({5220cb21-c88d-11cf-b347-00aa00a28331}) END_SUBKEY END_REGISTRY_KEY
DEFINE_REGISTRY_KEY(LicenseManagerVProgID, License.Manager) DEFAULT_VALUE(Microsoft Licensed Class Manager) BEGIN_SUBKEY(CurVer) DEFAULT_VALUE(License.Manager.1) END_SUBKEY END_REGISTRY_KEY
BEGIN_REGISTRY_KEYS REGISTRY_KEY(LicenseManagerCLSID) REGISTRY_KEY(LicenseManagerProgID) REGISTRY_KEY(LicenseManagerVProgID) END_REGISTRY_KEYS
//+----------------------------------------------------------------------------
// Function: AllocateThreadState
//
// Synopsis:
//
//-----------------------------------------------------------------------------
HRESULT AllocateThreadState( THREADSTATE ** ppts) { Assert(ppts);
*ppts = new THREADSTATE; if (!*ppts) { return E_OUTOFMEMORY; }
memset(*ppts, 0, sizeof(THREADSTATE)); return S_OK; }
//+----------------------------------------------------------------------------
//
// Function: LicensedClassManagerFactory
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
//-----------------------------------------------------------------------------
HRESULT LicenseManagerFactory( IUnknown * pUnkOuter, REFIID riid, void ** ppvObj) { CLicenseManager * plcmgr = new CLicenseManager(pUnkOuter);
if (!plcmgr) { *ppvObj = NULL; return E_OUTOFMEMORY; }
return plcmgr->PrivateQueryInterface(riid, ppvObj); }
//+----------------------------------------------------------------------------
//
// Member: CLicenseManager
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
//-----------------------------------------------------------------------------
CLicenseManager::CLicenseManager( IUnknown * pUnkOuter) : CComponent(pUnkOuter) { _pUnkSite = NULL;
_fDirty = FALSE; _fLoaded = FALSE; _fPersistPBag = FALSE; _fPersistStream = FALSE;
_guidLPK = GUID_NULL; }
//+----------------------------------------------------------------------------
//
// Member: ~CLicenseManager
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
//-----------------------------------------------------------------------------
CLicenseManager::~CLicenseManager() { int i;
for (i = _aryLic.Size()-1; i >= 0; i--) { ::SysFreeString(_aryLic[i].bstrLic); ::SRelease(_aryLic[i].pcf2); }
::SRelease(_pUnkSite); }
//+----------------------------------------------------------------------------
//
// Member: SetSite
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
//-----------------------------------------------------------------------------
STDMETHODIMP CLicenseManager::SetSite( IUnknown * pUnkSite) { ::SClear(&_pUnkSite);
_pUnkSite = pUnkSite; if (_pUnkSite) { _pUnkSite->AddRef(); } return S_OK; }
//+----------------------------------------------------------------------------
//
// Member: GetSite
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
//-----------------------------------------------------------------------------
STDMETHODIMP CLicenseManager::GetSite( REFIID riid, void ** ppvSite) { HRESULT hr;
if (!ppvSite) return E_INVALIDARG;
if (_pUnkSite) { hr = _pUnkSite->QueryInterface(riid, ppvSite); } else { *ppvSite = NULL; hr = E_FAIL; } return hr; }
//+----------------------------------------------------------------------------
//
// Member: SetClientSite
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
//-----------------------------------------------------------------------------
STDMETHODIMP CLicenseManager::SetClientSite( IOleClientSite * pClientSite) { return SetSite(pClientSite); }
//+----------------------------------------------------------------------------
//
// Member: GetClientSite
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
//-----------------------------------------------------------------------------
STDMETHODIMP CLicenseManager::GetClientSite( IOleClientSite ** ppClientSite) { return GetSite(IID_IOleClientSite, (void **)ppClientSite); }
//+----------------------------------------------------------------------------
//
// Member: PrivateQueryInterface
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
//-----------------------------------------------------------------------------
HRESULT CLicenseManager::PrivateQueryInterface( REFIID riid, void ** ppvObj) { if (riid == IID_IObjectWithSite) *ppvObj = (IObjectWithSite *)this;
else if (riid == IID_IOleObject) *ppvObj = (IOleObject *)this;
else if (riid == IID_ILicensedClassManager) *ppvObj = (ILicensedClassManager *)this;
else if (riid == IID_ILocalRegistry) *ppvObj = (ILocalRegistry *)this;
else if (riid == IID_IRequireClasses) *ppvObj = (IRequireClasses *)this;
else if (riid == IID_IPersistStream && !_fPersistPBag) { _fPersistStream = TRUE; *ppvObj = (IPersistStream *)this; }
else if (riid == IID_IPersistStreamInit && !_fPersistPBag) { _fPersistStream = TRUE; *ppvObj = (IPersistStreamInit *)this; }
else if (riid == IID_IPersistPropertyBag && !_fPersistStream) { _fPersistPBag = TRUE; *ppvObj = (IPersistPropertyBag *)this; }
if (*ppvObj) return S_OK; else return parent::PrivateQueryInterface(riid, ppvObj); }
|