windows-nt/Source/XPSP1/NT/admin/hmonitor/snapin/hmdataelementconfiguration.cpp
2020-09-26 16:20:57 +08:00

552 lines
12 KiB
C++

// HMDataElementConfiguration.cpp: implementation of the HMDataElementConfiguration class.
//
// Copyright (c) 2000 Microsoft Corporation
//
// 03/21/00 v-marfin bug 62315 : Moved from below GetAllProperties() to here to ensure
// this property was fetched.
#include "stdafx.h"
#include "snapin.h"
#include "HMDataElementConfiguration.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
IMPLEMENT_DYNCREATE(CHMDataElementConfiguration,CWbemClassObject)
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CHMDataElementConfiguration::CHMDataElementConfiguration()
{
m_sName.LoadString(IDS_STRING_UNKNOWN);
m_sDescription.LoadString(IDS_STRING_UNKNOWN);
m_iCollectionIntervalMultiple = 0;
m_iStatisticsWindowSize = 0;
m_iActiveDays = 0;
m_bRequireManualReset = false;
m_bEnable = true;
}
CHMDataElementConfiguration::~CHMDataElementConfiguration()
{
Destroy();
}
//////////////////////////////////////////////////////////////////////
// Create
//////////////////////////////////////////////////////////////////////
HRESULT CHMDataElementConfiguration::Create(const CString& sMachineName)
{
HRESULT hr = CWbemClassObject::Create(sMachineName);
if( !CHECKHRESULT(hr) )
{
return hr;
}
return hr;
}
HRESULT CHMDataElementConfiguration::Create(IWbemClassObject* pObject)
{
HRESULT hr = CWbemClassObject::Create(pObject);
if( !CHECKHRESULT(hr) )
{
return hr;
}
return hr;
}
//////////////////////////////////////////////////////////////////////
// Enumeration Operations
//////////////////////////////////////////////////////////////////////
HRESULT CHMDataElementConfiguration::EnumerateObjects(ULONG& uReturned)
{
// call GetNextObject to proceed to the next object instance
HRESULT hr = GetNextObject(uReturned);
if( FAILED(hr) || uReturned != 1 )
{
// no more instances
return hr;
}
ASSERT(m_pIWbemClassObject);
if( m_pIWbemClassObject == NULL )
{
ASSERT(0);
return S_FALSE;
}
// process the properties of this object
hr = GetAllProperties();
return hr;
}
//////////////////////////////////////////////////////////////////////
// Property Retrieval Operations
//////////////////////////////////////////////////////////////////////
HRESULT CHMDataElementConfiguration::GetAllProperties()
{
ASSERT(m_pIWbemClassObject);
if( m_pIWbemClassObject == NULL )
{
ASSERT(FALSE);
return S_FALSE;
}
HRESULT hr = S_OK;
// Unique identifier
hr = GetProperty(IDS_STRING_MOF_GUID,m_sGUID);
m_sGUID.TrimLeft(_T("{"));
m_sGUID.TrimRight(_T("}"));
// Display name
hr = GetLocaleStringProperty(IDS_STRING_MOF_NAME,m_sName);
// Description
hr = GetLocaleStringProperty(IDS_STRING_MOF_DESCRIPTION,m_sDescription);
// What Namespace we are to look in. Can contain path to a remote machine.
hr = GetProperty(IDS_STRING_MOF_TARGETNAMESPACE,m_sTargetNamespace);
// How often to sample.
hr = GetProperty(IDS_STRING_MOF_COLLECTIONINTERVAL,m_iCollectionIntervalMultiple);
// Number of collection intervals to calculate the statistics across.
// And also determining number of event rule cases.
hr = GetProperty(IDS_STRING_MOF_STATISTICSWINDOW,m_iStatisticsWindowSize);
// Days of the week it is active. One bit per day.
hr = GetProperty(IDS_STRING_MOF_ACTIVEDAYS,m_iActiveDays);
// Hour (24hr) to activate (if day is active). e.g. 9 for 9AM
hr = GetProperty(IDS_STRING_MOF_BEGINTIME,m_BeginTime,false);
if( hr == S_FALSE )
{
m_BeginTime = CTime(1999,12,31,0,0,0);
}
// Hour (24hr) to inactivate. e.g. 1350
hr = GetProperty(IDS_STRING_MOF_ENDTIME,m_EndTime,false);
if( hr == S_FALSE )
{
m_EndTime = CTime(1999,12,31,23,59,59);
}
// For use by the console to aid in the display
hr = GetProperty(IDS_STRING_MOF_TYPEGUID,m_sTypeGUID);
m_sTypeGUID.TrimLeft(_T("{"));
m_sTypeGUID.TrimRight(_T("}"));
hr = GetProperty(IDS_STRING_MOF_REQUIRERESET,m_bRequireManualReset);
// Enable
hr = GetProperty(IDS_STRING_MOF_ENABLE,m_bEnable);
// Statistics Property Names
hr = GetProperty(IDS_STRING_MOF_STATISTICSPROPERTYNAMES,m_saStatisticsPropertyNames);
return hr;
}
HRESULT CHMDataElementConfiguration::SaveEnabledProperty()
{
ASSERT(m_pIWbemClassObject);
if( m_pIWbemClassObject == NULL )
{
ASSERT(FALSE);
return S_FALSE;
}
HRESULT hr = S_OK;
// Enable
hr = SetProperty(IDS_STRING_MOF_ENABLE,m_bEnable);
ASSERT(SUCCEEDED(hr));
hr = SaveAllProperties();
ASSERT(SUCCEEDED(hr));
return hr;
}
HRESULT CHMDataElementConfiguration::SaveAllProperties()
{
HRESULT hr = S_OK;
// Display name
hr = SetProperty(IDS_STRING_MOF_NAME,m_sName);
// Description
hr = SetProperty(IDS_STRING_MOF_DESCRIPTION,m_sDescription);
// What Namespace we are to look in. Can contain path to a remote machine.
hr = SetProperty(IDS_STRING_MOF_TARGETNAMESPACE,m_sTargetNamespace);
// How often to sample.
hr = SetProperty(IDS_STRING_MOF_COLLECTIONINTERVAL,m_iCollectionIntervalMultiple);
// Number of collection intervals to calculate the statistics across.
// And also determining number of event rule cases.
hr = SetProperty(IDS_STRING_MOF_STATISTICSWINDOW,m_iStatisticsWindowSize);
// Days of the week it is active. One bit per day.
hr = SetProperty(IDS_STRING_MOF_ACTIVEDAYS,m_iActiveDays);
// Hour (24hr) to activate (if day is active). e.g. 9 for 9AM
hr = SetProperty(IDS_STRING_MOF_BEGINTIME,m_BeginTime,false);
// Hour (24hr) to inactivate. e.g. 1350
hr = SetProperty(IDS_STRING_MOF_ENDTIME,m_EndTime,false);
// For use by the console to aid in the display
hr = SetProperty(IDS_STRING_MOF_TYPEGUID,m_sTypeGUID);
hr = SetProperty(IDS_STRING_MOF_REQUIRERESET,m_bRequireManualReset);
// Enable
hr = SetProperty(IDS_STRING_MOF_ENABLE,m_bEnable);
// Statistics Property Names
hr = SetProperty(IDS_STRING_MOF_STATISTICSPROPERTYNAMES,m_saStatisticsPropertyNames);
if( ! CHECKHRESULT( hr = CWbemClassObject::SaveAllProperties() ) )
{
TRACE(_T("FAILED : Call to CWbemClassObject::SaveAllProperties failed.\n"));
}
return hr;
}
//////////////////////////////////////////////////////////////////////
// implementation of the CHMPolledGetObjectDataElementConfiguration class
//////////////////////////////////////////////////////////////////////
// Property Retreival Operations
//////////////////////////////////////////////////////////////////////
HRESULT CHMPolledGetObjectDataElementConfiguration::GetAllProperties()
{
HRESULT hr = S_OK;
// Unique identifier
// v-marfin 62315 : Moved from below GetAllProperties() to here to ensure
// this property was fetched.
hr = GetProperty(IDS_STRING_MOF_PATH,m_sObjectPath);
if (!CHECKHRESULT(hr))
{
return hr;
}
if( ! CHECKHRESULT(hr = CHMDataElementConfiguration::GetAllProperties()) )
{
return hr;
}
return hr;
}
HRESULT CHMPolledGetObjectDataElementConfiguration::SaveAllProperties()
{
HRESULT hr = S_OK;
// ObjectPath
hr = SetProperty(IDS_STRING_MOF_PATH,m_sObjectPath);
if( ! CHECKHRESULT(hr = CHMDataElementConfiguration::SaveAllProperties()) )
{
return hr;
}
return hr;
}
//////////////////////////////////////////////////////////////////////
// implementation of the CHMPolledMethodDataElementConfiguration class
CHMPolledMethodDataElementConfiguration::~CHMPolledMethodDataElementConfiguration()
{
DestroyArguments(m_Arguments);
}
void CHMPolledMethodDataElementConfiguration::AddArgument(HMContextArray& Arguments, const CString& sMachineName, const CString& sName, int iType, const CString& sValue)
{
CHMContext* pContext = new CHMContext;
pContext->SetMachineName(sMachineName);
CString sClassName = _T("Microsoft_HMContext");
BSTR bsClassName = sClassName.AllocSysString();
if( ! CHECKHRESULT(pContext->CreateInstance(bsClassName)) )
{
return;
}
pContext->m_iType = iType;
pContext->m_sValue = sValue;
pContext->m_sName = sName;
pContext->SaveAllProperties();
Arguments.Add(pContext);
::SysFreeString(bsClassName);
}
void CHMPolledMethodDataElementConfiguration::DestroyArguments(HMContextArray& Arguments)
{
for( int i = 0; i < Arguments.GetSize(); i++ )
{
if( GfxCheckObjPtr(Arguments[i],CHMContext) )
{
delete Arguments[i];
}
}
Arguments.RemoveAll();
}
void CHMPolledMethodDataElementConfiguration::CopyArgsToSafeArray(HMContextArray& Arguments, COleSafeArray& Target)
{
Target.CreateOneDim(VT_UNKNOWN,(int)Arguments.GetSize());
for( long i = 0; i < Arguments.GetSize(); i++ )
{
IWbemClassObject* pIWCO = Arguments[i]->GetClassObject();
if( pIWCO )
{
Target.PutElement(&i,pIWCO);
pIWCO->Release();
}
}
}
void CHMPolledMethodDataElementConfiguration::CopyArgsFromSafeArray(COleSafeArray& Arguments, HMContextArray& Target)
{
long lLower = 0L;
long lUpper = -1L;
Arguments.GetLBound(1L,&lLower);
Arguments.GetUBound(1L,&lUpper);
for( long i = lLower; i <= lUpper; i++ )
{
IWbemClassObject* pIWBCO = NULL;
Arguments.GetElement(&i,&pIWBCO);
if( pIWBCO )
{
CHMContext* pHMC = new CHMContext;
pHMC->Create(pIWBCO);
pHMC->GetAllProperties();
Target.Add(pHMC);
}
}
}
//////////////////////////////////////////////////////////////////////
// Property Retreival Operations
//////////////////////////////////////////////////////////////////////
HRESULT CHMPolledMethodDataElementConfiguration::GetAllProperties()
{
HRESULT hr = S_OK;
if( ! CHECKHRESULT(hr = CHMPolledGetObjectDataElementConfiguration::GetAllProperties()) )
{
return hr;
}
// MethodName
hr = GetProperty(IDS_STRING_MOF_METHODNAME,m_sMethodName);
// Arguments
hr = GetProperty(IDS_STRING_MOF_ARGUMENTS,m_arguments);
long lLower = 0L;
long lUpper = -1L;
if( hr != S_FALSE )
{
m_arguments.GetLBound(1L,&lLower);
m_arguments.GetUBound(1L,&lUpper);
}
for( long i = lLower; i <= lUpper; i++ )
{
IWbemClassObject* pIWBCO = NULL;
m_arguments.GetElement(&i,&pIWBCO);
if( pIWBCO )
{
CHMContext* pHMC = new CHMContext;
pHMC->Create(pIWBCO);
pHMC->GetAllProperties();
m_Arguments.Add(pHMC);
}
}
return hr;
}
HRESULT CHMPolledMethodDataElementConfiguration::SaveAllProperties()
{
HRESULT hr = S_OK;
// MethodName
hr = SetProperty(IDS_STRING_MOF_METHODNAME,m_sMethodName);
// Arguments
m_arguments.Destroy();
m_arguments.CreateOneDim(VT_UNKNOWN,(int)m_Arguments.GetSize());
for( long i = 0; i < m_Arguments.GetSize(); i++ )
{
IWbemClassObject* pIWCO = m_Arguments[i]->GetClassObject();
if( pIWCO )
{
m_arguments.PutElement(&i,pIWCO);
pIWCO->Release();
}
}
hr = SetProperty(IDS_STRING_MOF_ARGUMENTS,m_arguments);
if( ! CHECKHRESULT(hr = CHMPolledGetObjectDataElementConfiguration::SaveAllProperties()) )
{
return hr;
}
return hr;
}
//////////////////////////////////////////////////////////////////////
// implementation of the CHMQueryDataElementConfiguration class
//////////////////////////////////////////////////////////////////////
// Property Retreival Operations
//////////////////////////////////////////////////////////////////////
HRESULT CHMQueryDataElementConfiguration::GetAllProperties()
{
HRESULT hr = S_OK;
if( ! CHECKHRESULT(hr = CHMDataElementConfiguration::GetAllProperties()) )
{
return hr;
}
hr = GetProperty(IDS_STRING_MOF_QUERY,m_sQuery);
return hr;
}
HRESULT CHMQueryDataElementConfiguration::SaveAllProperties()
{
HRESULT hr = S_OK;
hr = SetProperty(IDS_STRING_MOF_QUERY,m_sQuery);
if( ! CHECKHRESULT(hr = CHMDataElementConfiguration::SaveAllProperties()) )
{
return hr;
}
return hr;
}