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.
 
 
 
 
 
 

206 lines
4.1 KiB

//==========================================================================
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
// PURPOSE.
//
// Copyright 1998 - 1999 Microsoft Corporation. All Rights Reserved.
//
//--------------------------------------------------------------------------
#include "precomp.h"
//
// Global variables
//
EXTERN_C const GUID CLSID_SyncMgrHandler;
extern UINT g_cRefThisDll; // Reference count of this DLL.
extern HINSTANCE g_hmodThisDll; // Handle to this DLL itself.
//+---------------------------------------------------------------------------
//
// Member: CClassFactory::CClassFactory, public
//
// Synopsis: Constructor
//
// Arguments:
//
// Returns:
//
// Modifies:
//
//----------------------------------------------------------------------------
CClassFactory::CClassFactory()
{
m_cRef = 0L;
g_cRefThisDll++;
}
//+---------------------------------------------------------------------------
//
// Member: CClassFactory::~CClassFactory, public
//
// Synopsis: Destructor
//
// Arguments:
//
// Returns:
//
// Modifies:
//
//----------------------------------------------------------------------------
CClassFactory::~CClassFactory()
{
g_cRefThisDll--;
}
//+---------------------------------------------------------------------------
//
// Member: CClassFactory::QueryInterface public
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
// Modifies:
//
//----------------------------------------------------------------------------
STDMETHODIMP CClassFactory::QueryInterface(REFIID riid,
LPVOID FAR *ppv)
{
*ppv = NULL;
// Any interface on this object is the object pointer
if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory))
{
*ppv = (LPCLASSFACTORY)this;
AddRef();
return NOERROR;
}
return E_NOINTERFACE;
}
//+---------------------------------------------------------------------------
//
// Member: CClassFactory::AddRef, public
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
// Modifies:
//
//----------------------------------------------------------------------------
STDMETHODIMP_(ULONG) CClassFactory::AddRef()
{
return ++m_cRef;
}
//+---------------------------------------------------------------------------
//
// Member: CClassFactory::Release, public
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
// Modifies:
//
//----------------------------------------------------------------------------
STDMETHODIMP_(ULONG) CClassFactory::Release()
{
if (--m_cRef)
return m_cRef;
delete this;
return 0L;
}
//+---------------------------------------------------------------------------
//
// Member: CClassFactory::CreateInstance, public
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
// Modifies:
//
//----------------------------------------------------------------------------
STDMETHODIMP CClassFactory::CreateInstance(LPUNKNOWN pUnkOuter,
REFIID riid,
LPVOID *ppvObj)
{
HRESULT hr = NOERROR;
*ppvObj = NULL;
if (pUnkOuter)
return CLASS_E_NOAGGREGATION;
LPSYNCMGRSYNCHRONIZE pSyncMgrHandler = new CSyncMgrHandler();
if (NULL == pSyncMgrHandler)
return E_OUTOFMEMORY;
hr = pSyncMgrHandler->QueryInterface(riid, ppvObj);
pSyncMgrHandler->Release(); // remove our reference.
return hr;
}
//+---------------------------------------------------------------------------
//
// Member: CClassFactory::LockServer, public
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
// Modifies:
//
//----------------------------------------------------------------------------
STDMETHODIMP CClassFactory::LockServer(BOOL fLock)
{
if (fLock)
{
++g_cRefThisDll;
}
else
{
--g_cRefThisDll;
}
return NOERROR;
}