forked from gurnec/HashCheck
-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathCHashCheckClassFactory.hpp
More file actions
57 lines (47 loc) · 1.51 KB
/
CHashCheckClassFactory.hpp
File metadata and controls
57 lines (47 loc) · 1.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
* HashCheck Shell Extension
* Copyright (C) Kai Liu. All rights reserved.
*
* Please refer to readme.txt for information about this source code.
* Please refer to license.txt for details about distribution and modification.
**/
#ifndef __CHASHCHECKCLASSFACTORY_HPP__
#define __CHASHCHECKCLASSFACTORY_HPP__
#include "globals.h"
enum HASHCHECK_CLASS_OBJECT {
HCCO_LEGACY = 0,
HCCO_EXPLORER_CREATE,
HCCO_EXPLORER_VERIFY,
HCCO_EXPLORER_OPTIONS
};
class CHashCheckClassFactory : public IClassFactory
{
protected:
CREF m_cRef;
HASHCHECK_CLASS_OBJECT m_classObject;
public:
CHashCheckClassFactory( HASHCHECK_CLASS_OBJECT classObject = HCCO_LEGACY ) { InterlockedIncrement(&g_cRefThisDll); m_cRef = 1; m_classObject = classObject; }
~CHashCheckClassFactory( ) { InterlockedDecrement(&g_cRefThisDll); }
// IUnknown members
STDMETHODIMP QueryInterface( REFIID, LPVOID * );
STDMETHODIMP_(ULONG) AddRef( ) { return(InterlockedIncrement(&m_cRef)); }
STDMETHODIMP_(ULONG) Release( )
{
// We need a non-volatile variable, hence the cRef variable
LONG cRef = InterlockedDecrement(&m_cRef);
if (cRef == 0) delete this;
return(cRef);
}
// IClassFactory members
STDMETHODIMP CreateInstance( LPUNKNOWN, REFIID, LPVOID * );
STDMETHODIMP LockServer( BOOL fLock )
{
if (fLock)
InterlockedIncrement(&g_cRefThisDll);
else
InterlockedDecrement(&g_cRefThisDll);
return(S_OK);
}
};
typedef CHashCheckClassFactory *LPCHASHCHECKCLASSFACTORY;
#endif