WindowsXP-SP1/admin/hmonitor/snapin/hmrulestatusinstance.cpp
2020-09-30 16:53:49 +02:00

243 lines
4.8 KiB
C++

// HMRuleStatusInstance.cpp: implementation of the CHMRuleStatusInstance class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "snapin.h"
#include "HMRuleStatus.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
IMPLEMENT_DYNCREATE(CHMRuleStatusInstance,CHMEvent)
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CHMRuleStatusInstance::CHMRuleStatusInstance()
{
m_iState = 2;
m_sState.LoadString(IDS_STRING_UNKNOWN);
m_sMessage.LoadString(IDS_STRING_CONNECTED);
m_sCurrentValue.LoadString(IDS_STRING_UNKNOWN);
}
CHMRuleStatusInstance::CHMRuleStatusInstance(const CHMRuleStatusInstance& rsi)
{
m_sSystemName = rsi.m_sSystemName;
m_sGuid = rsi.m_sGuid;
m_ID= rsi.m_ID;
m_sMessage = rsi.m_sMessage;
m_sInstanceName = rsi.m_sInstanceName;
m_iState = rsi.m_iState;
m_sState = rsi.m_sState;
m_sStatusGuid = rsi.m_sStatusGuid;
m_sCurrentValue = rsi.m_sCurrentValue;
m_sDateTime= rsi.m_sDateTime;
m_st = rsi.m_st;
m_sDataElementName = rsi.m_sDataElementName;
}
CHMRuleStatusInstance::~CHMRuleStatusInstance()
{
Destroy();
}
//////////////////////////////////////////////////////////////////////
// Create
//////////////////////////////////////////////////////////////////////
HRESULT CHMRuleStatusInstance::Create(const CString& sMachineName)
{
HRESULT hr = CHMEvent::Create(sMachineName);
if( !CHECKHRESULT(hr) )
{
return hr;
}
// create the enumerator for Microsoft_HMRuleStatus object instances
BSTR bsClass = SysAllocString(_T("Microsoft_HMThresholdStatusInstance"));
hr = CreateEnumerator(bsClass);
SysFreeString(bsClass);
if( !CHECKHRESULT(hr) )
{
return hr;
}
return hr;
}
HRESULT CHMRuleStatusInstance::Create(IWbemClassObject* pObject)
{
HRESULT hr = CHMEvent::Create(pObject);
if( !CHECKHRESULT(hr) )
{
return hr;
}
return hr;
}
//////////////////////////////////////////////////////////////////////
// Property Retrieval Operations
//////////////////////////////////////////////////////////////////////
HRESULT CHMRuleStatusInstance::GetAllProperties()
{
ASSERT(m_pIWbemClassObject);
if( m_pIWbemClassObject == NULL )
{
ASSERT(FALSE);
return S_FALSE;
}
HRESULT hr = S_OK;
// GUID
hr = GetProperty(IDS_STRING_MOF_GUID,m_sGuid);
m_sGuid.TrimLeft(_T("{"));
m_sGuid.TrimRight(_T("}"));
// StatusGUID
hr = GetProperty(IDS_STRING_MOF_STATUSGUID,m_sStatusGuid);
m_sStatusGuid.TrimLeft(_T("{"));
m_sStatusGuid.TrimRight(_T("}"));
// State
hr = GetProperty(IDS_STRING_MOF_STATE,m_iState);
switch( m_iState )
{
case 0:
{
m_sState.LoadString(IDS_STRING_CRITICAL);
}
break;
case 1:
{
m_sState.LoadString(IDS_STRING_WARNING);
}
break;
case 2:
{
m_sState.LoadString(IDS_STRING_NODATA);
}
break;
case 3:
{
m_sState.LoadString(IDS_STRING_UNKNOWN);
}
break;
case 4:
{
m_sState.LoadString(IDS_STRING_OUTAGE);
}
break;
case 5:
{
m_sState.LoadString(IDS_STRING_DISABLED);
}
break;
case 6:
{
m_sState.LoadString(IDS_STRING_INFORMATION);
}
break;
case 7:
{
m_sState.LoadString(IDS_STRING_RESET);
}
break;
case 8:
{
m_sState.LoadString(IDS_STRING_NORMAL);
}
break;
}
// Message
hr = GetProperty(IDS_STRING_MOF_MESSAGE,m_sMessage);
// CurrentValue
hr = GetProperty(IDS_STRING_MOF_CURRENTVALUE,m_sCurrentValue);
// InstanceName
hr = GetProperty(IDS_STRING_MOF_INSTANCENAME,m_sInstanceName);
// ID
hr = GetProperty(IDS_STRING_MOF_ID,m_ID);
// DTime
CTime time;
hr = GetProperty(IDS_STRING_MOF_LOCALTIME,time);
time.GetAsSystemTime(m_st);
CString sTime;
CString sDate;
int iLen = GetTimeFormat(LOCALE_USER_DEFAULT,0L,&m_st,NULL,NULL,0);
iLen = GetTimeFormat(LOCALE_USER_DEFAULT,0L,&m_st,NULL,sTime.GetBuffer(iLen+(sizeof(TCHAR)*1)),iLen);
sTime.ReleaseBuffer();
iLen = GetDateFormat(LOCALE_USER_DEFAULT,0L,&m_st,NULL,NULL,0);
iLen = GetDateFormat(LOCALE_USER_DEFAULT,0L,&m_st,NULL,sDate.GetBuffer(iLen+(sizeof(TCHAR)*1)),iLen);
sDate.ReleaseBuffer();
m_sDateTime = sDate + _T(" ") + sTime;
// propogate the status back up to the HMSystemStatus instance
// this gives us a roll up of status at each node in the tree
CHMEvent* pParent = GetParent();
CHMRuleStatusInstance* pStatus = NULL;
while(pParent)
{
pStatus = new CHMRuleStatusInstance(*this);
pStatus->SetParent(this);
pParent->m_RolledUpRuleStatus.Add(pStatus);
pParent = pParent->GetParent();
}
return hr;
}