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.
251 lines
7.2 KiB
251 lines
7.2 KiB
/****************************************************************************
|
|
Copyright information : Copyright (c) 1998-1999 Microsoft Corporation
|
|
File Name : WMICommandLn.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 CWMICommandLine
|
|
Revision History :
|
|
Last Modified By : Ch. Sriramachandramurthy
|
|
Last Modified Date : 16th-January-2001
|
|
****************************************************************************/
|
|
|
|
// WMICommandLine.h : header file
|
|
//
|
|
/*-------------------------------------------------------------------
|
|
Class Name : CWMICommandLine
|
|
Class Type : Concrete
|
|
Brief Description : This class encapsulates the functionality needed
|
|
for synchronization the funtionality of three
|
|
functional components identified for the WmiCli.exe.
|
|
Super Classes : None
|
|
Sub Classes : None
|
|
Classes Used : CParsedInfo
|
|
CExecEngine
|
|
CFormatEngine
|
|
CParserEngine
|
|
Interfaces Used : WMI COM Interfaces
|
|
--------------------------------------------------------------------*/
|
|
|
|
// forward declaration of classes
|
|
class CParserEngine;
|
|
class CExecEngine;
|
|
class CFormatEngine;
|
|
class CParsedInfo;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWMICommandLine
|
|
class CWMICommandLine
|
|
{
|
|
public:
|
|
// Construction
|
|
CWMICommandLine();
|
|
|
|
// Destruction
|
|
~CWMICommandLine();
|
|
|
|
// Restrict Assignment
|
|
CWMICommandLine& operator=(CWMICommandLine& rWmiCmdLn);
|
|
|
|
// Attributes
|
|
private:
|
|
//Pointer to the locator object .
|
|
IWbemLocator *m_pIWbemLocator;
|
|
|
|
//CParserEngine object
|
|
CParserEngine m_ParserEngine;
|
|
|
|
//CExecEngine object
|
|
CExecEngine m_ExecEngine;
|
|
|
|
//CFormatEngine object
|
|
CFormatEngine m_FormatEngine;
|
|
|
|
//CParsedInfo object
|
|
CParsedInfo m_ParsedInfo;
|
|
|
|
// error level
|
|
WMICLIUINT m_uErrLevel;
|
|
|
|
// handle to registry key
|
|
HKEY m_hKey;
|
|
|
|
// handle Ctrl+ events
|
|
BOOL m_bBreakEvent;
|
|
|
|
// specifies accepting input (==TRUE) or executing command (==FALSE)
|
|
BOOL m_bAccCmd;
|
|
|
|
// << description to be added >>
|
|
BOOL m_bDispRes;
|
|
|
|
// Flag to specify windows socket interface initialization.
|
|
BOOL m_bInitWinSock;
|
|
|
|
// Buffer to hold data to be send to clipboard.
|
|
CHString m_chsClipBoardBuffer;
|
|
|
|
// added by (Nag)
|
|
BSTRMAP m_bmKeyWordtoFileName;
|
|
|
|
// Height of console buffer before starting utility.
|
|
SHORT m_nHeight;
|
|
|
|
// Width of console buffer before starting utility.
|
|
SHORT m_nWidth;
|
|
|
|
BOOL m_bCtrlHandlerError;
|
|
|
|
// Checks whether mof files timestamps are the same as those which were mofcompiled.
|
|
BOOL EqualTimeStamps( const _bstr_t& path, LPCWSTR mofs[], __int64* filestamps, DWORD dw_mofs );
|
|
|
|
// Set mof files timestamps to registry when mofcompiled.
|
|
BOOL SetTimeStamps( LPCWSTR mofs[], const __int64* filestamps, DWORD dw_mofs );
|
|
|
|
// clean registry and namespace when update fails
|
|
void MofCompFailureCleanUp ( LPCWSTR mofs[], DWORD dw_mofs );
|
|
|
|
// Operations
|
|
public:
|
|
|
|
// Does the initialization ofthe COM library and the security
|
|
// at the process level
|
|
BOOL Initialize();
|
|
|
|
//Gets the Format Engine Object
|
|
CFormatEngine& GetFormatObject();
|
|
|
|
//Gets the Parse Information Object
|
|
CParsedInfo& GetParsedInfoObject();
|
|
|
|
//Uninitializes the the member variables when the execution of a
|
|
//command string issued on the command line is completed.
|
|
void Uninitialize();
|
|
|
|
//processes the given command string
|
|
SESSIONRETCODE ProcessCommandAndDisplayResults(_TCHAR* pszBuffer);
|
|
|
|
//Puts the process to a wait state, launches a worker thread
|
|
//that keeps track of kbhit()
|
|
void SleepTillTimeoutOrKBhit(DWORD dwMilliSeconds);
|
|
|
|
//Thread procedure polling for keyboard hit
|
|
static DWORD WINAPI PollForKBhit(LPVOID lpParam);
|
|
|
|
//Function to check whether the input string's first token
|
|
//is 'quit'|'exit', if so return true else return false.
|
|
BOOL IsSessionEnd();
|
|
|
|
//Set the session error value
|
|
void SetSessionErrorLevel(SESSIONRETCODE ssnRetCode);
|
|
|
|
//Get the session error value
|
|
WMICLIUINT GetSessionErrorLevel();
|
|
|
|
// This function check whether the /USER global switch
|
|
// has been specified without /PASSWORD, if so prompts
|
|
// for the password
|
|
void CheckForPassword();
|
|
|
|
// Checks whether the given namespace is available or not.
|
|
BOOL IsNSAvailable(const _bstr_t& bstrNS);
|
|
|
|
// Checks whether the wmic.exe is being launched for the first time.
|
|
BOOL IsFirstTime();
|
|
|
|
// Register the aliases info / localized descriptions
|
|
HRESULT RegisterMofs();
|
|
|
|
// Compile the MOF file.
|
|
HRESULT CompileMOFFile(IMofCompiler* pIMofComp,
|
|
const _bstr_t& bstrFile,
|
|
WMICLIINT& nErr);
|
|
|
|
// Set break event falg
|
|
void SetBreakEvent(BOOL bFlag);
|
|
|
|
// Get break event flag
|
|
BOOL GetBreakEvent();
|
|
|
|
// Set Accept Command flag
|
|
void SetAcceptCommand(BOOL bFlag);
|
|
|
|
// Get Accept Command flag
|
|
BOOL GetAcceptCommand();
|
|
|
|
// Set displayresults flag status
|
|
void SetDisplayResultsFlag(BOOL bFlag);
|
|
|
|
// Get DisplayResults flag status
|
|
BOOL GetDisplayResultsFlag();
|
|
|
|
// Set Windows sockect interface flag
|
|
void SetInitWinSock(BOOL bFlag);
|
|
|
|
// Get Windows sockect interface flag
|
|
BOOL GetInitWinSock();
|
|
|
|
// Buffer data to send clipboard.
|
|
void AddToClipBoardBuffer(LPCWSTR pszOutput);
|
|
|
|
// Get Buffered output in clip board buffer.
|
|
CHString& GetClipBoardBuffer();
|
|
|
|
// Clear Clip Board Buffer.
|
|
void EmptyClipBoardBuffer();
|
|
|
|
// Check if the file is xml or batch file. If it is batch file
|
|
// then parse it, get commands and write the commands into
|
|
// batch file and redirect the stdin to that file.
|
|
BOOL ReadXMLOrBatchFile(HANDLE hInFile);
|
|
|
|
// Frames the XML string for context info
|
|
void FrameContextInfoFragment(_bstr_t& bstrContext);
|
|
|
|
// Frames the XML header info
|
|
void FrameNodeListFragment(_bstr_t& bstrNodeList);
|
|
|
|
// Frames the XML string for Request info
|
|
void FrameXMLHeader(_bstr_t& bstrHeader, WMICLIINT nIter);
|
|
|
|
// Frames the XML string for NodeList info
|
|
void FrameRequestNode(_bstr_t& bstrRequest);
|
|
|
|
// Frames the XML string for commandline info
|
|
void FrameCommandLineComponents(_bstr_t& bstrCommandComponent);
|
|
|
|
// Frames the XML string for formats info
|
|
void FrameFormats(_bstr_t& bstrFormats);
|
|
|
|
// Frames the XML string for properties info
|
|
void FramePropertiesInfo(_bstr_t& bstrProperties);
|
|
|
|
// Gets the xslfile name corrsponding to the keyword passed
|
|
// from the BSTRMAP
|
|
BOOL GetFileFromKey(_bstr_t bstrkeyName, _bstr_t& bstrFileName);
|
|
|
|
// Frames the BSTR Map contains the key words and
|
|
// corresponding files from the XSL mapping file
|
|
void GetFileNameMap();
|
|
|
|
// Get the XSL file names for keywords
|
|
void GetXSLMappings(_TCHAR *pszFilePath);
|
|
|
|
// This function returns a reference to the token vector
|
|
CHARVECTOR& GetTokenVector();
|
|
|
|
inline BOOL GetCtrlHandlerError() { return m_bCtrlHandlerError; };
|
|
|
|
inline void SetCtrlHandlerError(BOOL bFlag) { m_bCtrlHandlerError = bFlag; };
|
|
|
|
// sets/resets screen buffer
|
|
BOOL ScreenBuffer ( BOOL bSet = TRUE );
|
|
|
|
// return mappings
|
|
const BSTRMAP* GetMappingsMap () const
|
|
{
|
|
return &m_bmKeyWordtoFileName;
|
|
};
|
|
};
|