// ConfigDialog.cpp : implementation file // // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved // #include "stdafx.h" #include "msa.h" #include "ConfigDialog.h" #include "addnamespace.h" #include "addfilter.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CConfigDialog dialog CConfigDialog::CConfigDialog(CWnd* pParent /*=NULL*/, void *pVoid /*=NULL*/) : CDialog(CConfigDialog::IDD, pParent) { m_pParent = (CMsaApp *)pVoid; m_pCurNamespace = NULL; //{{AFX_DATA_INIT(CConfigDialog) //}}AFX_DATA_INIT } void CConfigDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CConfigDialog) DDX_Control(pDX, IDC_ADD_BUTTON, m_AddFilter); DDX_Control(pDX, IDC_REMOVE_BUTTON, m_RemoveFilter); DDX_Control(pDX, IDC_NS_REMOVE_BUTTON, m_RemoveNS); DDX_Control(pDX, IDC_NS_ADD_BUTTON, m_AddNS); DDX_Control(pDX, IDC_NAMESPACE_COMBO, m_ObserveList); DDX_Control(pDX, IDC_FILTER_LIST, m_FilterList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CConfigDialog, CDialog) //{{AFX_MSG_MAP(CConfigDialog) ON_CBN_SELCHANGE(IDC_NAMESPACE_COMBO, OnSelchangeNamespaceCombo) ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton) ON_BN_CLICKED(IDC_REMOVE_BUTTON, OnRemoveButton) ON_BN_CLICKED(IDC_NS_ADD_BUTTON, OnNsAddButton) ON_BN_CLICKED(IDC_NS_REMOVE_BUTTON, OnNsRemoveButton) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CConfigDialog message handlers BOOL CConfigDialog::OnInitDialog() { CDialog::OnInitDialog(); HRESULT hr; IEnumWbemClassObject *pEnum = NULL; IWbemClassObject *pObj = NULL; ULONG uReturned; VARIANT v; char cBuffer[200]; int iBufSize = 200; BSTR bstrPwd = SysAllocString(L"Relmas1"); BSTR bstrConnectNamespace = SysAllocString(L"ConnectNamespace"); VariantInit(&v); //Load the Observe List if(FAILED(hr = m_pParent->m_pNamespace->CreateInstanceEnum( SysAllocString(L"Smpl_Observation"), 0, NULL, &pEnum))) TRACE(_T("* Error Querying Enumerated Observations\n")); WCHAR wcUser[100]; WCHAR *pTmp = wcUser; BSTR bstrUser; wcscpy(wcUser, m_pParent->m_bstrNamespace); while(*pTmp == L'\\') { pTmp++; } if(*pTmp == L'.') { char cBuf[50]; DWORD dwSize = 50; WCHAR wcUser[100]; GetComputerName(cBuf, &dwSize); MultiByteToWideChar (CP_OEMCP, MB_PRECOMPOSED, cBuf, (-1), wcUser, 128); wcscat(wcUser, L"\\sampler"); bstrUser = SysAllocString(wcUser); } else { WCHAR *pEnd = pTmp; while(*pEnd != L'\\') { pEnd++; } *pEnd = NULL; wcscat(pTmp, L"\\sampler"); bstrUser = SysAllocString(pTmp); } m_pParent->SetInterfaceSecurity(pEnum, NULL, bstrUser, bstrPwd); while(S_OK == (hr = pEnum->Next(INFINITE, 1, &pObj, &uReturned))) { if(SUCCEEDED(hr = pObj->Get(bstrConnectNamespace, 0, &v, NULL, NULL))) { WideCharToMultiByte(CP_OEMCP, 0, V_BSTR(&v), (-1), cBuffer, iBufSize, NULL, NULL); m_ObserveList.AddString(cBuffer); } else TRACE(_T("* Unable to get \"ConnectNamespace\"\n")); hr = pObj->Release(); } hr = pEnum->Release(); SysFreeString(bstrPwd); SysFreeString(bstrConnectNamespace); SysFreeString(bstrUser); return TRUE; } void CConfigDialog::OnSelchangeNamespaceCombo() { HRESULT hr; CString csBuffer; WCHAR wcBuffer[200]; IEnumWbemClassObject *pEnum = NULL; IWbemClassObject *pObj = NULL; ULONG uReturned; VARIANT v; BSTR bstrSamplerConsumer = SysAllocString(L"SamplerConsumer"); BSTR bstrIncidentType = SysAllocString(L"IncidentType"); BSTR bstrQuery = SysAllocString(L"Query"); BSTR bstrPwd = SysAllocString(L"Relmas1"); VariantInit(&v); while(0 < m_FilterList.GetCount()) m_FilterList.DeleteString(0); m_ObserveList.GetLBText(m_ObserveList.GetCurSel(), csBuffer); MultiByteToWideChar (CP_OEMCP, MB_PRECOMPOSED, csBuffer, (-1), wcBuffer, 200); WCHAR wcUser[100]; wcscpy(wcUser, wcBuffer); m_pCurNamespace = m_pParent->CheckNamespace(SysAllocString(wcBuffer)); // Select all of our event registrations if(FAILED(hr = m_pCurNamespace->CreateInstanceEnum(bstrSamplerConsumer, 0, NULL, &pEnum))) TRACE(_T("* Error Querying Enumerated Consumers\n")); WCHAR *pTmp = wcUser; BSTR bstrUser; while(*pTmp == L'\\') { pTmp++; } if(*pTmp == L'.') { char cBuf[50]; DWORD dwSize = 50; WCHAR wcUser[100]; GetComputerName(cBuf, &dwSize); MultiByteToWideChar (CP_OEMCP, MB_PRECOMPOSED, cBuf, (-1), wcUser, 128); wcscat(wcUser, L"\\sampler"); bstrUser = SysAllocString(wcUser); } else { WCHAR *pEnd = pTmp; while(*pEnd != L'\\') { pEnd++; } *pEnd = NULL; wcscat(pTmp, L"\\sampler"); bstrUser = SysAllocString(pTmp); } m_pParent->SetInterfaceSecurity(pEnum, NULL, bstrUser, bstrPwd); while(S_OK == (hr = pEnum->Next(INFINITE, 1, &pObj, &uReturned))) { if(SUCCEEDED(hr = pObj->Get(bstrIncidentType, 0, &v, NULL, NULL))) { wcscpy(wcBuffer, L"{"); wcscat(wcBuffer, V_BSTR(&v)); wcscat(wcBuffer, L"} "); char cBuffer[200]; int iBufSize = 200; if(SUCCEEDED(hr = pObj->Get(bstrQuery, 0, &v, NULL, NULL))) { wcscat(wcBuffer, V_BSTR(&v)); WideCharToMultiByte(CP_OEMCP, 0, wcBuffer, (-1), cBuffer, iBufSize, NULL, NULL); m_FilterList.AddString(cBuffer); } else TRACE(_T("* Unable to get \"Query\"\n")); } else TRACE(_T("* Unable to get \"IncidentType\"\n")); hr = pObj->Release(); } pEnum->Release(); SysFreeString(bstrSamplerConsumer); SysFreeString(bstrIncidentType); SysFreeString(bstrQuery); SysFreeString(bstrUser); SysFreeString(bstrPwd); } void CConfigDialog::OnAddButton() { CAddFilter *pNewDlg = new CAddFilter(NULL, m_pCurNamespace, this); pNewDlg->DoModal(); } void CConfigDialog::OnRemoveButton() { HRESULT hr; CString csBuffer; WCHAR wcBuffer[200]; WCHAR wcQuery[300]; char cBuffer[200]; int i = 0; m_FilterList.GetText(m_FilterList.GetCurSel(), csBuffer); while(csBuffer[i] != '}') { if(i > 0) cBuffer[i - 1] = csBuffer[i]; i++; } cBuffer[i - 1] = NULL; MultiByteToWideChar (CP_OEMCP, MB_PRECOMPOSED, cBuffer, (-1), wcBuffer, 200); wcscpy(wcQuery, L"SamplerConsumer.IncidentType=\""); wcscat(wcQuery, wcBuffer); wcscat(wcQuery, L"\""); BSTR bstrQuery = SysAllocString(wcQuery); if(FAILED(hr = m_pCurNamespace->DeleteInstance(bstrQuery, 0, NULL, NULL))) TRACE(_T("* Error Deleting Consumers: %s\n"), m_pParent->ErrorString(hr)); m_FilterList.DeleteString(m_FilterList.GetCurSel()); SysFreeString(bstrQuery); } void CConfigDialog::OnNsAddButton() { CAddNamespace *pNewDlg = new CAddNamespace(NULL, this); pNewDlg->DoModal(); } void CConfigDialog::OnNsRemoveButton() { HRESULT hr; CString csBuffer; WCHAR wcBuffer[200]; WCHAR wcModBuffer[200]; WCHAR wcQuery[300]; IWbemServices *pNamespace; int i = 0; int j = 0; BSTR bstrNamespace = SysAllocString(L"\\\\.\\root\\sampler"); m_ObserveList.GetLBText(m_ObserveList.GetCurSel(), csBuffer); MultiByteToWideChar (CP_OEMCP, MB_PRECOMPOSED, csBuffer, (-1), wcBuffer, 200); while(wcBuffer[i] != NULL) { if(wcBuffer[i] == L'\\') { wcModBuffer[j] = L'\\'; j++; } wcModBuffer[j] = wcBuffer[i]; i++; j++; } wcModBuffer[j] = NULL; wcscpy(wcQuery, L"Smpl_Observation.ConnectNamespace=\""); wcscat(wcQuery, wcModBuffer); wcscat(wcQuery, L"\""); BSTR bstrQuery = SysAllocString(wcQuery); pNamespace = m_pParent->CheckNamespace(bstrNamespace); if(pNamespace != NULL) { if(SUCCEEDED(hr = pNamespace->DeleteInstance(bstrQuery, 0, NULL, NULL))) m_ObserveList.DeleteString(m_ObserveList.GetCurSel()); else TRACE(_T("* Error Deleting Consumer: %s\n"), m_pParent->ErrorString(hr)); } else AfxMessageBox(_T("Error: Unable to connect to root\\sampler namespace\nOperation cannot be completed.")); SysFreeString(bstrQuery); SysFreeString(bstrNamespace); }