220 lines
7.4 KiB
C++
220 lines
7.4 KiB
C++
/****************************************************************************
|
|
Copyright information : Copyright (c) 1998-1999 Microsoft Corporation
|
|
File Name : ExecEngine.h
|
|
Project Name : WMI Command Line
|
|
Author Name : Ch. Sriramachandramurthy
|
|
Date of Creation (dd/mm/yy) : 27th-September-2000
|
|
Version Number : 1.0
|
|
Brief Description : This file consist of member variable and
|
|
functions declarations of the Execution engine
|
|
module.
|
|
Revision History :
|
|
Last Modified By : Ch. Sriramachandramurthy
|
|
Last Modified Date : 20th-March-2001
|
|
****************************************************************************/
|
|
|
|
/*-------------------------------------------------------------------
|
|
Class Name : CExecEngine
|
|
Class Type : Concrete
|
|
Brief Description : This class encapsulates the functionality needed
|
|
for executing the WMI statements that are obtained
|
|
as a result of parsing engine. It also performs
|
|
verb specific processing using the information
|
|
available with CParsedInfo class.
|
|
Super Classes : None
|
|
Sub Classes : None
|
|
Classes Used : CParsedInfo
|
|
Interfaces Used : WMI COM Interfaces
|
|
--------------------------------------------------------------------*/
|
|
|
|
class CParsedInfo;
|
|
|
|
class CExecEngine
|
|
{
|
|
public:
|
|
// Construction
|
|
CExecEngine();
|
|
|
|
// Destruction
|
|
~CExecEngine();
|
|
|
|
// Restrict Assignment
|
|
CExecEngine& operator=(CExecEngine& rExecEngine);
|
|
|
|
// Attributes
|
|
private:
|
|
// trace flag
|
|
BOOL m_bTrace;
|
|
|
|
ERRLOGOPT m_eloErrLogOpt;
|
|
// Pointer to object of type IWbemObjectTextSrc encapsulates the
|
|
// functionality of WMI XML Encoder
|
|
IWbemObjectTextSrc *m_pITextSrc;
|
|
|
|
// Pointer to object of type IWbemLocator, used to obtain IWbemServices
|
|
// object.
|
|
IWbemLocator *m_pIWbemLocator;
|
|
|
|
// Pointer to object of type IWbemServices, Used to perform WMI operations
|
|
// on target namespace.
|
|
IWbemServices *m_pITargetNS;
|
|
|
|
// Context pointer
|
|
IWbemContext *m_pIContext;
|
|
|
|
BOOL m_bSysProp;
|
|
|
|
BOOL m_bNoAssoc;
|
|
// Operations
|
|
private:
|
|
// Creates the instance of IWbemObjectTextSrc interface.
|
|
HRESULT CreateWMIXMLTextSrc(CParsedInfo& rParsedInfo);
|
|
|
|
// Creates the instance of IWbemContext interface
|
|
HRESULT CreateContext(CParsedInfo& rPrasedInfo);
|
|
|
|
// Connect to the WMI namespace on the target machine.
|
|
HRESULT ConnectToTargetNS(CParsedInfo& rParsedInfo);
|
|
|
|
// Executes query to give results in XML file format.
|
|
// Refers data in the CCommnadSwicthes object of CParsedInfo object.
|
|
HRESULT ObtainXMLResultSet(BSTR bstrQuery,
|
|
CParsedInfo& rParsedInfo,
|
|
_bstr_t& bstrXML,
|
|
BOOL bSysProp = TRUE,
|
|
BOOL bNotAssoc = TRUE);
|
|
|
|
HRESULT FrameAssocHeader(_bstr_t bstrPath, _bstr_t& bstrFrag,
|
|
BOOL bClass);
|
|
|
|
// This function changes the property value for the
|
|
// given property name and value
|
|
BOOL SetPropertyInfo(CParsedInfo& rParsedInfo,
|
|
_bstr_t& bstrQuery,
|
|
_bstr_t& bstrObject);
|
|
|
|
// Executes a WMI method specified in the CCommandSwicthes
|
|
// object of the CParsedInfo object passed to it.
|
|
BOOL ExecWMIMethod(CParsedInfo&);
|
|
|
|
// Processes and executes GET|LIST verb referring CParsedInfo object
|
|
// or to display help in interactive mode by displaying properties of
|
|
// concernrd instance.
|
|
BOOL ProcessSHOWInfo(CParsedInfo& rParsedInfo, BOOL bVerb=TRUE,
|
|
_TCHAR* pszPath=NULL);
|
|
|
|
// Processes and executes CALL verb referring CParsedInfo object.
|
|
BOOL ProcessCALLVerb(CParsedInfo& rParsedInfo);
|
|
|
|
// Processes and executes SET verb referring CParsedInfo object.
|
|
BOOL ProcessSETVerb(CParsedInfo& rParsedInfo);
|
|
|
|
// Processes and executes CREATE verb referring CParsedInfo object.
|
|
BOOL ProcessCREATEVerb(CParsedInfo& rParsedInfo);
|
|
|
|
// Processes and executes DELETE verb referring CParsedInfo object.
|
|
BOOL ProcessDELETEVerb(CParsedInfo& rParsedInfo);
|
|
|
|
// Processes and executes ASSOC verb referring CParsedInfo object.
|
|
BOOL ProcessASSOCVerb(CParsedInfo& rParsedInfo);
|
|
|
|
// This function constructs the path expression from alias info and
|
|
// where info. Used for CALL verb only
|
|
BOOL FormPathExprFromWhereExpr(_bstr_t& bstrPath,
|
|
CParsedInfo& rParsedInfo);
|
|
|
|
// This function changes the property values for the given property names
|
|
// and values in a passed IWbemClassObject
|
|
BOOL SetProperties(CParsedInfo& rParsedInfo,
|
|
IWbemClassObject* pIWbemObj,
|
|
BOOL bClass);
|
|
|
|
// Deletes the objects
|
|
BOOL DeleteObjects(CParsedInfo& rParsedInfo,
|
|
_bstr_t& bstrQuery,
|
|
_bstr_t& bstrObject);
|
|
|
|
// Obtain user response
|
|
INTEROPTION GetUserResponse(_TCHAR* pszMsg);
|
|
|
|
// Create a new instance
|
|
BOOL CreateInstance(CParsedInfo& rParsedInfo,
|
|
BSTR bstrClass);
|
|
|
|
// Validate the new input values supplied for the properties
|
|
// against the qualifiers details.
|
|
BOOL ValidateInParams(CParsedInfo& rParsedInfo,
|
|
_bstr_t bstrClass);
|
|
|
|
|
|
BOOL ValidateAlaisInParams(CParsedInfo& rParsedInfo);
|
|
|
|
BOOL CheckAliasQualifierInfo(CParsedInfo& rParsedInfo,
|
|
_bstr_t bstrParam,
|
|
WCHAR*& pszValue,
|
|
PROPDETMAP pdmPropDetMap);
|
|
|
|
// Checks the parameter/property value against the following
|
|
// qualifiers:
|
|
// 1. MaxLen, 2. Values 3. ValuesMap
|
|
BOOL CheckQualifierInfo(CParsedInfo& rParsedInfo,
|
|
IWbemClassObject* pIObject,
|
|
_bstr_t bstrParam,
|
|
WCHAR*& pszValue);
|
|
|
|
// Method Execution
|
|
HRESULT ExecuteMethodAndDisplayResults(_bstr_t bstrPath,
|
|
CParsedInfo& rParsedinfo,
|
|
IWbemClassObject* pIInParam);
|
|
|
|
// Display the output parameters of method execution.
|
|
void DisplayMethExecOutput(CParsedInfo& rParsedInfo);
|
|
|
|
// Invoke other command line Utilities
|
|
BOOL ExecOtherCmdLineUtlty(CParsedInfo& rParsedInfo);
|
|
|
|
// Checks and returns TRUE if verb invocation mode is interactive
|
|
BOOL IsInteractive(CParsedInfo& rParsedInfo);
|
|
|
|
// Substitute hashes and execute command line utility.
|
|
// If pIWbemObj != NULL then utility should be passed with appropriate
|
|
// instance values.
|
|
void SubstHashAndExecCmdUtility(CParsedInfo& rParsedInfo,
|
|
IWbemClassObject *pIWbemObj = NULL);
|
|
|
|
// Forms query and executes method or command line utility.
|
|
HRESULT FormQueryAndExecuteMethodOrUtility(
|
|
CParsedInfo& rParsedInfo,
|
|
IWbemClassObject *pIInParam = NULL);
|
|
|
|
// This function takes the input as a path expression and
|
|
// extracts the Class and Where expression part from the
|
|
// path expression.
|
|
BOOL ExtractClassNameandWhereExpr(_TCHAR* pszPathExpr,
|
|
CParsedInfo& rParsedInfo,
|
|
_TCHAR* pszWhere);
|
|
|
|
// This function accepts the user response before going
|
|
// ahead, when /INTERACTIVE is specified at the verb level
|
|
INTEROPTION GetUserResponseEx(_TCHAR* pszMsg);
|
|
|
|
// Obtain param values from parameter map in the same order as they
|
|
// appear in the alias verb definition.
|
|
void ObtainInParamsFromParameterMap(CParsedInfo& rParsedinfo,
|
|
CHARVECTOR& cvParamValues);
|
|
|
|
public:
|
|
// This function uninitializes the member variables.
|
|
void Uninitialize(BOOL bFlag = FALSE);
|
|
|
|
// Executes the command referring to CCommandSwitches and CGlobalSwitches
|
|
// of the CParsedInfo object of CParsedInfo object Passed to it as
|
|
// parameters. Puts the results back in to objects passed to it for the
|
|
// use of Format Engine.
|
|
BOOL ExecuteCommand(CParsedInfo& rParsedInfo);
|
|
|
|
// Sets the locator object passed via parameter to member
|
|
// of the class.
|
|
BOOL SetLocatorObject(IWbemLocator* pILocator);
|
|
};
|