//----------------------------------------------------------------------------- // // File: WMIParse.cpp // // Copyright (c) 1995-2001 Microsoft Corporation, All Rights Reserved // // Author: Kjell Swedin // Maintainer: MikeCo, JackN // //----------------------------------------------------------------------------- #include "stdafx.h" #include "string.h" #include "WMIParse.h" #include "resource.h" #include "WMIlfile.h" #include "WMIlprs.h" //***************************************************************************** // // CWMILocParser Construction // //***************************************************************************** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // Constructor for CWMILocParser. // //----------------------------------------------------------------------------- CWMILocParser::CWMILocParser() : CPULocParser(g_hDll) { m_fOptionInit = FALSE; IncrementClassCount(); } CWMILocParser::~CWMILocParser() { DEBUGONLY(AssertValid()); DecrementClassCount(); // Remove any options UnRegisterOptions(); } //***************************************************************************** // // CWMILocParser Overrides // //***************************************************************************** /////////////////////////////////////////////////////////////////////////////// // // ILocVersion // /////////////////////////////////////////////////////////////////////////////// //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // Reports the parser version information. // //----------------------------------------------------------------------------- void CWMILocParser::OnGetParserVersion( DWORD &dwMajor, DWORD &dwMinor, BOOL &fDebug) const { dwMajor = dwCurrentMajorVersion; dwMinor = dwCurrentMinorVersion; fDebug = fCurrentDebugMode; } /////////////////////////////////////////////////////////////////////////////// // // ILocParser // /////////////////////////////////////////////////////////////////////////////// //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // Initializes the parser. Registers options for the WMI parser. // //----------------------------------------------------------------------------- HRESULT CWMILocParser::OnInit( IUnknown * pUnk ) { UNREFERENCED_PARAMETER(pUnk); LTASSERT(!m_fOptionInit); RegisterOptions(); return ERROR_SUCCESS; } HRESULT CWMILocParser::OnCreateFileInstance( ILocFile *&pLocFile, FileType ft) { SCODE sc = E_INVALIDARG; pLocFile = NULL; if (ft == ftUnknown || ft == ftWMIFileType) { try { pLocFile = new CWMILocFile(NULL); sc = S_OK; } catch (const CMemoryException *) { sc = E_OUTOFMEMORY; } } return ResultFromScode(sc); } void CWMILocParser::OnGetParserInfo( ParserInfo &pi) const { LTASSERT(pi.elExtensions.GetCount() == 0); pi.aParserIds.SetSize(1); pi.aParserIds[0].m_pid = pidWMI; pi.aParserIds[0].m_pidParent = pidNone; try { LTVERIFY(pi.strDescription.LoadString(g_hDll, IDS_WMI_PARSER_DESC)); LTVERIFY(pi.strHelp.LoadString(g_hDll, IDS_OPT_HELP)); pi.elExtensions.AddTail("MOF"); } catch (CMemoryException *pe) { pi.strDescription.Empty(); pe->Delete(); } } void CWMILocParser::OnGetFileDescriptions( CEnumCallback &cb) const { CWMILocFile::GetFileDescriptions(cb); } /////////////////////////////////////////////////////////////////////////////// // // ILocStringValidation // /////////////////////////////////////////////////////////////////////////////// CVC::ValidationCode CWMILocParser::OnValidateString( const CLocTypeId <iType, const CLocTranslation &trTrans, CReporter *pReporter, const CContext &context) { CLString strContext; DEBUGONLY(ltiType.AssertValid()); DEBUGONLY(trTrans.AssertValid()); LTASSERT(pReporter != NULL); DEBUGONLY(pReporter->AssertValid()); return ::ValidateString(ltiType, trTrans.GetTargetString(), *pReporter, context.GetLocation(), context.GetContext()); } //***************************************************************************** // // Parser options. // //***************************************************************************** // Reference count the registering of options since these are global to the // parser. static INT g_nOptionRegisterCount = 0; BEGIN_LOC_UI_OPTIONS_BOOL(optsParserBools) LOC_UI_OPTIONS_BOOL_ENTRY(OPT_DISABLE_WATERMARKING, FALSE, CLocUIOption::etCheckBox, IDS_DISABLE_WATERMARKING_BOOL, IDS_DISABLE_WATERMARKING_BOOL_HELP, NULL, CLocUIOption::stUser | CLocUIOption::stOverride), END_LOC_UI_OPTIONS_BOOL(); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // Register any options for the parser. // //----------------------------------------------------------------------------- void CWMILocParser::RegisterOptions() { LTASSERT(g_nOptionRegisterCount >= 0); if (g_nOptionRegisterCount++ > 0) { // Already registered return; } SmartRef spOptSet; CLocUIOptionImpHelper OptHelp(g_hDll); spOptSet = new CLocUIOptionSetDef; spOptSet->SetGroupName(g_puid.GetName()); OptHelp.SetBools(optsParserBools, COUNTOF(optsParserBools)); OptHelp.GetOptions(spOptSet.GetInterface(), IDS_OPT_DESC, IDS_OPT_HELP); m_fOptionInit = RegisterParserOptions(spOptSet.GetInterface()); if (m_fOptionInit) { spOptSet.Extract(); } } void CWMILocParser::UnRegisterOptions() { if (m_fOptionInit) { if (--g_nOptionRegisterCount == 0) { UnRegisterParserOptions(g_puid); } } }