Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

352 lines
12 KiB

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