Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127/* vfdshcfact.cpp
Virtual Floppy Drive for Windows Driver control library shell extension COM class factory class
Copyright (c) 2003-2005 Ken Kato*/
#define WIN32_LEAN_AND_MEAN#include <windows.h>#include <shlobj.h>
#include "vfdtypes.h"#include "vfdlib.h"#include "vfdshext.h"
// class header#include "vfdshcfact.h"
//// constructor//CVfdFactory::CVfdFactory(){ VFDTRACE(0, ("CVfdFactory::CVfdFactory()\n"));
m_cRefCnt = 0L;
g_cDllRefCnt++;}
//// destructor//CVfdFactory::~CVfdFactory(){ VFDTRACE(0, ("CVfdFactory::~CVfdFactory()\n"));
g_cDllRefCnt--;}
//// IUnknown methods//STDMETHODIMP CVfdFactory::QueryInterface( REFIID riid, LPVOID *ppv){ VFDTRACE(0, ("CVfdFactory::QueryInterface()\n"));
*ppv = NULL;
if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory)) { *ppv = (LPCLASSFACTORY)this;
AddRef();
return NOERROR; }
return E_NOINTERFACE;}
STDMETHODIMP_(ULONG) CVfdFactory::AddRef(){ VFDTRACE(0, ("CVfdFactory::AddRef()\n"));
return ++m_cRefCnt;}
STDMETHODIMP_(ULONG) CVfdFactory::Release(){ VFDTRACE(0, ("CVfdFactory::Release()\n"));
if (--m_cRefCnt) { return m_cRefCnt; }
#ifndef __REACTOS__ delete this;#endif
return 0L;}
//// IClassFactory methods//STDMETHODIMP CVfdFactory::CreateInstance( LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj){ VFDTRACE(0, ("CVfdFactory::CreateInstance()\n"));
*ppvObj = NULL;
// Shell extensions typically don't support // aggregation (inheritance)
if (pUnkOuter) { return CLASS_E_NOAGGREGATION; }
// Create the main shell extension object. // The shell will then call QueryInterface with IID_IShellExtInit // -- this is how shell extensions are initialized.
LPCVFDSHEXT pVfdShExt = new CVfdShExt;
if (!pVfdShExt) { return E_OUTOFMEMORY; }
return pVfdShExt->QueryInterface(riid, ppvObj);}
STDMETHODIMP CVfdFactory::LockServer(BOOL fLock){ VFDTRACE(0, ("CVfdFactory::LockServer()\n")); UNREFERENCED_PARAMETER(fLock); return NOERROR;}