mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1273 lines
32 KiB
1273 lines
32 KiB
/*++
|
|
|
|
Copyright (C) 1997-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
Abstract:
|
|
|
|
History:
|
|
|
|
--*/
|
|
|
|
// WMITestDoc.cpp : implementation of the CWMITestDoc class
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
//#include <cominit.h>
|
|
#include "utils.h"
|
|
#include "WMITest.h"
|
|
|
|
#include "OpWrap.h"
|
|
#include "WMITestDoc.h"
|
|
#include "LoginDlg.h"
|
|
#include "GetTextDlg.h"
|
|
#include "MainFrm.h"
|
|
#include "OpView.h"
|
|
#include "ObjVw.h"
|
|
#include "PrefDlg.h"
|
|
#include "ErrorDlg.h"
|
|
#include "PropsPg.H"
|
|
#include "PropQualsPg.h"
|
|
#include "ExecMethodDlg.h"
|
|
#include "MofDlg.h"
|
|
#include "BindingSheet.h"
|
|
#include "FilterPg.h"
|
|
#include "ConsumerPg.h"
|
|
#include "BindingPg.h"
|
|
|
|
#include "ExportDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWMITestDoc
|
|
|
|
IMPLEMENT_DYNCREATE(CWMITestDoc, CDocument)
|
|
|
|
BEGIN_MESSAGE_MAP(CWMITestDoc, CDocument)
|
|
//{{AFX_MSG_MAP(CWMITestDoc)
|
|
ON_COMMAND(ID_CONNECT, OnConnect)
|
|
ON_UPDATE_COMMAND_UI_RANGE(ID_FIRST_NEED_CONNECTION, ID_LAST_NEED_CONNECTION, OnUpdateAgainstConnection)
|
|
ON_COMMAND(ID_QUERY, OnQuery)
|
|
ON_COMMAND(ID_NOTIFICATIONQUERY, OnNotificationQuery)
|
|
ON_COMMAND(ID_STOP, OnStop)
|
|
//ON_UPDATE_COMMAND_UI(ID_STOP, OnUpdateStop)
|
|
ON_COMMAND(ID_REFRESH_ALL, OnRefreshAll)
|
|
ON_COMMAND(ID_ENUMERATEINSTANCES, OnEnumerateInstances)
|
|
ON_COMMAND(ID_ENUMERATE_CLASSES, OnEnumerateClasses)
|
|
ON_COMMAND(ID_GET_CLASS, OnGetClass)
|
|
ON_COMMAND(ID_GETINSTANCE, OnGetInstance)
|
|
ON_COMMAND(ID_REFRESH_CURRENT, OnRefreshCurrent)
|
|
ON_COMMAND(ID_ASSOCIATORS, OnAssociators)
|
|
ON_UPDATE_COMMAND_UI(ID_ASSOCIATORS, OnUpdateAssociators)
|
|
ON_COMMAND(ID_REFERENCES, OnReferences)
|
|
ON_COMMAND(ID_INST_GET_CLASS, OnInstGetClass)
|
|
ON_COMMAND(ID_INST_GET_INST, OnInstGetInst)
|
|
ON_COMMAND(ID_CLASS_INSTANCES, OnClassInstances)
|
|
ON_COMMAND(ID_CLASS_SUPERCLASS, OnClassSuperclass)
|
|
ON_COMMAND(ID_CLASS_INSTANCES_DEEP, OnClassInstancesDeep)
|
|
ON_COMMAND(ID_CLASS_SUBCLASSES_DEEP, OnClassSubclassesDeep)
|
|
ON_COMMAND(ID_CLASS_SUBCLASSES, OnClassSubclasses)
|
|
ON_COMMAND(ID_OPTIONS, OnOptions)
|
|
ON_COMMAND(ID_SYSTEM_PROPS, OnSystemProps)
|
|
ON_UPDATE_COMMAND_UI(ID_SYSTEM_PROPS, OnUpdateSystemProps)
|
|
ON_COMMAND(ID_INHERITED_PROPS, OnInheritedProps)
|
|
ON_UPDATE_COMMAND_UI(ID_INHERITED_PROPS, OnUpdateInheritedProps)
|
|
ON_COMMAND(ID_RECONNECT, OnReconnect)
|
|
ON_UPDATE_COMMAND_UI(ID_RECONNECT, OnUpdateReconnect)
|
|
ON_COMMAND(ID_TRANSLATE_VALUES, OnTranslateValues)
|
|
ON_UPDATE_COMMAND_UI(ID_TRANSLATE_VALUES, OnUpdateTranslateValues)
|
|
ON_COMMAND(ID_SAVE, OnSave)
|
|
ON_UPDATE_COMMAND_UI(ID_SAVE, OnUpdateSave)
|
|
ON_COMMAND(ID_CREATE_CLASS, OnCreateClass)
|
|
ON_COMMAND(ID_CREATE_INSTANCE, OnCreateInstance)
|
|
ON_COMMAND(ID_CLASS_CREATE_INST, OnClassCreateInstance)
|
|
ON_COMMAND(ID_ERROR_DETAILS, OnErrorDetails)
|
|
ON_UPDATE_COMMAND_UI(ID_ERROR_DETAILS, OnUpdateErrorDetails)
|
|
ON_COMMAND(ID_EXEC_METHOD, OnExecMethod)
|
|
ON_COMMAND(ID_SHOW_MOF, OnShowMof)
|
|
ON_UPDATE_COMMAND_UI(ID_SHOW_MOF, OnUpdateShowMof)
|
|
ON_COMMAND(ID_EXPORT_TREE, OnExportTree)
|
|
ON_COMMAND(ID_EXPORT_ITEM, OnExportItem)
|
|
ON_COMMAND(ID_FILTER_BINDINGS, OnFilterBindings)
|
|
ON_COMMAND(ID_STOP_CURRENT, OnStopCurrent)
|
|
ON_UPDATE_COMMAND_UI(ID_REFRESH_CURRENT, OnUpdateRefreshCurrent)
|
|
ON_UPDATE_COMMAND_UI(ID_REFERENCES, OnUpdateAssociators)
|
|
ON_UPDATE_COMMAND_UI(ID_INST_GET_CLASS, OnUpdateAssociators)
|
|
ON_UPDATE_COMMAND_UI(ID_INST_GET_INST, OnUpdateAssociators)
|
|
ON_UPDATE_COMMAND_UI(ID_CLASS_INSTANCES, OnUpdateAssociators)
|
|
ON_UPDATE_COMMAND_UI(ID_CLASS_SUPERCLASS, OnUpdateAssociators)
|
|
ON_UPDATE_COMMAND_UI(ID_STOP_CURRENT, OnUpdateStopCurrent)
|
|
//}}AFX_MSG_MAP
|
|
ON_COMMAND_RANGE(IDC_EXECUTE_METHOD_FIRST, IDC_EXECUTE_METHOD_LAST, OnExecuteMethod)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWMITestDoc construction/destruction
|
|
|
|
#define CLIPFORMAT_PROPERTIES _T("WMITest Properties")
|
|
#define CLIPFORMAT_OPS _T("WMITest Operations")
|
|
|
|
CWMITestDoc::CWMITestDoc() :
|
|
m_pOpView(NULL),
|
|
m_pObjView(NULL),
|
|
m_nBusyOps(0)
|
|
//m_pPrincipal(NULL),
|
|
//m_pAuthIdentity(NULL)
|
|
{
|
|
m_pNamespace = NULL;
|
|
|
|
m_cfProps = (CLIPFORMAT) RegisterClipboardFormat(CLIPFORMAT_PROPERTIES);
|
|
m_cfOps = (CLIPFORMAT) RegisterClipboardFormat(CLIPFORMAT_OPS);
|
|
}
|
|
|
|
CWMITestDoc::~CWMITestDoc()
|
|
{
|
|
}
|
|
|
|
BOOL CWMITestDoc::OnNewDocument()
|
|
{
|
|
if (m_pOpView)
|
|
m_pOpView->FlushItems();
|
|
|
|
if (!CDocument::OnNewDocument())
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWMITestDoc serialization
|
|
|
|
void CWMITestDoc::Serialize(CArchive& archive)
|
|
{
|
|
if (archive.IsStoring())
|
|
{
|
|
int nCount = m_pOpView->GetOpCount();
|
|
CTreeCtrl *pTree = m_pOpView->m_pTree;
|
|
|
|
// This will go into the op wrappers.
|
|
m_pObjView->SaveColumns();
|
|
|
|
archive << m_strNamespace;
|
|
archive << nCount;
|
|
|
|
for (HTREEITEM hitemOp = pTree->GetChildItem(m_pOpView->m_hitemRoot);
|
|
hitemOp != NULL;
|
|
hitemOp = pTree->GetNextSiblingItem(hitemOp))
|
|
{
|
|
COpWrap *pWrap = (COpWrap*) pTree->GetItemData(hitemOp);
|
|
|
|
pWrap->Serialize(archive);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!m_pOpView)
|
|
{
|
|
POSITION pos = GetFirstViewPosition();
|
|
|
|
m_pOpView = (COpView*) GetNextView(pos);
|
|
m_pObjView = (CObjView*) GetNextView(pos);
|
|
}
|
|
|
|
if (m_pOpView)
|
|
m_pOpView->FlushItems();
|
|
|
|
int nCount;
|
|
|
|
archive >> m_strNamespace;
|
|
if (SUCCEEDED(Connect(FALSE)))
|
|
{
|
|
archive >> nCount;
|
|
|
|
for (int i = 0; i < nCount; i++)
|
|
{
|
|
COpWrap *pWrap = new COpWrap;
|
|
|
|
pWrap->Serialize(archive);
|
|
|
|
m_pOpView->AddOpItem(pWrap);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWMITestDoc diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CWMITestDoc::AssertValid() const
|
|
{
|
|
CDocument::AssertValid();
|
|
}
|
|
|
|
void CWMITestDoc::Dump(CDumpContext& dc) const
|
|
{
|
|
CDocument::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWMITestDoc commands
|
|
|
|
void CWMITestDoc::OnConnect()
|
|
{
|
|
CLoginDlg dlg;
|
|
|
|
dlg.m_strAuthority =
|
|
theApp.GetProfileString(_T("Login"), _T("Authority"), _T(""));
|
|
|
|
dlg.m_strNamespace =
|
|
theApp.GetProfileString(_T("Login"), _T("Namespace"), _T("root\\default"));
|
|
|
|
dlg.m_strUser = theApp.GetProfileString(_T("Login"), _T("User"), _T(""));
|
|
|
|
dlg.m_strLocale = theApp.GetProfileString(_T("Login"), _T("Locale"), _T(""));
|
|
|
|
dlg.m_dwImpLevel = theApp.GetProfileInt(_T("Login"), _T("Imp"),
|
|
RPC_C_IMP_LEVEL_IMPERSONATE);
|
|
|
|
dlg.m_dwAuthLevel = theApp.GetProfileInt(_T("Login"), _T("Auth"),
|
|
RPC_C_AUTHN_LEVEL_CONNECT);
|
|
|
|
dlg.m_bNullPassword = theApp.GetProfileInt(_T("Login"), _T("Null"), FALSE);
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
Disconnect();
|
|
|
|
theApp.WriteProfileString(_T("Login"), _T("Authority"), dlg.m_strAuthority);
|
|
theApp.WriteProfileString(_T("Login"), _T("Namespace"), dlg.m_strNamespace);
|
|
theApp.WriteProfileString(_T("Login"), _T("User"), dlg.m_strUser);
|
|
theApp.WriteProfileString(_T("Login"), _T("Locale"), dlg.m_strLocale);
|
|
theApp.WriteProfileInt(_T("Login"), _T("Imp"), dlg.m_dwImpLevel);
|
|
theApp.WriteProfileInt(_T("Login"), _T("Auth"), dlg.m_dwAuthLevel);
|
|
theApp.WriteProfileInt(_T("Login"), _T("Null"), dlg.m_bNullPassword);
|
|
m_strPassword = dlg.m_strPassword;
|
|
m_strNamespace = dlg.m_strNamespace;
|
|
|
|
Connect(FALSE, TRUE);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::AutoConnect()
|
|
{
|
|
// Only do this if we're not already connected.
|
|
if (m_pNamespace == NULL)
|
|
{
|
|
// If we weren't able to connect without prompting for information,
|
|
// then display the connect dialog and try again.
|
|
if (FAILED(Connect(TRUE, TRUE)))
|
|
OnConnect();
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::SetInterfaceSecurity(IUnknown *pUnk)
|
|
{
|
|
CString strAuthority =
|
|
theApp.GetProfileString(_T("Login"), _T("Authority"), _T("")),
|
|
strUser =
|
|
theApp.GetProfileString(_T("Login"), _T("User"), _T(""));
|
|
BOOL bNullPassword = theApp.GetProfileInt(_T("Login"), _T("Null"),
|
|
FALSE);
|
|
BSTR pUser = strUser.IsEmpty() ? NULL :
|
|
strUser.AllocSysString(),
|
|
pPassword = bNullPassword || !pUser ? NULL :
|
|
m_strPassword.AllocSysString(),
|
|
pAuthority = strAuthority.IsEmpty() ? NULL :
|
|
strAuthority.AllocSysString();
|
|
DWORD dwImpLevel = theApp.GetProfileInt(_T("Login"), _T("Imp"),
|
|
RPC_C_IMP_LEVEL_IMPERSONATE),
|
|
dwAuthLevel = theApp.GetProfileInt(_T("Login"), _T("Auth"),
|
|
RPC_C_AUTHN_LEVEL_CONNECT);
|
|
|
|
SetSecurityHelper(
|
|
pUnk,
|
|
pAuthority,
|
|
pUser,
|
|
pPassword,
|
|
dwImpLevel,
|
|
dwAuthLevel);
|
|
|
|
if (pUser)
|
|
SysFreeString(pUser);
|
|
|
|
if (pPassword)
|
|
SysFreeString(pPassword);
|
|
|
|
if (pAuthority)
|
|
SysFreeString(pAuthority);
|
|
}
|
|
|
|
HRESULT CWMITestDoc::Connect(BOOL bSilent, BOOL bFlushItems)
|
|
{
|
|
// Create an instance of the WbemLocator interface.
|
|
IWbemLocator *pLocator = NULL;
|
|
HRESULT hr;
|
|
|
|
// Make sure this isn't empty.
|
|
if (m_strNamespace.IsEmpty())
|
|
m_strNamespace =
|
|
theApp.GetProfileString(
|
|
_T("Login"), _T("Namespace"), _T("root\\default"));
|
|
|
|
if ((hr = CoCreateInstance(
|
|
CLSID_WbemLocator,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_IWbemLocator,
|
|
(LPVOID *) &pLocator)) == S_OK)
|
|
{
|
|
CString strAuthority =
|
|
theApp.GetProfileString(_T("Login"), _T("Authority"), _T("")),
|
|
strUser =
|
|
theApp.GetProfileString(_T("Login"), _T("User"), _T("")),
|
|
strLocale =
|
|
theApp.GetProfileString(_T("Login"), _T("Locale"), _T(""));
|
|
BOOL bNullPassword = theApp.GetProfileInt(_T("Login"), _T("Null"), FALSE);
|
|
DWORD dwImpLevel = theApp.GetProfileInt(_T("Login"), _T("Imp"),
|
|
RPC_C_IMP_LEVEL_IMPERSONATE),
|
|
dwAuthLevel = theApp.GetProfileInt(_T("Login"), _T("Auth"),
|
|
RPC_C_AUTHN_LEVEL_CONNECT);
|
|
|
|
// Using the locator, connect to CIMOM in the given namespace.
|
|
CWaitCursor wait;
|
|
BSTR pNamespace = m_strNamespace.AllocSysString(),
|
|
pUser = strUser.IsEmpty() ? NULL :
|
|
strUser.AllocSysString(),
|
|
pPassword = bNullPassword || !pUser ? NULL :
|
|
m_strPassword.AllocSysString(),
|
|
pAuthority = strAuthority.IsEmpty() ? NULL :
|
|
strAuthority.AllocSysString(),
|
|
pLocale = strLocale.IsEmpty() ? NULL :
|
|
strLocale.AllocSysString();
|
|
|
|
#ifdef SVCEX
|
|
IWbemServices *pTemp = NULL;
|
|
#endif
|
|
|
|
if ((hr = pLocator->ConnectServer(
|
|
pNamespace,
|
|
pUser, // username
|
|
pPassword, // password
|
|
pLocale, // locale
|
|
0L, // securityFlags
|
|
pAuthority, // authority (domain for NTLM)
|
|
NULL, // context
|
|
#ifdef SVCEX
|
|
&pTemp)) == S_OK)
|
|
#else
|
|
&m_pNamespace)) == S_OK)
|
|
#endif
|
|
{
|
|
#ifdef SVCEX
|
|
pTemp->QueryInterface(IID_IWbemServicesEx, (void **) &m_pNamespace);
|
|
|
|
pTemp->Release();
|
|
#endif
|
|
|
|
SetSecurityHelper(
|
|
m_pNamespace,
|
|
pAuthority,
|
|
pUser,
|
|
pPassword,
|
|
dwImpLevel,
|
|
dwAuthLevel);
|
|
}
|
|
else
|
|
m_pNamespace = NULL;
|
|
|
|
/*
|
|
HRESULT hr;
|
|
IWbemClassObject *pClass = NULL;
|
|
_bstr_t strClass = L"__ProviderRegistration";
|
|
IWbemServices *pSvc = NULL;
|
|
|
|
m_pNamespace->QueryInterface(IID_IWbemServicesEx, (void **) &pSvc);
|
|
|
|
hr =
|
|
m_pNamespace->GetObject(
|
|
strClass,
|
|
WBEM_FLAG_RETURN_WBEM_COMPLETE,
|
|
NULL,
|
|
&pClass,
|
|
NULL);
|
|
*/
|
|
|
|
if (m_pOpView)
|
|
{
|
|
m_pOpView->UpdateRootText();
|
|
|
|
if (bFlushItems)
|
|
m_pOpView->FlushItems();
|
|
}
|
|
|
|
// Done with BSTR vars.
|
|
if (pNamespace)
|
|
SysFreeString(pNamespace);
|
|
|
|
if (pUser)
|
|
SysFreeString(pUser);
|
|
|
|
if (pPassword)
|
|
SysFreeString(pPassword);
|
|
|
|
if (pAuthority)
|
|
SysFreeString(pAuthority);
|
|
|
|
if (pLocale)
|
|
SysFreeString(pLocale);
|
|
|
|
|
|
// Done with pIWbemLocator.
|
|
pLocator->Release();
|
|
}
|
|
|
|
if (!bSilent && FAILED(hr))
|
|
CWMITestDoc::DisplayWMIErrorBox(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
void CWMITestDoc::Disconnect()
|
|
{
|
|
// If already connected, release m_pIWbemServices.
|
|
if (m_pNamespace)
|
|
{
|
|
StopOps();
|
|
|
|
m_pNamespace->Release();
|
|
|
|
m_nBusyOps = 0;
|
|
|
|
m_pNamespace = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
void CWMITestDoc::OnUpdateAgainstConnection(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_pNamespace != NULL);
|
|
}
|
|
|
|
void CWMITestDoc::OnQuery()
|
|
{
|
|
CGetTextDlg dlg;
|
|
|
|
dlg.m_dwPromptID = IDS_QUERY_PROMPT;
|
|
dlg.m_dwTitleID = IDS_QUERY_TITLE;
|
|
dlg.m_bAllowQueryBrowse = TRUE;
|
|
dlg.m_pNamespace = m_pNamespace;
|
|
dlg.LoadListViaReg(_T("QueryHistory"));
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
m_pOpView->AddOpItem(WMI_QUERY, dlg.m_strText);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnCloseDocument()
|
|
{
|
|
if (m_pOpView)
|
|
m_pOpView->FlushItems();
|
|
|
|
Disconnect();
|
|
|
|
CDocument::OnCloseDocument();
|
|
}
|
|
|
|
void CWMITestDoc::DoConnectDlg()
|
|
{
|
|
OnConnect();
|
|
}
|
|
|
|
|
|
void CWMITestDoc::OnNotificationQuery()
|
|
{
|
|
CGetTextDlg dlg;
|
|
|
|
dlg.m_dwPromptID = IDS_NOTIFICATION_QUERY_PROMPT;
|
|
dlg.m_dwTitleID = IDS_NOTIFICATION_QUERY_TITLE;
|
|
dlg.m_dwOptionID = IDS_MONITORY_QUERY;
|
|
dlg.m_bAllowQueryBrowse = TRUE;
|
|
dlg.m_pNamespace = m_pNamespace;
|
|
dlg.m_strSuperClass = _T("__EVENT");
|
|
dlg.LoadListViaReg(_T("NotiQueryHistory"));
|
|
dlg.m_bOptionChecked = theApp.GetProfileInt(_T("Settings"), _T("MonitorQuery"), FALSE);
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
theApp.WriteProfileInt(_T("Settings"), _T("MonitorQuery"), dlg.m_bOptionChecked);
|
|
|
|
m_pOpView->AddOpItem(WMI_EVENT_QUERY, dlg.m_strText, dlg.m_bOptionChecked);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnStop()
|
|
{
|
|
StopOps();
|
|
}
|
|
|
|
void CWMITestDoc::StopOps()
|
|
{
|
|
CTreeCtrl *pTree = m_pOpView->m_pTree;
|
|
|
|
for (HTREEITEM hitemOp = pTree->GetChildItem(m_pOpView->m_hitemRoot);
|
|
hitemOp != NULL;
|
|
hitemOp = pTree->GetNextSiblingItem(hitemOp))
|
|
{
|
|
COpWrap *pWrap = (COpWrap*) pTree->GetItemData(hitemOp);
|
|
|
|
pWrap->CancelOp(m_pNamespace);
|
|
}
|
|
}
|
|
|
|
/*
|
|
void CWMITestDoc::OnUpdateStop(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_nBusyOps != 0);
|
|
}
|
|
*/
|
|
|
|
void CWMITestDoc::OnRefreshAll()
|
|
{
|
|
m_pOpView->RefreshItems();
|
|
}
|
|
|
|
void CWMITestDoc::OnEnumerateInstances()
|
|
{
|
|
CGetTextDlg dlg;
|
|
|
|
dlg.m_dwPromptID = IDS_ENUM_INST_PROMPT;
|
|
dlg.m_dwTitleID = IDS_ENUM_INST_TITLE;
|
|
dlg.m_dwOptionID = IDS_RECURSIVE;
|
|
dlg.m_bAllowClassBrowse = TRUE;
|
|
dlg.m_pNamespace = m_pNamespace;
|
|
dlg.LoadListViaReg(_T("EnumInstHistory"));
|
|
dlg.m_bOptionChecked = theApp.GetProfileInt(_T("Settings"), _T("Recurse"), FALSE);
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
theApp.WriteProfileInt(_T("Settings"), _T("Recurse"), dlg.m_bOptionChecked);
|
|
|
|
m_pOpView->AddOpItem(WMI_ENUM_OBJ, dlg.m_strText, dlg.m_bOptionChecked);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnEnumerateClasses()
|
|
{
|
|
CGetTextDlg dlg;
|
|
|
|
dlg.m_dwPromptID = IDS_ENUM_CLASS_PROMPT;
|
|
dlg.m_dwTitleID = IDS_ENUM_CLASS_TITLE;
|
|
dlg.m_dwOptionID = IDS_RECURSIVE;
|
|
dlg.m_bEmptyOK = TRUE;
|
|
dlg.m_bAllowClassBrowse = TRUE;
|
|
dlg.m_pNamespace = m_pNamespace;
|
|
dlg.LoadListViaReg(_T("EnumClassHistory"));
|
|
dlg.m_bOptionChecked = theApp.GetProfileInt(_T("Settings"), _T("Recurse"), FALSE);
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
theApp.WriteProfileInt(_T("Settings"), _T("Recurse"), dlg.m_bOptionChecked);
|
|
|
|
m_pOpView->AddOpItem(WMI_ENUM_CLASS, dlg.m_strText, dlg.m_bOptionChecked);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnGetClass()
|
|
{
|
|
CGetTextDlg dlg;
|
|
|
|
dlg.m_dwPromptID = IDS_GET_CLASS_PROMPT;
|
|
dlg.m_dwTitleID = IDS_GET_CLASS_TITLE;
|
|
dlg.m_bAllowClassBrowse = TRUE;
|
|
dlg.m_pNamespace = m_pNamespace;
|
|
dlg.LoadListViaReg(_T("GetClassHistory"));
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
m_pOpView->AddOpItem(WMI_GET_CLASS, dlg.m_strText);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnCreateClass()
|
|
{
|
|
CGetTextDlg dlg;
|
|
|
|
dlg.m_dwPromptID = IDS_CREATE_CLASS_PROMPT;
|
|
dlg.m_dwTitleID = IDS_CREATE_CLASS_TITLE;
|
|
dlg.m_bAllowClassBrowse = TRUE;
|
|
dlg.m_bEmptyOK = TRUE;
|
|
dlg.m_pNamespace = m_pNamespace;
|
|
dlg.LoadListViaReg(_T("GetClassHistory"));
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
m_pOpView->AddOpItem(WMI_CREATE_CLASS, dlg.m_strText);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnGetInstance()
|
|
{
|
|
CGetTextDlg dlg;
|
|
|
|
dlg.m_dwPromptID = IDS_GET_INST_PROMPT;
|
|
dlg.m_dwTitleID = IDS_GET_INST_TITLE;
|
|
dlg.LoadListViaReg(_T("GetInstHistory"));
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
m_pOpView->AddOpItem(WMI_GET_OBJ, dlg.m_strText);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnCreateInstance()
|
|
{
|
|
CGetTextDlg dlg;
|
|
|
|
dlg.m_dwPromptID = IDS_CREATE_OBJ_PROMPT;
|
|
dlg.m_dwTitleID = IDS_CREATE_OBJ_TITLE;
|
|
dlg.m_bAllowClassBrowse = TRUE;
|
|
dlg.m_pNamespace = m_pNamespace;
|
|
dlg.LoadListViaReg(_T("GetClassHistory"));
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
m_pOpView->AddOpItem(WMI_CREATE_OBJ, dlg.m_strText);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnRefreshCurrent()
|
|
{
|
|
HTREEITEM hItem = m_pOpView->m_pTree->GetSelectedItem();
|
|
|
|
m_pOpView->RefreshItem(hItem);
|
|
}
|
|
|
|
HTREEITEM CWMITestDoc::GetCurrentItem()
|
|
{
|
|
CMainFrame *pFrame = (CMainFrame*) AfxGetMainWnd();
|
|
|
|
if (pFrame->GetActiveView() == m_pOpView)
|
|
return m_pOpView->m_pTree->GetSelectedItem();
|
|
else
|
|
return m_pObjView->GetSelectedItem();
|
|
}
|
|
|
|
CObjInfo *CWMITestDoc::GetCurrentObj()
|
|
{
|
|
HTREEITEM hitem = GetCurrentItem();
|
|
|
|
return m_pOpView->GetObjInfo(hitem);
|
|
}
|
|
|
|
void CWMITestDoc::OnAssociators()
|
|
{
|
|
/*
|
|
HTREEITEM hitem = GetCurrentItem();
|
|
|
|
if (hitem && m_pOpView->IsObj(hitem))
|
|
{
|
|
CString strQuery,
|
|
strPath;
|
|
|
|
strPath = m_pOpView->m_pTree->GetItemText(hitem);
|
|
|
|
strQuery.Format(
|
|
_T("associators of {%s}"),
|
|
(LPCTSTR) strPath);
|
|
|
|
m_pOpView->AddOpItem(WMI_QUERY, strQuery);
|
|
}
|
|
*/
|
|
CString strObj;
|
|
|
|
if (GetSelectedObjPath(strObj))
|
|
{
|
|
CString strQuery;
|
|
|
|
strQuery.Format(
|
|
_T("associators of {%s}"),
|
|
(LPCTSTR) strObj);
|
|
|
|
m_pOpView->AddOpItem(WMI_QUERY, strQuery);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnUpdateAssociators(CCmdUI* pCmdUI)
|
|
{
|
|
//HTREEITEM hitem = GetCurrentItem();
|
|
|
|
//pCmdUI->Enable(hitem && m_pOpView->IsObj(hitem));
|
|
CString strObj;
|
|
|
|
pCmdUI->Enable(GetSelectedObjPath(strObj));
|
|
}
|
|
|
|
void CWMITestDoc::OnReferences()
|
|
{
|
|
/*
|
|
HTREEITEM hitem = GetCurrentItem();
|
|
|
|
if (hitem && m_pOpView->IsObj(hitem))
|
|
{
|
|
CString strQuery,
|
|
strPath;
|
|
|
|
strPath = m_pOpView->m_pTree->GetItemText(hitem);
|
|
|
|
strQuery.Format(
|
|
_T("references of {%s}"),
|
|
(LPCTSTR) strPath);
|
|
|
|
m_pOpView->AddOpItem(WMI_QUERY, strQuery);
|
|
}
|
|
*/
|
|
CString strObj;
|
|
|
|
if (GetSelectedObjPath(strObj))
|
|
{
|
|
CString strQuery;
|
|
|
|
strQuery.Format(
|
|
_T("references of {%s}"),
|
|
(LPCTSTR) strObj);
|
|
|
|
m_pOpView->AddOpItem(WMI_QUERY, strQuery);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnInstGetClass()
|
|
{
|
|
CString strClass;
|
|
|
|
if (GetSelectedClass(strClass))
|
|
m_pOpView->AddOpItem(WMI_GET_CLASS, strClass);
|
|
}
|
|
|
|
void CWMITestDoc::OnInstGetInst()
|
|
{
|
|
CString strObj;
|
|
|
|
if (GetSelectedObjPath(strObj))
|
|
m_pOpView->AddOpItem(WMI_GET_OBJ, strObj);
|
|
}
|
|
|
|
void CWMITestDoc::OnClassInstances()
|
|
{
|
|
CObjInfo *pInfo = m_pOpView->GetObjInfo(GetCurrentItem());
|
|
|
|
if (pInfo)
|
|
{
|
|
CString strClass;
|
|
|
|
strClass = pInfo->GetStringPropValue(L"__CLASS");
|
|
|
|
m_pOpView->AddOpItem(WMI_ENUM_OBJ, strClass, FALSE);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnClassSuperclass()
|
|
{
|
|
CObjInfo *pInfo = m_pOpView->GetObjInfo(GetCurrentItem());
|
|
|
|
if (pInfo)
|
|
{
|
|
CString strClass;
|
|
|
|
strClass = pInfo->GetStringPropValue(L"__SUPERCLASS");
|
|
|
|
if (!strClass.IsEmpty())
|
|
m_pOpView->AddOpItem(WMI_GET_CLASS, strClass);
|
|
else
|
|
AfxMessageBox(IDS_NO_SUPERCLASS);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnClassInstancesDeep()
|
|
{
|
|
CObjInfo *pInfo = m_pOpView->GetObjInfo(GetCurrentItem());
|
|
|
|
if (pInfo)
|
|
{
|
|
CString strClass;
|
|
|
|
strClass = pInfo->GetStringPropValue(L"__CLASS");
|
|
|
|
m_pOpView->AddOpItem(WMI_ENUM_OBJ, strClass, TRUE);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnClassSubclasses()
|
|
{
|
|
CObjInfo *pInfo = m_pOpView->GetObjInfo(GetCurrentItem());
|
|
|
|
if (pInfo)
|
|
{
|
|
CString strClass;
|
|
|
|
strClass = pInfo->GetStringPropValue(L"__CLASS");
|
|
|
|
m_pOpView->AddOpItem(WMI_ENUM_CLASS, strClass, FALSE);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnClassSubclassesDeep()
|
|
{
|
|
CObjInfo *pInfo = m_pOpView->GetObjInfo(GetCurrentItem());
|
|
|
|
if (pInfo)
|
|
{
|
|
CString strClass;
|
|
|
|
strClass = pInfo->GetStringPropValue(L"__CLASS");
|
|
|
|
m_pOpView->AddOpItem(WMI_ENUM_CLASS, strClass, TRUE);
|
|
}
|
|
}
|
|
|
|
|
|
void CWMITestDoc::OnOptions()
|
|
{
|
|
CPrefDlg dlg;
|
|
|
|
dlg.m_bLoadLast = theApp.m_bLoadLastFile;
|
|
dlg.m_bShowInherited = theApp.m_bShowInheritedProperties;
|
|
dlg.m_bShowSystem = theApp.m_bShowSystemProperties;
|
|
dlg.m_dwUpdateFlag = theApp.m_dwUpdateFlag;
|
|
dlg.m_dwClassUpdateMode = theApp.m_dwClassUpdateMode;
|
|
dlg.m_bEnablePrivsOnStartup = theApp.m_bEnablePrivsOnStartup;
|
|
dlg.m_bPrivsEnabled = theApp.m_bPrivsEnabled;
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
theApp.m_bLoadLastFile = dlg.m_bLoadLast;
|
|
theApp.m_bShowInheritedProperties = dlg.m_bShowInherited;
|
|
theApp.m_bShowSystemProperties = dlg.m_bShowSystem;
|
|
theApp.m_dwUpdateFlag = dlg.m_dwUpdateFlag;
|
|
theApp.m_dwClassUpdateMode = dlg.m_dwClassUpdateMode;
|
|
theApp.m_bEnablePrivsOnStartup = dlg.m_bEnablePrivsOnStartup;
|
|
theApp.m_bPrivsEnabled = dlg.m_bPrivsEnabled;
|
|
|
|
//m_pOpView->UpdateCurrentObject();
|
|
m_pOpView->UpdateCurrentItem();
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnSystemProps()
|
|
{
|
|
theApp.m_bShowSystemProperties ^= 1;
|
|
|
|
m_pOpView->UpdateCurrentItem();
|
|
}
|
|
|
|
void CWMITestDoc::OnUpdateSystemProps(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(theApp.m_bShowSystemProperties);
|
|
}
|
|
|
|
void CWMITestDoc::OnInheritedProps()
|
|
{
|
|
theApp.m_bShowInheritedProperties ^= 1;
|
|
|
|
m_pOpView->UpdateCurrentItem();
|
|
}
|
|
|
|
void CWMITestDoc::OnUpdateInheritedProps(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(theApp.m_bShowInheritedProperties);
|
|
}
|
|
|
|
BOOL CWMITestDoc::GetSelectedObjPath(CString &strPath)
|
|
{
|
|
CMainFrame *pFrame = (CMainFrame*) AfxGetMainWnd();
|
|
|
|
if (pFrame->GetActiveView() == m_pOpView)
|
|
return m_pOpView->GetSelectedObjPath(strPath);
|
|
else
|
|
return m_pObjView->GetSelectedObjPath(strPath);
|
|
}
|
|
|
|
BOOL CWMITestDoc::GetSelectedClass(CString &strClass)
|
|
{
|
|
CMainFrame *pFrame = (CMainFrame*) AfxGetMainWnd();
|
|
|
|
if (pFrame->GetActiveView() == m_pOpView)
|
|
return m_pOpView->GetSelectedClass(strClass);
|
|
else
|
|
return m_pObjView->GetSelectedClass(strClass);
|
|
}
|
|
|
|
void CWMITestDoc::OnReconnect()
|
|
{
|
|
Disconnect();
|
|
|
|
// If we weren't able to connect without prompting for information,
|
|
// then display the connect dialog and try again.
|
|
if (FAILED(Connect(TRUE, FALSE)))
|
|
OnConnect();
|
|
|
|
OnRefreshAll();
|
|
}
|
|
|
|
void CWMITestDoc::OnUpdateReconnect(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_pNamespace != NULL);
|
|
}
|
|
|
|
void CWMITestDoc::OnTranslateValues()
|
|
{
|
|
theApp.m_bTranslateValues ^= 1;
|
|
|
|
m_pOpView->UpdateCurrentItem();
|
|
}
|
|
|
|
void CWMITestDoc::OnUpdateTranslateValues(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(theApp.m_bTranslateValues);
|
|
}
|
|
|
|
void CWMITestDoc::OnSave()
|
|
{
|
|
CObjInfo *pObj = GetCurrentObj();
|
|
COpWrap *pWrap = m_pOpView->GetCurrentOp();
|
|
|
|
if (pObj)
|
|
{
|
|
HRESULT hr;
|
|
IWbemCallResult *pResult = NULL;
|
|
|
|
if (pObj->IsInstance())
|
|
hr = m_pNamespace->PutInstance(
|
|
pObj->m_pObj,
|
|
theApp.m_dwUpdateFlag | WBEM_FLAG_USE_AMENDED_QUALIFIERS,
|
|
NULL,
|
|
&pResult);
|
|
else
|
|
hr = m_pNamespace->PutClass(
|
|
pObj->m_pObj,
|
|
theApp.m_dwUpdateFlag | theApp.m_dwClassUpdateMode |
|
|
WBEM_FLAG_USE_AMENDED_QUALIFIERS,
|
|
NULL,
|
|
&pResult);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
if (pWrap && pWrap->m_type == WMI_CREATE_OBJ)
|
|
{
|
|
_variant_t var;
|
|
|
|
hr = pObj->m_pObj->Get(L"__RELPATH", 0, &var, NULL, NULL);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
// We created an instance, but since the key fields were
|
|
// generated by WMI we'll have to use GetResultString to
|
|
// get the path.
|
|
if (var.vt == VT_NULL)
|
|
{
|
|
BSTR bstr = NULL;
|
|
|
|
if (SUCCEEDED(hr =
|
|
pResult->GetResultString(WBEM_INFINITE, &bstr)))
|
|
{
|
|
var = bstr;
|
|
SysFreeString(bstr);
|
|
}
|
|
}
|
|
|
|
if (var.vt != VT_NULL)
|
|
{
|
|
pWrap->m_type = WMI_GET_OBJ;
|
|
pWrap->m_strOpText = var.bstrVal;
|
|
|
|
pObj->SetModified(FALSE);
|
|
m_pOpView->RefreshItem(pWrap);
|
|
m_pOpView->UpdateCurrentObject(TRUE);
|
|
}
|
|
}
|
|
}
|
|
else if (pWrap && pWrap->m_type == WMI_CREATE_CLASS)
|
|
{
|
|
_variant_t var;
|
|
|
|
hr = pObj->m_pObj->Get(L"__CLASS", 0, &var, NULL, NULL);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
pWrap->m_type = WMI_GET_CLASS;
|
|
pWrap->m_strOpText = var.bstrVal;
|
|
|
|
pObj->SetModified(FALSE);
|
|
m_pOpView->RefreshItem(pWrap);
|
|
m_pOpView->UpdateCurrentObject(TRUE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pObj->SetModified(FALSE);
|
|
m_pOpView->UpdateCurrentObject(TRUE);
|
|
}
|
|
}
|
|
|
|
if (FAILED(hr))
|
|
DisplayWMIErrorBox(hr);
|
|
//DisplayWMIErrorBox(hr, pResult);
|
|
|
|
if (pResult)
|
|
pResult->Release();
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnUpdateSave(CCmdUI* pCmdUI)
|
|
{
|
|
CObjInfo *pObj = GetCurrentObj();
|
|
|
|
pCmdUI->Enable(pObj && pObj->IsModified());
|
|
}
|
|
|
|
void CWMITestDoc::DisplayWMIErrorBox(
|
|
HRESULT hres,
|
|
//IWbemCallResult *pResult,
|
|
IWbemClassObject *pObj)
|
|
{
|
|
CErrorDlg dlg;
|
|
|
|
dlg.m_hr = hres;
|
|
//dlg.m_pResult = pResult;
|
|
|
|
if (!pObj)
|
|
pObj = GetWMIErrorObject();
|
|
|
|
dlg.m_pObj.Attach(pObj, FALSE);
|
|
|
|
dlg.DoModal();
|
|
}
|
|
|
|
BOOL CWMITestDoc::EditGenericObject(DWORD dwPrompt, IWbemClassObject *pObj)
|
|
{
|
|
CPropertySheet sheet(dwPrompt);
|
|
CPropsPg pgProps;
|
|
CPropQualsPg pgQuals;
|
|
CObjInfo info;
|
|
|
|
info.SetObj(pObj);
|
|
info.SetBaseImage(IMAGE_OBJECT);
|
|
info.LoadProps(NULL);
|
|
|
|
pgProps.m_pNamespace = NULL;
|
|
pgProps.m_pObj = &info;
|
|
|
|
pgQuals.m_pObj = pObj;
|
|
pgQuals.m_bIsInstance = TRUE;
|
|
pgQuals.m_mode = CPropQualsPg::QMODE_CLASS;
|
|
|
|
sheet.AddPage(&pgProps);
|
|
sheet.AddPage(&pgQuals);
|
|
|
|
sheet.DoModal();
|
|
|
|
// This looks bad, but normally this is done by a controlling COpWrap. In
|
|
// this case we faked one, so we have to get rid of it ourselves.
|
|
delete info.GetProps();
|
|
|
|
// TODO: We need to see if this object changed before returning TRUE.
|
|
return TRUE;
|
|
}
|
|
|
|
void CWMITestDoc::DisplayWMIErrorDetails(IWbemClassObject *pObj)
|
|
{
|
|
EditGenericObject(IDS_VIEW_ERROR_INFO, pObj);
|
|
}
|
|
|
|
|
|
void CWMITestDoc::OnClassCreateInstance()
|
|
{
|
|
CObjInfo *pInfo = m_pOpView->GetObjInfo(GetCurrentItem());
|
|
|
|
if (pInfo)
|
|
{
|
|
CString strClass;
|
|
|
|
strClass = pInfo->GetStringPropValue(L"__CLASS");
|
|
|
|
m_pOpView->AddOpItem(WMI_CREATE_OBJ, strClass, FALSE);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnErrorDetails()
|
|
{
|
|
COpWrap *pOp = m_pOpView->GetCurrentOp();
|
|
|
|
if (pOp && pOp->m_pErrorObj != NULL)
|
|
DisplayWMIErrorDetails(pOp->m_pErrorObj);
|
|
}
|
|
|
|
void CWMITestDoc::OnUpdateErrorDetails(CCmdUI* pCmdUI)
|
|
{
|
|
COpWrap *pOp = m_pOpView->GetCurrentOp();
|
|
|
|
pCmdUI->Enable(pOp && pOp->m_pErrorObj != NULL);
|
|
}
|
|
|
|
void CWMITestDoc::OnExecuteMethod(UINT uiCmd)
|
|
{
|
|
CObjInfo *pInfo = GetCurrentObj();
|
|
|
|
if (pInfo)
|
|
{
|
|
CPropInfoArray *pProps = pInfo->GetProps();
|
|
int iWhich = uiCmd - IDC_EXECUTE_METHOD_FIRST;
|
|
|
|
if (iWhich < pProps->GetMethodCount())
|
|
{
|
|
CMethodInfo &info = pProps->m_listMethods.GetAt(
|
|
pProps->m_listMethods.FindIndex(iWhich));
|
|
|
|
ExecuteMethod(pInfo, info.m_strName);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::ExecuteMethod(CObjInfo *pObj, LPCTSTR szMethod)
|
|
{
|
|
CExecMethodDlg dlg;
|
|
|
|
dlg.m_strDefaultMethod = szMethod;
|
|
dlg.m_pInfo = pObj;
|
|
|
|
dlg.DoModal();
|
|
}
|
|
|
|
|
|
void CWMITestDoc::OnExecMethod()
|
|
{
|
|
CGetTextDlg dlg;
|
|
|
|
dlg.m_dwPromptID = IDS_PROMPT_EXEC_METHOD;
|
|
dlg.m_dwTitleID = IDS_EXEC_METHOD_TITLE;
|
|
dlg.m_bAllowClassBrowse = TRUE;
|
|
dlg.m_bEmptyOK = FALSE;
|
|
dlg.m_pNamespace = m_pNamespace;
|
|
dlg.LoadListViaReg(_T("ExecObjHistory"));
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
IWbemClassObjectPtr pObj;
|
|
HRESULT hr;
|
|
|
|
hr =
|
|
m_pNamespace->GetObject(
|
|
_bstr_t(dlg.m_strText),
|
|
WBEM_FLAG_RETURN_WBEM_COMPLETE,
|
|
NULL,
|
|
&pObj,
|
|
NULL);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
CObjInfo info;
|
|
|
|
info.SetObj(pObj);
|
|
info.SetBaseImage(IMAGE_OBJECT);
|
|
info.LoadProps(m_pNamespace);
|
|
|
|
// The method is blank so the user can choose when the dialog
|
|
// comes up.
|
|
ExecuteMethod(&info, _T(""));
|
|
|
|
// This looks bad, but normally this is done by a controlling COpWrap. In
|
|
// this case we faked one, so we have to get rid of it ourselves.
|
|
delete info.GetProps();
|
|
}
|
|
else
|
|
DisplayWMIErrorBox(hr);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnShowMof()
|
|
{
|
|
CObjInfo *pObj = GetCurrentObj();
|
|
CMofDlg dlg;
|
|
|
|
dlg.m_pObj = pObj->m_pObj;
|
|
|
|
dlg.DoModal();
|
|
}
|
|
|
|
void CWMITestDoc::OnUpdateShowMof(CCmdUI* pCmdUI)
|
|
{
|
|
CObjInfo *pObj = GetCurrentObj();
|
|
|
|
pCmdUI->Enable(pObj != NULL);
|
|
}
|
|
|
|
void CWMITestDoc::ExportItem(HTREEITEM hitem)
|
|
{
|
|
CExportDlg dlg(FALSE);
|
|
|
|
dlg.m_bTranslate = theApp.GetProfileInt(_T("Settings"), _T("ExportTrans"), TRUE);
|
|
dlg.m_bShowSystemProps = theApp.GetProfileInt(_T("Settings"), _T("ExportShowSys"), TRUE);
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
theApp.WriteProfileInt(_T("Settings"), _T("ExportTrans"), dlg.m_bTranslate);
|
|
theApp.WriteProfileInt(_T("Settings"), _T("ExportShowSys"), dlg.m_bShowSystemProps);
|
|
|
|
m_pOpView->ExportItemToFile(
|
|
dlg.GetFileName(),
|
|
hitem,
|
|
dlg.m_bShowSystemProps,
|
|
dlg.m_bTranslate);
|
|
}
|
|
}
|
|
|
|
void CWMITestDoc::OnExportTree()
|
|
{
|
|
ExportItem(m_pOpView->m_hitemRoot);
|
|
}
|
|
|
|
void CWMITestDoc::OnExportItem()
|
|
{
|
|
ExportItem(GetCurrentItem());
|
|
}
|
|
|
|
void CWMITestDoc::OnFilterBindings()
|
|
{
|
|
CBindingSheet sheet(IDS_FILTER_TO_CONSUMER_BINDINGS);
|
|
CFilterPg pgFilters;
|
|
CConsumerPg pgConsumers;
|
|
CBindingPg pgBindings;
|
|
|
|
sheet.AddPage(&pgFilters);
|
|
sheet.AddPage(&pgConsumers);
|
|
sheet.AddPage(&pgBindings);
|
|
|
|
sheet.DoModal();
|
|
}
|
|
|
|
void CWMITestDoc::OnStopCurrent()
|
|
{
|
|
COpWrap *pWrap = m_pOpView->GetCurrentOp();
|
|
|
|
if (pWrap)
|
|
pWrap->CancelOp(m_pNamespace);
|
|
}
|
|
|
|
void CWMITestDoc::OnUpdateRefreshCurrent(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_pOpView->GetCurrentOp() != NULL);
|
|
}
|
|
|
|
void CWMITestDoc::OnUpdateStopCurrent(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_pOpView->GetCurrentOp() != NULL);
|
|
}
|