151 lines
3.5 KiB
C++
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;
|
|
} |