2025-04-27 07:49:33 -04:00

151 lines
3.5 KiB
C++

// cimomevent.cpp: implementation of the CCIMOMEvent class.
//
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "mca.h"
#include "cimomevent.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCIMOMEvent::CCIMOMEvent()
{
}
CCIMOMEvent::~CCIMOMEvent()
{
}
HRESULT CCIMOMEvent::PopulateObject(IWbemClassObject *pObj, BSTR bstrType)
{
HRESULT hr;
VARIANT v;
IDispatch *pDisp = NULL;
IWbemClassObject *tgtInst = NULL;
IWbemClassObject *tgtEvent = NULL;
VariantInit(&v);
m_bstrType = SysAllocString(bstrType);
if (SUCCEEDED(hr = pObj->Get(L"TheEvent", 0L, &v, NULL, NULL)))
{
// Get the Event
pDisp = (IDispatch *)V_DISPATCH(&v);
pDisp->AddRef();
VariantClear(&v);
// Do ServerNamespace
hr = pObj->Get(L"ServerNamespace", 0L, &v, NULL, NULL);
m_bstrServerNamespace = SysAllocString(V_BSTR(&v));
VariantClear(&v);
// Do Time
hr = pObj->Get(L"TimeOfIncident", 0L, &v, NULL, NULL);
m_bstrTime = SysAllocString(V_BSTR(&v));
VariantClear(&v);
if(SUCCEEDED(pDisp->QueryInterface(IID_IWbemClassObject,
(void **)&tgtInst)))
{
pDisp->Release();
BSTR bstrTarget = NULL;
// Do the EventType
hr = tgtInst->Get(L"__CLASS", 0L, &v, NULL, NULL);
m_bstrEvent = SysAllocString(V_BSTR(&v));
// Decide whether to get TargetInstance or TargetClass
if(wcscmp(L"__InstanceModificationEvent", V_BSTR(&v)) == 0 ||
wcscmp(L"__InstanceCreationEvent", V_BSTR(&v)) == 0 ||
wcscmp(L"__InstanceDeletionEvent", V_BSTR(&v)) == 0)
bstrTarget = SysAllocString(L"TargetInstance");
else if(wcscmp(L"__ClassModificationEvent", V_BSTR(&v)) == 0 ||
wcscmp(L"__ClassCreationEvent", V_BSTR(&v)) == 0 ||
wcscmp(L"__ClassDeletionEvent", V_BSTR(&v)) == 0)
bstrTarget = SysAllocString(L"TargetClass");
else
AfxMessageBox(_T("Unknown Event Type!\n"));
VariantClear(&v);
if((bstrTarget != NULL) && SUCCEEDED(hr = tgtInst->Get(bstrTarget,
0, &v, NULL, NULL)))
{
pDisp = (IDispatch *)V_DISPATCH(&v);
pDisp->AddRef();
VariantClear(&v);
if(SUCCEEDED(pDisp->QueryInterface(IID_IWbemClassObject,
(void **)&tgtEvent)))
{
pDisp->Release();
if ((hr = tgtEvent->Get(L"__RELPATH", 0L, &v,
NULL, NULL) == S_OK))
{
m_bstrName = SysAllocString(V_BSTR(&v));
VariantClear(&v);
tgtEvent->Release();
}
else
TRACE(_T("* Get() Item failed\n"));
}
else
TRACE(_T("* QI() failed\n"));
}
else
{
TRACE(_T("* Get() tgtInst failed\n"));
// We'll use the event rather than the target
m_bstrName = SysAllocString(m_bstrEvent);
}
}
else
TRACE(_T("* QI() failed\n"));
}
else
TRACE(_T("* Get() TheEvent failed\n"));
return hr;
}
HRESULT CCIMOMEvent::Publish(void *pDlg)
{
HRESULT hr;
CString clMyBuff;
CMcaDlg *pTheDlg = (CMcaDlg *)pDlg;
// compose a string for the listbox.
clMyBuff = _T("[");
clMyBuff += m_bstrTime;
clMyBuff += _T("] {");
clMyBuff += m_bstrType;
clMyBuff += _T("}");
pTheDlg->BroadcastEvent(m_bstrServerNamespace, m_bstrName, &clMyBuff,
(void *)this);
return hr;
}