mirror of https://github.com/tongzx/nt5src
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.
279 lines
5.8 KiB
279 lines
5.8 KiB
//____________________________________________________________________________
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1995 - 1995.
|
|
//
|
|
// File: ole.cxx
|
|
//
|
|
// Contents: IUnknown & IClassFactory for all OLE objects
|
|
//
|
|
// History: 1/4/1996 RaviR Created
|
|
//
|
|
//____________________________________________________________________________
|
|
|
|
#include "..\pch\headers.hxx"
|
|
#pragma hdrstop
|
|
|
|
#include "dbg.h"
|
|
#include "macros.h"
|
|
#include "guids.h"
|
|
#include "dll.hxx"
|
|
#include <mstask.h> // Necessary for util.hxx/schedui.hxx inclusion.
|
|
#include "util.hxx"
|
|
#include "..\schedui\schedui.hxx"
|
|
|
|
|
|
//____________________________________________________________________________
|
|
//
|
|
// Class: CJobFolderCF
|
|
//
|
|
// Purpose: Class factory to create CJobFolder.
|
|
//
|
|
// History: 1/24/1996 RaviR Created
|
|
//____________________________________________________________________________
|
|
|
|
|
|
class CJobFolderCF : public IClassFactory
|
|
{
|
|
public:
|
|
// IUnknown methods
|
|
DECLARE_IUNKNOWN_METHODS;
|
|
|
|
// IClassFactory methods
|
|
STDMETHOD(CreateInstance)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObj);
|
|
STDMETHOD(LockServer)(BOOL fLock);
|
|
};
|
|
|
|
STDMETHODIMP
|
|
CJobFolderCF::QueryInterface(REFIID riid, LPVOID* ppvObj)
|
|
{
|
|
if (IsEqualIID(IID_IUnknown, riid) ||
|
|
IsEqualIID(IID_IClassFactory, riid))
|
|
{
|
|
*ppvObj = (IUnknown*)(IClassFactory*) this;
|
|
this->AddRef();
|
|
return S_OK;
|
|
}
|
|
|
|
*ppvObj = NULL;
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
STDMETHODIMP_(ULONG)
|
|
CJobFolderCF::AddRef()
|
|
{
|
|
return CDll::AddRef();
|
|
}
|
|
|
|
STDMETHODIMP_(ULONG)
|
|
CJobFolderCF::Release()
|
|
{
|
|
return CDll::Release();
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CJobFolderCF::CreateInstance(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObj)
|
|
{
|
|
if (pUnkOuter != NULL)
|
|
{
|
|
return E_NOTIMPL; // don't support aggregation
|
|
}
|
|
|
|
return JFGetJobFolder(riid, ppvObj);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CJobFolderCF::LockServer(BOOL fLock)
|
|
{
|
|
CDll::LockServer(fLock);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
|
|
//____________________________________________________________________________
|
|
//
|
|
// Class: CSchedObjExtCF
|
|
//
|
|
// Purpose: Class factory to create CSchedObjExt.
|
|
//
|
|
// History: 4/25/1996 RaviR Created
|
|
//____________________________________________________________________________
|
|
|
|
|
|
class CSchedObjExtCF : public IClassFactory
|
|
{
|
|
public:
|
|
// IUnknown methods
|
|
DECLARE_IUNKNOWN_METHODS;
|
|
|
|
// IClassFactory methods
|
|
STDMETHOD(CreateInstance)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObj);
|
|
STDMETHOD(LockServer)(BOOL fLock);
|
|
};
|
|
|
|
STDMETHODIMP
|
|
CSchedObjExtCF::QueryInterface(REFIID riid, LPVOID* ppvObj)
|
|
{
|
|
if (IsEqualIID(IID_IUnknown, riid) ||
|
|
IsEqualIID(IID_IClassFactory, riid))
|
|
{
|
|
*ppvObj = (IUnknown*)(IClassFactory*) this;
|
|
this->AddRef();
|
|
return S_OK;
|
|
}
|
|
|
|
*ppvObj = NULL;
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
STDMETHODIMP_(ULONG)
|
|
CSchedObjExtCF::AddRef()
|
|
{
|
|
return CDll::AddRef();
|
|
}
|
|
|
|
STDMETHODIMP_(ULONG)
|
|
CSchedObjExtCF::Release()
|
|
{
|
|
return CDll::Release();
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CSchedObjExtCF::CreateInstance(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObj)
|
|
{
|
|
if (pUnkOuter != NULL)
|
|
{
|
|
return E_NOTIMPL; // don't support aggregation
|
|
}
|
|
|
|
return JFGetSchedObjExt(riid, ppvObj);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CSchedObjExtCF::LockServer(BOOL fLock)
|
|
{
|
|
CDll::LockServer(fLock);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
JF_IMPLEMENT_CLASSFACTORY(CTaskIconExt);
|
|
|
|
STDMETHODIMP
|
|
CTaskIconExtCF::CreateInstance(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObj)
|
|
{
|
|
if (pUnkOuter != NULL)
|
|
{
|
|
return E_NOTIMPL; // don't support aggregation
|
|
}
|
|
|
|
return JFGetTaskIconExt(riid, ppvObj);
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
CJobFolderCF * pcfJobFolder = NULL;
|
|
CSchedObjExtCF * pcfSchedObjExt = NULL;
|
|
CTaskIconExtCF * pcfTaskIconExt = NULL;
|
|
|
|
HRESULT
|
|
JFGetClassObject(
|
|
REFCLSID cid,
|
|
REFIID riid,
|
|
LPVOID * ppvObj)
|
|
{
|
|
CDllRef DllRef; // don't nuke me now!
|
|
|
|
if (IsEqualCLSID(cid, CLSID_CJobFolder))
|
|
{
|
|
if (pcfJobFolder != NULL)
|
|
{
|
|
return pcfJobFolder->QueryInterface(riid, ppvObj);
|
|
}
|
|
else
|
|
{
|
|
return E_FAIL;
|
|
}
|
|
}
|
|
else if (IsEqualCLSID(cid, CLSID_CSchedObjExt))
|
|
{
|
|
if (pcfSchedObjExt != NULL)
|
|
{
|
|
return pcfSchedObjExt->QueryInterface(riid, ppvObj);
|
|
}
|
|
else
|
|
{
|
|
return E_FAIL;
|
|
}
|
|
}
|
|
else if (IsEqualCLSID(cid, CLSID_CTaskIconExt))
|
|
{
|
|
if (pcfTaskIconExt != NULL)
|
|
{
|
|
return pcfTaskIconExt->QueryInterface(riid, ppvObj);
|
|
}
|
|
else
|
|
{
|
|
return E_FAIL;
|
|
}
|
|
}
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
HRESULT
|
|
AllocFolderCFs(void)
|
|
{
|
|
pcfJobFolder = new CJobFolderCF;
|
|
if (pcfJobFolder == NULL)
|
|
{
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
pcfSchedObjExt = new CSchedObjExtCF;
|
|
if (pcfSchedObjExt == NULL)
|
|
{
|
|
delete pcfJobFolder;
|
|
pcfJobFolder = NULL;
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
pcfTaskIconExt = new CTaskIconExtCF;
|
|
if (pcfTaskIconExt == NULL)
|
|
{
|
|
delete pcfJobFolder;
|
|
pcfJobFolder = NULL;
|
|
delete pcfSchedObjExt;
|
|
pcfSchedObjExt = NULL;
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
void
|
|
FreeFolderCFs(void)
|
|
{
|
|
if (pcfJobFolder != NULL)
|
|
{
|
|
delete pcfJobFolder;
|
|
pcfJobFolder = NULL;
|
|
}
|
|
if (pcfSchedObjExt != NULL)
|
|
{
|
|
delete pcfSchedObjExt;
|
|
pcfSchedObjExt = NULL;
|
|
}
|
|
if (pcfTaskIconExt != NULL)
|
|
{
|
|
delete pcfTaskIconExt;
|
|
pcfTaskIconExt = NULL;
|
|
}
|
|
}
|