/**************************************************************************** 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); };