|
|
// ActionAssociationPage.cpp : implementation file
//
// Copyright (c) 2000 Microsoft Corporation
//
// 03/23/00 v-marfin 61667 : Display MsgBox explaining that user needs to first
// create an action before attempting to create a new
// association (if there are no actions defined).
// 03/23/00 v-marfin 62207 : In GetC2AAssociation(), check for passed GUID and if a singleton do not
// enclose in braces when formatting the query.
// 03/24/00 v-marfin 62192 : help link fix.
// 04/05/00 v-marfin 59643b : unmarshal connection OnInitDialog.
#include "stdafx.h"
#include "snapin.h"
#include "HMPropertyPage.h"
#include "ActionAssociationPage.h"
#include "NewActionAssociationDlg.h"
#include "Action.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CActionAssociationPage property page
IMPLEMENT_DYNCREATE(CActionAssociationPage, CHMPropertyPage)
CActionAssociationPage::CActionAssociationPage() : CHMPropertyPage(CActionAssociationPage::IDD) { //{{AFX_DATA_INIT(CActionAssociationPage)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_sHelpTopic = _T("HMon21.chm::/dTHact.htm"); // v-marfin 62192 : help link fix
}
CActionAssociationPage::~CActionAssociationPage() { }
inline CWbemClassObject* CActionAssociationPage::GetAssociatedActions() { // execute the query for actions
CWbemClassObject* pActionConfigObject = new CWbemClassObject; CString sQuery; CString sGuid = GetObjectPtr()->GetGuid(); if( sGuid == _T("@") ) // it is a System object... singleton class
{ sQuery = _T("ASSOCIATORS OF {Microsoft_HMSystemConfiguration=@} WHERE ResultClass=Microsoft_HMActionConfiguration"); } else // it is an object beneath the system
{ sQuery.Format(IDS_STRING_C2A_ASSOC_QUERY,sGuid); }
if( ! CHECKHRESULT(pActionConfigObject->Create(GetObjectPtr()->GetSystemName())) ) { return NULL; }
BSTR bsQuery = sQuery.AllocSysString();
if( ! CHECKHRESULT(pActionConfigObject->ExecQuery(bsQuery)) ) { ::SysFreeString(bsQuery); return NULL; }
::SysFreeString(bsQuery);
return pActionConfigObject; }
inline CString CActionAssociationPage::GetConditionString(const CString& sActionConfigGuid) { CWbemClassObject* pA2CAssociation = GetA2CAssociation(sActionConfigGuid); if( ! pA2CAssociation ) { return _T(""); }
CString sQuery; CString sCondition; CString sResString;
pA2CAssociation->GetProperty(_T("Query"),sQuery);
sQuery.MakeUpper();
if( sQuery.Find(_T("TARGETINSTANCE.STATE=0")) != -1 ) { sResString.LoadString(IDS_STRING_NORMAL); sCondition += sResString + _T(","); }
if( sQuery.Find(_T("TARGETINSTANCE.STATE=8")) != -1 ) { sResString.LoadString(IDS_STRING_WARNING); sCondition += sResString + _T(","); }
if( sQuery.Find(_T("TARGETINSTANCE.STATE=9")) != -1 ) { sResString.LoadString(IDS_STRING_CRITICAL); sCondition += sResString + _T(","); }
if( sQuery.Find(_T("TARGETINSTANCE.STATE=7")) != -1 ) { sResString.LoadString(IDS_STRING_NODATA); sCondition += sResString + _T(","); }
if( sQuery.Find(_T("TARGETINSTANCE.STATE=4")) != -1 ) { sResString.LoadString(IDS_STRING_DISABLED); sCondition += sResString + _T(","); }
sCondition.TrimRight(_T(","));
delete pA2CAssociation;
return sCondition; }
inline CWbemClassObject* CActionAssociationPage::GetA2CAssociation(const CString& sActionConfigGuid) { CString sActionPath; sActionPath.Format(_T("Microsoft_HMActionConfiguration.GUID=\"%s\""),sActionConfigGuid);
CString sQuery; sQuery.Format(_T("REFERENCES OF {%s} WHERE ResultClass=Microsoft_HMConfigurationActionAssociation Role=ChildPath"),sActionPath);
CWbemClassObject* pAssociation = new CWbemClassObject;
pAssociation->Create(GetObjectPtr()->GetSystemName()); BSTR bsQuery = sQuery.AllocSysString(); if( ! CHECKHRESULT(pAssociation->ExecQuery(bsQuery)) ) { ::SysFreeString(bsQuery); delete pAssociation; return NULL; } ::SysFreeString(bsQuery);
CString sParentPath; CString sEventFilterPath; ULONG ulReturned = 0L;
while( pAssociation->GetNextObject(ulReturned) == S_OK && ulReturned > 0 ) { pAssociation->GetProperty(_T("ParentPath"),sParentPath); if( sParentPath.Find(GetObjectPtr()->GetGuid()) != -1 ) { break; } }
return pAssociation; }
inline CWbemClassObject* CActionAssociationPage::GetC2AAssociation(const CString& sConfigGuid) {
CString sConfigPath;
// v-marfin : 62207
// If incoming GUID is a singleton, do not format it as a normal GUID since that causes the
// qeury to fail with invalid object path msg.
// For this the query should be:
//
// References of {Microsoft_HMConfiguration.GUID="@"}
// where ResultClass=Microsoft_HMConfigurationActionAssociation Role=ParentPath
//
// Which is basically the same query being used except without the braces around the GUID.
//
//
CString sGUID;
// Is passed parm a singleton?
if (sConfigGuid == _T("@")) { sGUID = sConfigGuid; // yes, do not enclose in braces.
} else { sGUID.Format(_T("{%s}"),sConfigGuid); // no, enclose in braces
}
sConfigPath.Format(_T("Microsoft_HMConfiguration.GUID=\"%s\""),sGUID);
CString sQuery; sQuery.Format(_T("REFERENCES OF {%s} WHERE ResultClass=Microsoft_HMConfigurationActionAssociation Role=ParentPath"),sConfigPath);
CWbemClassObject* pAssociation = new CWbemClassObject;
pAssociation->Create(GetObjectPtr()->GetSystemName()); BSTR bsQuery = sQuery.AllocSysString(); if( ! CHECKHRESULT(pAssociation->ExecQuery(bsQuery)) ) { ::SysFreeString(bsQuery); delete pAssociation; return NULL; } ::SysFreeString(bsQuery);
return pAssociation; }
void CActionAssociationPage::DoDataExchange(CDataExchange* pDX) { CHMPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CActionAssociationPage)
DDX_Control(pDX, IDC_LIST_ACTIONS, m_ActionsList); DDX_Control(pDX, IDC_BUTTON_PROPERTIES, m_PropertiesButton); DDX_Control(pDX, IDC_BUTTON_NEW, m_NewButton); DDX_Control(pDX, IDC_BUTTON_DELETE, m_DeleteButton); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CActionAssociationPage, CHMPropertyPage) //{{AFX_MSG_MAP(CActionAssociationPage)
ON_WM_DESTROY() ON_NOTIFY(NM_CLICK, IDC_LIST_ACTIONS, OnClickListActions) ON_BN_CLICKED(IDC_BUTTON_PROPERTIES, OnButtonProperties) ON_BN_CLICKED(IDC_BUTTON_NEW, OnButtonNew) ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete) ON_NOTIFY(NM_DBLCLK, IDC_LIST_ACTIONS, OnDblclkListActions) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CActionAssociationPage message handlers
BOOL CActionAssociationPage::OnInitDialog() { // unmarshal connmgr //59643b
CnxPropertyPageCreate();
CHMPropertyPage::OnInitDialog(); // create the tooltip
EnableToolTips(); m_ToolTip.Create(this,TTS_ALWAYSTIP); m_ToolTip.AddTool(&m_NewButton,IDS_STRING_TOOLTIP_NEW); m_ToolTip.AddTool(&m_PropertiesButton,IDS_STRING_TOOLTIP_PROPERTY); m_ToolTip.AddTool(&m_DeleteButton,IDS_STRING_TOOLTIP_DELETE); m_ToolTip.Activate(TRUE);
// create bitmaps and init each bitmap button
CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP_NEW); m_hNewBitmap = (HBITMAP)bitmap.Detach();
bitmap.LoadBitmap(IDB_BITMAP_PROPERTIES); m_hPropertiesBitmap = (HBITMAP)bitmap.Detach();
bitmap.LoadBitmap(IDB_BITMAP_DELETE); m_hDeleteBitmap = (HBITMAP)bitmap.Detach();
SendDlgItemMessage(IDC_BUTTON_NEW,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)m_hNewBitmap); SendDlgItemMessage(IDC_BUTTON_PROPERTIES,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)m_hPropertiesBitmap); SendDlgItemMessage(IDC_BUTTON_DELETE,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)m_hDeleteBitmap);
// add columns to the listctrl
CString sTitle;
sTitle.LoadString(IDS_STRING_NAME); m_ActionsList.InsertColumn(0,sTitle,LVCFMT_LEFT,LVSCW_AUTOSIZE_USEHEADER);
sTitle.LoadString(IDS_STRING_GUID); m_ActionsList.InsertColumn(1,sTitle,LVCFMT_LEFT,0);
sTitle.LoadString(IDS_STRING_CONDITION); m_ActionsList.InsertColumn(2,sTitle,LVCFMT_LEFT,LVSCW_AUTOSIZE);
sTitle.LoadString(IDS_STRING_THROTTLE_TIME); m_ActionsList.InsertColumn(3,sTitle,LVCFMT_RIGHT,LVSCW_AUTOSIZE_USEHEADER);
sTitle.LoadString(IDS_STRING_REMINDER_TIME); m_ActionsList.InsertColumn(4,sTitle,LVCFMT_RIGHT,LVSCW_AUTOSIZE_USEHEADER);
sTitle.LoadString(IDS_STRING_COMMENT); m_ActionsList.InsertColumn(5,sTitle,LVCFMT_LEFT,LVSCW_AUTOSIZE_USEHEADER);
m_ActionsList.SetColumnWidth(0,LVSCW_AUTOSIZE_USEHEADER); m_ActionsList.SetColumnWidth(1,0); m_ActionsList.SetColumnWidth(2,LVSCW_AUTOSIZE_USEHEADER); m_ActionsList.SetColumnWidth(3,LVSCW_AUTOSIZE_USEHEADER); m_ActionsList.SetColumnWidth(4,LVSCW_AUTOSIZE_USEHEADER); m_ActionsList.SetColumnWidth(5,LVSCW_AUTOSIZE_USEHEADER);
CWbemClassObject* pAssociation = GetC2AAssociation(GetObjectPtr()->GetGuid()); if( ! pAssociation ) { return TRUE; }
bool bFound = false; ULONG ulReturned = 0L; while( pAssociation->GetNextObject(ulReturned) == S_OK && ulReturned > 0 ) { // get the action config object
CString sActionPath; pAssociation->GetProperty(_T("ChildPath"),sActionPath);
CWbemClassObject* pActionConfigObject = new CWbemClassObject; pActionConfigObject->Create(GetObjectPtr()->GetSystemName()); if( CHECKHRESULT(pActionConfigObject->GetObject(sActionPath)) ) { int iValue = -1; CString sValue; pActionConfigObject->GetLocaleStringProperty(IDS_STRING_MOF_NAME,sValue);
int iIndex = m_ActionsList.InsertItem(0,sValue);
// set the GUID of the ActionConfig
pActionConfigObject->GetProperty(IDS_STRING_MOF_GUID,sValue); m_ActionsList.SetItem(iIndex,1,LVIF_TEXT,sValue,NULL,NULL,NULL,NULL);
// set the Condition
sValue = GetConditionString(sValue); m_ActionsList.SetItem(iIndex,2,LVIF_TEXT,sValue,NULL,NULL,NULL,NULL);
// set throttle time
pAssociation->GetProperty(_T("ThrottleTime"),iValue); sValue.Format(_T("%d"),iValue); m_ActionsList.SetItem(iIndex,3,LVIF_TEXT,sValue,NULL,NULL,NULL,NULL);
// set reminder time
pAssociation->GetProperty(_T("ReminderTime"),iValue); sValue.Format(_T("%d"),iValue); m_ActionsList.SetItem(iIndex,4,LVIF_TEXT,sValue,NULL,NULL,NULL,NULL);
// set the Description
pActionConfigObject->GetLocaleStringProperty(IDS_STRING_MOF_DESCRIPTION,sValue); m_ActionsList.SetItem(iIndex,5,LVIF_TEXT,sValue,NULL,NULL,NULL,NULL); bFound = true; }
delete pActionConfigObject; }
if( bFound ) { m_ActionsList.SetColumnWidth(0,LVSCW_AUTOSIZE); m_ActionsList.SetColumnWidth(2,LVSCW_AUTOSIZE_USEHEADER); }
delete pAssociation;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
LRESULT CActionAssociationPage::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { MSG msg; PeekMessage(&msg,GetSafeHwnd(),0,0,PM_NOREMOVE); if( m_ToolTip.GetSafeHwnd() ) { m_ToolTip.RelayEvent(&msg); m_ToolTip.Activate(TRUE); }
return CHMPropertyPage::WindowProc(message, wParam, lParam); }
void CActionAssociationPage::OnDestroy() { CHMPropertyPage::OnDestroy(); DeleteObject(m_hNewBitmap); DeleteObject(m_hPropertiesBitmap); DeleteObject(m_hDeleteBitmap);
//59643
CnxPropertyPageDestroy();
}
void CActionAssociationPage::OnClickListActions(NMHDR* pNMHDR, LRESULT* pResult) { POSITION pos = m_ActionsList.GetFirstSelectedItemPosition(); int iIndex = 0; if( pos ) { GetDlgItem(IDC_BUTTON_PROPERTIES)->EnableWindow(TRUE); GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(TRUE); iIndex = m_ActionsList.GetNextSelectedItem(pos); } else { GetDlgItem(IDC_BUTTON_PROPERTIES)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(FALSE); } *pResult = 0; }
void CActionAssociationPage::OnButtonProperties() { POSITION pos = m_ActionsList.GetFirstSelectedItemPosition(); int iIndex = 0; if( pos ) { iIndex = m_ActionsList.GetNextSelectedItem(pos); CString sActionName = m_ActionsList.GetItemText(iIndex,0); CString sGuid = m_ActionsList.GetItemText(iIndex,1);
CString sActionPath; sActionPath.Format(_T("Microsoft_HMActionConfiguration.GUID=\"%s\""),sGuid); CString sQuery; sQuery.Format(_T("REFERENCES OF {%s} WHERE ResultClass=Microsoft_HMConfigurationActionAssociation Role=ChildPath"),sActionPath);
CWbemClassObject Association;
Association.Create(GetObjectPtr()->GetSystemName()); BSTR bsQuery = sQuery.AllocSysString(); if( ! CHECKHRESULT(Association.ExecQuery(bsQuery)) ) { ::SysFreeString(bsQuery); return; } ::SysFreeString(bsQuery);
CString sParentPath; ULONG ulReturned = 0L;
while( Association.GetNextObject(ulReturned) == S_OK && ulReturned > 0 ) { Association.GetProperty(_T("ParentPath"),sParentPath); if( sParentPath.Find(GetObjectPtr()->GetGuid()) != -1 ) { break; } }
Association.GetProperty(_T("Query"),sQuery); sQuery.MakeUpper();
CNewActionAssociationDlg dlg;
if( sQuery.Find(_T("TARGETINSTANCE.STATE=9")) != -1 ) { dlg.m_bCritical = TRUE; }
if( sQuery.Find(_T("TARGETINSTANCE.STATE=8")) != -1 ) { dlg.m_bWarning = TRUE; }
if( sQuery.Find(_T("TARGETINSTANCE.STATE=7")) != -1 ) { dlg.m_bNoData = TRUE; }
if( sQuery.Find(_T("TARGETINSTANCE.STATE=4")) != -1 ) { dlg.m_bDisabled = TRUE; }
if( sQuery.Find(_T("TARGETINSTANCE.STATE=0")) != -1 ) { dlg.m_bNormal = TRUE; }
// set the selection to the proper action in the combobox
dlg.m_saActions.Add(sActionName); dlg.m_iSelectedAction = 0; dlg.m_bEnableActionsComboBox = FALSE; Association.GetProperty(_T("ThrottleTime"),dlg.m_iThrottleTime); Association.GetProperty(_T("ReminderTime"),dlg.m_iReminderTime);
if( dlg.DoModal() == IDOK ) { // construct the EventFilter query
CString sQuery;
if( GetObjectPtr()->GetTypeName() == _T("Threshold") ) { sQuery.Format(_T("select * from __InstanceModificationEvent where TargetInstance isa \"Microsoft_HMThresholdStatusInstance\" AND TargetInstance.GUID=\"{%s}\""), GetObjectPtr()->GetGuid()); } else { sQuery.Format(IDS_STRING_HMSTATUS_QUERY_FMT,GetObjectPtr()->GetTypeName(),GetObjectPtr()->GetGuid()); }
CString sClause; CString sCondition; CString sResString;
if( dlg.m_bNormal ) { sClause += _T("TargetInstance.State=0 OR "); sResString.LoadString(IDS_STRING_NORMAL); sCondition += sResString + _T(","); }
if( dlg.m_bWarning ) { sClause += _T("TargetInstance.State=8 OR "); sResString.LoadString(IDS_STRING_WARNING); sCondition += sResString + _T(","); }
if( dlg.m_bCritical ) { sClause += _T("TargetInstance.State=9 OR "); sResString.LoadString(IDS_STRING_CRITICAL); sCondition += sResString + _T(","); }
if( dlg.m_bDisabled ) { sClause += _T("TargetInstance.State=4 OR "); sResString.LoadString(IDS_STRING_DISABLED); sCondition += sResString + _T(","); }
if( dlg.m_bNoData ) { sClause += _T("TargetInstance.State=7 OR "); sResString.LoadString(IDS_STRING_NODATA); sCondition += sResString + _T(","); } if( ! sClause.IsEmpty() ) { sClause = _T(" AND (") + sClause;
sClause = sClause.Left(sClause.GetLength() - 4);
sClause += _T(")");
sQuery += sClause; }
sCondition.TrimRight(_T(","));
Association.SetProperty(_T("Query"),sQuery); Association.SetProperty(_T("ReminderTime"),dlg.m_iReminderTime); Association.SetProperty(_T("ThrottleTime"),dlg.m_iThrottleTime);
Association.SaveAllProperties();
CString sValue; m_ActionsList.SetItem(iIndex,2,LVIF_TEXT,sCondition,NULL,NULL,NULL,NULL); sValue.Format(_T("%d"),dlg.m_iThrottleTime); m_ActionsList.SetItem(iIndex,3,LVIF_TEXT,sValue,NULL,NULL,NULL,NULL); sValue.Format(_T("%d"),dlg.m_iReminderTime); m_ActionsList.SetItem(iIndex,4,LVIF_TEXT,sValue,NULL,NULL,NULL,NULL); }
} // end if pos
}
void CActionAssociationPage::OnButtonNew() { CNewActionAssociationDlg dlg;
// query for the actions on this system
CStringArray saGuids; CStringArray saDescriptions; CStringArray saConsumerPaths; CString sQuery = IDS_STRING_ACTIONCONFIG_QUERY; BSTR bsQuery = sQuery.AllocSysString(); CWbemClassObject ActionConfigObject; ActionConfigObject.Create(GetObjectPtr()->GetSystemName());
HRESULT hr = ActionConfigObject.ExecQuery(bsQuery);
if( CHECKHRESULT(hr) ) { ULONG ulReturned = 0L; while( ActionConfigObject.GetNextObject(ulReturned) == S_OK && ulReturned > 0 ) { CString sValue; ActionConfigObject.GetLocaleStringProperty(IDS_STRING_MOF_NAME,sValue); dlg.m_saActions.Add(sValue); ActionConfigObject.GetProperty(IDS_STRING_MOF_GUID,sValue); saGuids.Add(sValue); ActionConfigObject.GetLocaleStringProperty(IDS_STRING_MOF_DESCRIPTION,sValue); saDescriptions.Add(sValue); ActionConfigObject.GetProperty(IDS_STRING_MOF_EVENTCONSUMER,sValue); saConsumerPaths.Add(sValue); } }
BOOL bAtLeastOneActionAlreadyExists=FALSE;
for( int i = (int)dlg.m_saActions.GetSize()-1; i >= 0; i-- ) { LVFINDINFO lvfi; ZeroMemory(&lvfi,sizeof(LVFINDINFO)); lvfi.flags = LVFI_WRAP|LVFI_STRING; lvfi.psz = dlg.m_saActions[i]; int iListIndex = m_ActionsList.FindItem(&lvfi); if( iListIndex >= 0 ) { bAtLeastOneActionAlreadyExists=TRUE;
saGuids.RemoveAt(i); dlg.m_saActions.RemoveAt(i); } }
if( dlg.m_saActions.GetSize() == 0 ) { // v-marfin 61667 : Show why we are returning. User must first create
// an action before attempting an association. Only if there were no
// actions in the list to begin with. If there was an action in the
// dialog list but that action is already being used, it will have been removed
// from the m_saActions array so see if this is the case. If so, don't
// show an error prompt, just return.
if (!bAtLeastOneActionAlreadyExists) { AfxMessageBox(IDS_STRING_MUST_CREATE_ACTION); } return; }
// display the dialog
if( dlg.DoModal() == IDOK ) { CString sParentPath = GetObjectPtr()->GetObjectPath(); CString sChildPath; sChildPath.Format(_T("\\\\.\\root\\cimv2\\MicrosoftHealthmonitor:Microsoft_HMActionConfiguration.GUID=\"%s\""),saGuids[dlg.m_iSelectedAction]); // create the association instance and fill out the paths to child, parent and filter
CWbemClassObject ActionAssociation; ActionAssociation.Create(GetObjectPtr()->GetSystemName());
BSTR bsActionAssociation = ::SysAllocString(L"Microsoft_HMConfigurationActionAssociation"); if( ! CHECKHRESULT(ActionAssociation.CreateInstance(bsActionAssociation)) ) { ::SysFreeString(bsActionAssociation); return; }
::SysFreeString(bsActionAssociation);
ActionAssociation.SetProperty(_T("ParentPath"),sParentPath); ActionAssociation.SetProperty(_T("ChildPath"),sChildPath); ActionAssociation.SetProperty(_T("ReminderTime"),dlg.m_iReminderTime); ActionAssociation.SetProperty(_T("ThrottleTime"),dlg.m_iThrottleTime);
// construct the query for modification events on HMStatus
CString sQuery;
if( GetObjectPtr()->GetTypeName() == _T("Threshold") ) { sQuery.Format(_T("select * from __InstanceModificationEvent where TargetInstance isa \"Microsoft_HMThresholdStatusInstance\" AND TargetInstance.GUID=\"{%s}\""), GetObjectPtr()->GetGuid()); } else { sQuery.Format(IDS_STRING_HMSTATUS_QUERY_FMT,GetObjectPtr()->GetTypeName(),GetObjectPtr()->GetGuid()); }
CString sClause; CString sCondition; CString sResString;
if( dlg.m_bNormal ) { sClause += _T("TargetInstance.State=0 OR "); sResString.LoadString(IDS_STRING_NORMAL); sCondition += sResString + _T(","); }
if( dlg.m_bWarning ) { sClause += _T("TargetInstance.State=8 OR "); sResString.LoadString(IDS_STRING_WARNING); sCondition += sResString + _T(","); }
if( dlg.m_bCritical ) { sClause += _T("TargetInstance.State=9 OR "); sResString.LoadString(IDS_STRING_CRITICAL); sCondition += sResString + _T(","); }
if( dlg.m_bDisabled ) { sClause += _T("TargetInstance.State=4 OR "); sResString.LoadString(IDS_STRING_DISABLED); sCondition += sResString + _T(","); }
if( dlg.m_bNoData ) { sClause += _T("TargetInstance.State=7 OR "); sResString.LoadString(IDS_STRING_NODATA); sCondition += sResString + _T(","); }
if( ! sClause.IsEmpty() ) { sClause = _T(" AND (") + sClause;
sClause = sClause.Left(sClause.GetLength() - 4);
sClause += _T(")");
sQuery += sClause; }
sCondition.TrimRight(_T(","));
ActionAssociation.SetProperty(IDS_STRING_MOF_QUERY,sQuery);
#ifdef SAVE
// create the __EventFilter instance and fill out the query
CWbemClassObject EventFilter; EventFilter.Create(GetObjectPtr()->GetSystemName());
BSTR bsEventFilter = ::SysAllocString(L"__EventFilter"); if( ! CHECKHRESULT(EventFilter.CreateInstance(bsEventFilter)) ) { ::SysFreeString(bsEventFilter); return; }
::SysFreeString(bsEventFilter);
// create the GUID
GUID ChildGuid; CoCreateGuid(&ChildGuid);
OLECHAR szGuid[GUID_CCH]; ::StringFromGUID2(ChildGuid, szGuid, GUID_CCH); CString sGuid = OLE2CT(szGuid);
EventFilter.SetProperty(_T("Name"),sGuid); EventFilter.SetProperty(_T("QueryLanguage"),CString(_T("WQL")));
// set event filter query to ActionStatus creation event
sQuery.Format(IDS_STRING_HMACTIONSTATUS_QUERY_FMT,saGuids[dlg.m_iSelectedAction]); EventFilter.SetProperty(_T("Query"),sQuery);
EventFilter.SaveAllProperties(); #endif
CString sEventFilterPath; // sEventFilterPath.Format(_T("\\\\.\\root\\cimv2\\MicrosoftHealthmonitor:__EventFilter.Name=\"%s\""),sGuid);
sEventFilterPath.Format(_T("\\\\.\\root\\cimv2\\MicrosoftHealthmonitor:__EventFilter.Name=\"%s\""),saGuids[dlg.m_iSelectedAction]); ActionAssociation.SetProperty(_T("EventFilter"),sEventFilterPath); ActionAssociation.SaveAllProperties();
#ifdef SAVE
// create the __FilterToConsumerBinding instance and fill out the paths
CWbemClassObject FilterToConsumerBinding; FilterToConsumerBinding.Create(GetObjectPtr()->GetSystemName());
BSTR bsFTCB = ::SysAllocString(L"__FilterToConsumerBinding"); if( ! CHECKHRESULT(FilterToConsumerBinding.CreateInstance(bsFTCB)) ) { ::SysFreeString(bsFTCB); return; }
::SysFreeString(bsFTCB);
FilterToConsumerBinding.SetProperty(_T("Consumer"),saConsumerPaths[dlg.m_iSelectedAction]); FilterToConsumerBinding.SetProperty(_T("Filter"),sEventFilterPath);
FilterToConsumerBinding.SaveAllProperties(); #endif
// now add an item to the list control
CString sValue; int iIndex = m_ActionsList.InsertItem(0,dlg.m_saActions[dlg.m_iSelectedAction]); m_ActionsList.SetItem(iIndex,1,LVIF_TEXT,saGuids[dlg.m_iSelectedAction],NULL,NULL,NULL,NULL); m_ActionsList.SetItem(iIndex,2,LVIF_TEXT,sCondition,NULL,NULL,NULL,NULL); sValue.Format(_T("%d"),dlg.m_iThrottleTime); m_ActionsList.SetItem(iIndex,3,LVIF_TEXT,sValue,NULL,NULL,NULL,NULL); sValue.Format(_T("%d"),dlg.m_iReminderTime); m_ActionsList.SetItem(iIndex,4,LVIF_TEXT,sValue,NULL,NULL,NULL,NULL); m_ActionsList.SetItem(iIndex,5,LVIF_TEXT,saDescriptions[dlg.m_iSelectedAction],NULL,NULL,NULL,NULL);
m_ActionsList.SetColumnWidth(0,LVSCW_AUTOSIZE);
} }
void CActionAssociationPage::OnButtonDelete() { POSITION pos = m_ActionsList.GetFirstSelectedItemPosition(); int iIndex = 0; if( pos ) { iIndex = m_ActionsList.GetNextSelectedItem(pos); CString sActionGuid = m_ActionsList.GetItemText(iIndex,1); GetObjectPtr()->DeleteActionAssoc(sActionGuid); m_ActionsList.DeleteItem(iIndex); } }
void CActionAssociationPage::OnDblclkListActions(NMHDR* pNMHDR, LRESULT* pResult) { OnButtonProperties(); *pResult = 0; }
|