|
|
/****************************************************************************
Copyright information : Copyright (c) 1998-1999 Microsoft Corporation File Name : ParserEngine.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 class declaration of class CParserEngine. Revision History : Last Modified By : Sashank P Last Modified Date : 10th-April-2001 *****************************************************************************/
/*----------------------------------------------------------------------------
Class Name : CParserEngine Class Type : Concrete Brief Description : This class encapsulates the functionality needed for parsing the command string entered as input and validating the same. Super Classes : None Sub Classes : None Classes Used : CParsedInfo CCmdTokenizer CCmdAlias Interfaces Used : WMI COM Interfaces ----------------------------------------------------------------------------*/ // forward declaration of classes
class CParsedInfo; class CCmdTokenizer; class CCmdAlias;
class CParserEngine { public: // Construction
CParserEngine();
// Destruction
~CParserEngine();
// Restrict Assignment
CParserEngine& operator=(CParserEngine& rParserEngine);
// Attributes
private: // IWbemLocator interface to obtain the initial namespace pointer to the
//Windows Management on a particular host computer
IWbemLocator* m_pIWbemLocator;
//IWbemServices interface is used by clients and providers to access WMI
//services.This interface provides management services to client processes
IWbemServices* m_pITargetNS; // Tokenizer object used for tokenize the command string
CCmdTokenizer m_CmdTknzr; // Alias object used for accessing the alias information from the WMI.
CCmdAlias m_CmdAlias;
// flag to indicate whether <alias> name
// is specified.
BOOL m_bAliasName;
// Operations
private:
// Parses the global switches.
RETCODE ParseGlobalSwitches(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parses the <alias> information.
RETCODE ParseAliasInfo(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parses the CLASS information.
RETCODE ParseClassInfo(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parses the Verb information
RETCODE ParseVerbInfo(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo); // Parse the GET verb information
RETCODE ParseGETVerb(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parse the LIST verb information
RETCODE ParseLISTVerb(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parse the SET | CREATE verb information
RETCODE ParseSETorCREATEVerb(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, HELPTYPE helpType);
// Parse the ASSOC verb information
RETCODE ParseASSOCVerb(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parse the CALL verb information
RETCODE ParseCALLVerb(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parse the method information
RETCODE ParseMethodInfo(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parses the GET verb switches information
RETCODE ParseGETSwitches(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo); //Checks for help option in advance.
RETCODE CheckForHelp(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, UINT uErrataCode);
// Parses the PATH expression.
RETCODE ParsePathInfo(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parses the WHERE expression.
RETCODE ParseWhereInfo(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo); // Parses the SET | CREATE | NamedParams verb argument list
RETCODE ParseSETorCREATEOrNamedParamInfo(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, HELPTYPE helpType);
// Parses the LIST switches information
RETCODE ParseLISTSwitches(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, BOOL& bFormatSwitchSpecified); // Parses the Verb switches information
RETCODE ParseVerbSwitches(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Gets the next token from the Tokens vector - overload 1.
BOOL GetNextToken(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator);
// Gets the next token from the Tokens vector - overload 2.
RETCODE GetNextToken(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, HELPTYPE helpType, UINT uErrataCode);
// Gets the next token from the Tokens vector - overload 3.
RETCODE GetNextToken(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, UINT uErrataCode);
// Check whether the next token is '?'
RETCODE IsHelp(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, HELPTYPE helpType, UINT uErrataCode, TOKENLEVEL tokenLevel = LEVEL_ONE);
// Parse for help information - overload 1
RETCODE ParseHelp(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, BOOL bGlobalHelp = FALSE);
// Parse for help information - overload 2
RETCODE ParseHelp(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, HELPTYPE htHelp, CParsedInfo& rParsedInfo, BOOL bGlobalHelp = FALSE);
// Parse and form a PWhere expression
BOOL ParsePWhereExpr(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, BOOL bIsParan);
// Extracts the Classname and the where expression
// out of the given path expression
BOOL ExtractClassNameandWhereExpr(_TCHAR* pszPathExpr, CParsedInfo& rParsedInfo);
// Obtains properties associated with the class for /get help
// If bCheckWritePropsAvail == TRUE then functions checks for availibilty
// of properties.
BOOL ObtainClassProperties(CParsedInfo& rParsedInfo, BOOL bCheckWritePropsAvail = FALSE);
// Obtains parameters of the method
HRESULT ObtainMethodParamInfo(IWbemClassObject* pIObj, METHODDETAILS& mdMethDet, INOROUT ioInOrOut, BOOL bTrace, CParsedInfo& rParsedInfo);
// Get the status of method ( implemented or not ).
HRESULT GetMethodStatusAndDesc(IWbemClassObject* pIObj, BSTR bstrMethod, _bstr_t& bstrStatus, _bstr_t& bstrDesc, BOOL bTrace);
// Obtain class methods. if bCheckForExists == TRUE then it
// checks for availibility of methods with class.
BOOL ObtainClassMethods(CParsedInfo& rParsedInfo, BOOL bCheckForExists = FALSE);
// Connects to Target Namespace.
HRESULT ConnectToNamespace(CParsedInfo& rParsedInfo);
// Parses EVERY switch.
RETCODE ParseEVERYSwitch(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parses FORMAT switch.
RETCODE ParseFORMATSwitch(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Validates the value passed with global switches.
RETCODE ValidateGlobalSwitchValue(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, UINT uErrataCode, CParsedInfo& rParsedInfo, UINT uErrataCode2, HELPTYPE htHelp);
// Is pszToken is Std verb or User defined verb.
BOOL IsStdVerbOrUserDefVerb( _bstr_t pszToken, CParsedInfo& rParsedInfo );
// Parses the TRANSLATE switch.
RETCODE ParseTRANSLATESwitch(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parsed the CONTEXT switch.
RETCODE ParseContextInfo(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Validates the node name/namespace
BOOL ValidateNodeOrNS(_TCHAR* pszInput, BOOL bNode);
// Parses the ASSOC switches information
RETCODE ParseAssocSwitches(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Parses the ASSOC switches - RESULTCLASSS,RESULTROLE ,ASSOCCLASSS
RETCODE ParseAssocSwitchEx(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, ASSOCSwitch assocSwitch);
// Parsing Switch:Count ( /EVERY:N and /REPEAT:N )
RETCODE ParseNumberedSwitch(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, HELPTYPE htHelp, UINT uSwitchErrCode, UINT uNumberErrCode);
// Validates a class;
BOOL IsValidClass(CParsedInfo& rParsedInfo);
// Checks whether methods are available with alias in case of alias specified.
// and with class in case of class speicified.
void ObtainMethodsAvailableFlag(CParsedInfo& rParsedInfo);
// Checks whether Writeable Props are available with alias in case of alias
// specified. and with class in case of class speicified.
void ObtainWriteablePropsAvailailableFlag(CParsedInfo& rParsedInfo);
// Checks whether FULL Props are available with alias in case of alias
// specified. and with class in case of class speicified.
void ObtainFULLPropsAvailailableFlag(CParsedInfo& rParsedInfo);
// This function parses the verb interactive option
RETCODE ParseVerbInteractive(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, BOOL& bInvalidOption);
// Prepares the output and append files for output redirection.
RETCODE ProcessOutputAndAppendFiles(CParsedInfo& rParsedInfo, RETCODE retCode, BOOL bOpenOutInWriteMode);
// Parse Unnamed Parameter list.
RETCODE ParseUnnamedParamList(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Validates the named params with verb or method parameters.
RETCODE ValidateVerbOrMethodParams(CParsedInfo& rParsedInfo);
// Parses paramName = paramValue strings.
RETCODE ParseParamsString(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo, XSLTDET& xdXSLTDet, _TCHAR* pszXSLFile);
// Parses the node list file.
RETCODE ParseNodeListFile(CHARVECTOR& cvTokens, CHARVECTOR::iterator& theIterator, CParsedInfo& rParsedInfo);
// Retrieve Node by Node from Node list file
BOOL GetNodeFromNodeFile(FILE* fpNodeListFile, FILETYPE eftNodeFileType, _TCHAR* szNodeName); public: // Gets the command tokenizer
CCmdTokenizer& GetCmdTokenizer(); // It does the Processing the token .
RETCODE ProcessTokens(CParsedInfo& rParsedInfo); // Initializes the member variables
void Initialize(); // Uninitializes the member variables
void Uninitialize(BOOL bFinal = FALSE); // Sets the locator object .
BOOL SetLocatorObject(IWbemLocator* pIWbemLocator); };
|