windows-nt/Source/XPSP1/NT/base/fs/utils/cryptmnu/classfac.cpp
2020-09-26 16:20:57 +08:00

72 lines
1.4 KiB
C++

#include "priv.h"
#include "cryptmnu.h"
CCryptMenuClassFactory::CCryptMenuClassFactory() {
m_ObjRefCount = 1;
g_DllRefCount++;
}
CCryptMenuClassFactory::~CCryptMenuClassFactory() {
g_DllRefCount--;
}
STDMETHODIMP
CCryptMenuClassFactory::QueryInterface( REFIID iid, void **ppvObject) {
if (IsEqualIID(iid,IID_IUnknown)) {
*ppvObject = (LPUNKNOWN)(LPCLASSFACTORY) this;
m_ObjRefCount++;
return(NOERROR);
}
if (IsEqualIID(iid,IID_IClassFactory)) {
*ppvObject = (LPCLASSFACTORY) this;
m_ObjRefCount++;
return(NOERROR);
}
*ppvObject = NULL;
return(E_NOINTERFACE);
}
STDMETHODIMP_(DWORD)
CCryptMenuClassFactory::AddRef() {
return(++m_ObjRefCount);
}
STDMETHODIMP_(DWORD)
CCryptMenuClassFactory::Release() {
if(--m_ObjRefCount ==0) {
delete this;
}
return(m_ObjRefCount);
}
STDMETHODIMP
CCryptMenuClassFactory::CreateInstance(LPUNKNOWN pUnkOuter,
REFIID riid,
void **ppvObject) {
CCryptMenuExt *pCryptMenu;
HRESULT hr;
*ppvObject = NULL;
if (pUnkOuter) {
return(CLASS_E_NOAGGREGATION);
}
pCryptMenu = new CCryptMenuExt;
if (!pCryptMenu) {
return(E_OUTOFMEMORY);
}
hr = pCryptMenu->QueryInterface(riid,ppvObject);
pCryptMenu->Release();
return hr;
}
STDMETHODIMP
CCryptMenuClassFactory::LockServer(BOOL) {
return(E_NOTIMPL);
}