windows-nt/Source/XPSP1/NT/admin/wmi/wbem/tools/wmic/execengine.h
2020-09-26 16:20:57 +08:00

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