124 lines
2.6 KiB
C++
124 lines
2.6 KiB
C++
|
// tmpcnsmr.cpp: implementation of the CConsumer class.
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "HMAgent.h"
|
||
|
#include "system.h"
|
||
|
#include "tmpcnsmr.h"
|
||
|
|
||
|
extern CSystem* g_pSystem;
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
// Construction/Destruction
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
CTempConsumer::CTempConsumer(HMTEMPEVENT_TYPE eventType)
|
||
|
{
|
||
|
m_cRef = 1;
|
||
|
m_hmTempEventType = eventType;
|
||
|
}
|
||
|
|
||
|
CTempConsumer::CTempConsumer(LPTSTR szGUID)
|
||
|
{
|
||
|
m_cRef = 1;
|
||
|
m_hmTempEventType = HMTEMPEVENT_ACTION;
|
||
|
wcscpy(m_szGUID, szGUID);
|
||
|
}
|
||
|
|
||
|
CTempConsumer::CTempConsumer(CEventQueryDataCollector *pEQDC)
|
||
|
{
|
||
|
MY_ASSERT(pEQDC);
|
||
|
m_cRef = 1;
|
||
|
m_hmTempEventType = HMTEMPEVENT_EQDC;
|
||
|
m_pEQDC = pEQDC;
|
||
|
}
|
||
|
|
||
|
CTempConsumer::~CTempConsumer()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
// IUnknown Implementation
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
STDMETHODIMP CTempConsumer::QueryInterface(REFIID riid, LPVOID* ppv)
|
||
|
{
|
||
|
*ppv = 0;
|
||
|
|
||
|
if (IID_IUnknown==riid || IID_IWbemObjectSink == riid)
|
||
|
{
|
||
|
*ppv = (IWbemEventProvider *) this;
|
||
|
AddRef();
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
return E_NOINTERFACE;
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP_(ULONG) CTempConsumer::AddRef(void)
|
||
|
{
|
||
|
return InterlockedIncrement((long*)&m_cRef);
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP_(ULONG) CTempConsumer::Release(void)
|
||
|
{
|
||
|
LONG lCount = InterlockedDecrement((long*)&m_cRef);
|
||
|
|
||
|
if (0 != lCount)
|
||
|
{
|
||
|
return lCount;
|
||
|
}
|
||
|
|
||
|
delete this;
|
||
|
return 0L;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
// IWbemObjectSink Implementation
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
STDMETHODIMP CTempConsumer::Indicate(long lObjectCount, IWbemClassObject** ppObjArray)
|
||
|
{
|
||
|
if (!g_pSystem)
|
||
|
{
|
||
|
return WBEM_E_NOT_AVAILABLE;
|
||
|
}
|
||
|
|
||
|
for (long i = 0; i < lObjectCount; i++)
|
||
|
{
|
||
|
IWbemClassObject *pObj = ppObjArray[i];
|
||
|
switch(m_hmTempEventType)
|
||
|
{
|
||
|
case HMTEMPEVENT_ACTION:
|
||
|
g_pSystem->HandleTempActionEvent(m_szGUID, pObj);
|
||
|
break;
|
||
|
case HMTEMPEVENT_EQDC:
|
||
|
g_pSystem->HandleTempEvent(m_pEQDC, pObj);
|
||
|
break;
|
||
|
case HMTEMPEVENT_ACTIONERROR:
|
||
|
g_pSystem->HandleTempActionErrorEvent(pObj);
|
||
|
break;
|
||
|
case HMTEMPEVENT_ACTIONSID:
|
||
|
g_pSystem->HandleTempActionSIDEvent(pObj);
|
||
|
break;
|
||
|
default:
|
||
|
MY_ASSERT(FALSE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return WBEM_NO_ERROR;
|
||
|
}
|
||
|
|
||
|
|
||
|
//***************************************************************************
|
||
|
STDMETHODIMP CTempConsumer::SetStatus(
|
||
|
long lFlags,
|
||
|
HRESULT hResult,
|
||
|
BSTR strParam,
|
||
|
IWbemClassObject* pObjParam
|
||
|
)
|
||
|
{
|
||
|
// Not called during event delivery.
|
||
|
|
||
|
return WBEM_NO_ERROR;
|
||
|
}
|