// 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; }