[VFD] Remove no longer required ReactOS specific change
[reactos.git] / modules / rosapps / lib / vfdlib / vfdshcfact.cpp
1 /*
2 vfdshcfact.cpp
3
4 Virtual Floppy Drive for Windows
5 Driver control library
6 shell extension COM class factory class
7
8 Copyright (c) 2003-2005 Ken Kato
9 */
10
11 #define WIN32_LEAN_AND_MEAN
12 #include <windows.h>
13 #include <shlobj.h>
14
15 #include "vfdtypes.h"
16 #include "vfdlib.h"
17 #include "vfdshext.h"
18
19 // class header
20 #include "vfdshcfact.h"
21
22 //
23 // constructor
24 //
25 CVfdFactory::CVfdFactory()
26 {
27 VFDTRACE(0, ("CVfdFactory::CVfdFactory()\n"));
28
29 m_cRefCnt = 0L;
30
31 g_cDllRefCnt++;
32 }
33
34 //
35 // destructor
36 //
37 CVfdFactory::~CVfdFactory()
38 {
39 VFDTRACE(0, ("CVfdFactory::~CVfdFactory()\n"));
40
41 g_cDllRefCnt--;
42 }
43
44 //
45 // IUnknown methods
46 //
47 STDMETHODIMP CVfdFactory::QueryInterface(
48 REFIID riid,
49 LPVOID *ppv)
50 {
51 VFDTRACE(0, ("CVfdFactory::QueryInterface()\n"));
52
53 *ppv = NULL;
54
55 if (IsEqualIID(riid, IID_IUnknown) ||
56 IsEqualIID(riid, IID_IClassFactory)) {
57 *ppv = (LPCLASSFACTORY)this;
58
59 AddRef();
60
61 return NOERROR;
62 }
63
64 return E_NOINTERFACE;
65 }
66
67 STDMETHODIMP_(ULONG) CVfdFactory::AddRef()
68 {
69 VFDTRACE(0, ("CVfdFactory::AddRef()\n"));
70
71 return ++m_cRefCnt;
72 }
73
74 STDMETHODIMP_(ULONG) CVfdFactory::Release()
75 {
76 VFDTRACE(0, ("CVfdFactory::Release()\n"));
77
78 if (--m_cRefCnt) {
79 return m_cRefCnt;
80 }
81
82 #ifndef __REACTOS__
83 delete this;
84 #endif
85
86 return 0L;
87 }
88
89 //
90 // IClassFactory methods
91 //
92 STDMETHODIMP CVfdFactory::CreateInstance(
93 LPUNKNOWN pUnkOuter,
94 REFIID riid,
95 LPVOID *ppvObj)
96 {
97 VFDTRACE(0, ("CVfdFactory::CreateInstance()\n"));
98
99 *ppvObj = NULL;
100
101 // Shell extensions typically don't support
102 // aggregation (inheritance)
103
104 if (pUnkOuter) {
105 return CLASS_E_NOAGGREGATION;
106 }
107
108 // Create the main shell extension object.
109 // The shell will then call QueryInterface with IID_IShellExtInit
110 // -- this is how shell extensions are initialized.
111
112 LPCVFDSHEXT pVfdShExt = new CVfdShExt;
113
114 if (!pVfdShExt) {
115 return E_OUTOFMEMORY;
116 }
117
118 return pVfdShExt->QueryInterface(riid, ppvObj);
119 }
120
121 STDMETHODIMP CVfdFactory::LockServer(BOOL fLock)
122 {
123 VFDTRACE(0, ("CVfdFactory::LockServer()\n"));
124 UNREFERENCED_PARAMETER(fLock);
125 return NOERROR;
126 }