// File System.inl // // Copyright (c) 2000 Microsoft Corporation // // 03-15-00 v-marfin : bug 60291 // Fix for HM Version display. Read properties for Major and minor version // as strings instead of ints. // 03/16/00 v-marfin : bug 60291 (Additional) : Added buildversion and hotfix version to the // healthmon version string. #ifdef _DEBUG #define new DEBUG_NEW #endif ///////////////////////////////////////////////////////////////////////////// // WMI Operations ///////////////////////////////////////////////////////////////////////////// inline HRESULT CSystem::Connect() { TRACEX(_T("CSystem::EnumerateChildren\n")); if( m_pSListener == NULL ) { m_pSListener = new CSystemConfigListener; m_pSListener->SetObjectPtr(this); m_pSListener->Create(); } if( m_pCreationListener == NULL ) { m_pCreationListener = new CConfigCreationListener; m_pCreationListener->SetObjectPtr(this); m_pCreationListener->Create(); } if( m_pDeletionListener == NULL ) { m_pDeletionListener = new CConfigDeletionListener; m_pDeletionListener->SetObjectPtr(this); m_pDeletionListener->Create(); } HRESULT hr = S_OK; CString sQuery = IDS_STRING_SYSTEMCONFIG_QUERY; IWbemObjectSink* pSink = m_pSListener->GetSink(); if( !CHECKHRESULT(hr = CnxExecQueryAsync(GetSystemName(),sQuery,pSink)) ) { TRACE(_T("FAILED : CConnectionManager::RegisterEventNotification failed!\n")); } return hr; } inline HRESULT CSystem::EnumerateChildren() { TRACEX(_T("CSystem::EnumerateChildren\n")); if( m_pDGListener == NULL ) { m_pDGListener = new CDataGroupConfigListener; m_pDGListener->SetObjectPtr(this); m_pDGListener->Create(); } else { IncrementActiveSinkCount(); } HRESULT hr = S_OK; CString sQuery; sQuery.Format(IDS_STRING_S2DG_ASSOC_QUERY,GetGuid()); IWbemObjectSink* pSink = m_pDGListener->GetSink(); if( !CHECKHRESULT(hr = CnxExecQueryAsync(GetSystemName(),sQuery,pSink)) ) { TRACE(_T("FAILED : CConnectionManager::RegisterEventNotification failed!\n")); } return hr; } inline CString CSystem::GetObjectPath() { TRACEX(_T("CSystem::GetObjectPath\n")); return IDS_STRING_MOF_SYSTEMOBJECTPATH; } inline CString CSystem::GetStatusObjectPath() { TRACEX(_T("CSystem::GetStatusObjectPath\n")); return IDS_STRING_MOF_SYSTEMSTATUSOBJECTPATH; } inline CHMEvent* CSystem::GetStatusClassObject() { TRACEX(_T("CSystem::GetStatusClassObject\n")); CHMEvent* pClassObject = new CHMSystemStatus; pClassObject->SetMachineName(GetSystemName()); if( ! CHECKHRESULT(pClassObject->GetObject(GetStatusObjectPath())) ) { delete pClassObject; return NULL; } pClassObject->GetAllProperties(); return pClassObject; } inline void CSystem::GetWMIVersion(CString& sVersion) { TRACEX(_T("CSystem::GetWMIVersion\n")); sVersion.Empty(); CWbemClassObject IdObject; CString sNamespace = _T("\\\\") + GetSystemName() + _T("\\root\\cimv2"); IdObject.SetNamespace(sNamespace); HRESULT hr = IdObject.GetObject(_T("__CIMOMIdentification")); if( ! CHECKHRESULT(hr) ) { return; } IdObject.GetProperty(_T("VersionUsedToCreateDB"),sVersion); IdObject.Destroy(); IdObject.SetNamespace(sNamespace); hr = IdObject.GetObject(_T("Win32_WMISetting=@")); if( ! CHECKHRESULT(hr) ) { return; } CString sBuildVersion; IdObject.GetProperty(_T("BuildVersion"),sBuildVersion); sVersion = sVersion.Left(5); sVersion += sBuildVersion; } inline void CSystem::GetHMAgentVersion(CString& sVersion) { TRACEX(_T("CSystem::GetHMAgentVersion\n")); sVersion.Empty(); CWbemClassObject HMVersionObject; CString sNamespace; sNamespace.Format(IDS_STRING_HEALTHMON_ROOT, GetSystemName()); HMVersionObject.SetNamespace(sNamespace); HRESULT hr = HMVersionObject.GetObject(_T("Microsoft_HMVersion=@")); if( ! CHECKHRESULT(hr) ) { return; } // v-marfin : bug 60291 // Fix for HM Version display. Read properties for Major and minor version // as strings instead of ints. /*int iMajorVersion = 0; int iMinorVersion = 0; HMVersionObject.GetProperty(_T("iMajorVersion"),iMajorVersion); HMVersionObject.GetProperty(_T("iMinorVersion"),iMinorVersion); sVersion.Format(_T("%d.%d"),iMajorVersion,iMinorVersion);*/ // v-marfin : bug 60291 (Additional) Added build number and hotfix number to version string CString sMajorVersion = _T("0"); CString sMinorVersion = _T("0"); CString sBuildVersion = _T("0"); CString sHotfixVersion = _T("0"); HMVersionObject.GetProperty(_T("MajorVersion"),sMajorVersion); HMVersionObject.GetProperty(_T("MinorVersion"),sMinorVersion); HMVersionObject.GetProperty(_T("BuildVersion"),sBuildVersion); HMVersionObject.GetProperty(_T("HotfixVersion"),sHotfixVersion); sVersion.Format(_T("%s.%s.%s.%s"),sMajorVersion,sMinorVersion,sBuildVersion,sHotfixVersion); } inline BOOL CSystem::GetComputerSystemInfo(CString& sDomain, CString& sProcessor) { TRACEX(_T("CSystem::GetComputerSystemInfo\n")); // query for the Win32_ComputerSystem class instances CWbemClassObject SystemInfo; SystemInfo.SetNamespace(_T("\\\\") + GetSystemName() + _T("\\root\\cimv2")); if( ! CHECKHRESULT(SystemInfo.Create(GetSystemName())) ) { return FALSE; } CString sTemp; sTemp.Format(_T("Win32_ComputerSystem.Name=\"%s\""),GetSystemName()); if( ! CHECKHRESULT(SystemInfo.GetObject(sTemp)) ) { // return; return FALSE; // v-marfin 62501 } // read in the Domain SystemInfo.GetProperty(_T("Domain"),sDomain); // read in the SystemType SystemInfo.GetProperty(_T("SystemType"),sProcessor); return TRUE; // v-marfin 62501 } inline void CSystem::GetOperatingSystemInfo(CString& sOSInfo) { TRACEX(_T("CSystem::GetOperatingSystemInfo\n")); // query for the Win32_OperatingSystem class instances CWbemClassObject SystemInfo; SystemInfo.SetNamespace(_T("\\\\") + GetSystemName() + _T("\\root\\cimv2")); CString sTemp = _T("Win32_OperatingSystem"); BSTR bsTemp = sTemp.AllocSysString(); if( ! CHECKHRESULT(SystemInfo.CreateEnumerator(bsTemp)) ) { ::SysFreeString(bsTemp); return; } ::SysFreeString(bsTemp); ULONG ulReturned = 0L; if( SystemInfo.GetNextObject(ulReturned) != S_OK ) { return; } // read in the caption CString sCaption; SystemInfo.GetProperty(_T("Caption"),sCaption); // read in the BuildNumber CString sBuildNumber; SystemInfo.GetProperty(_T("BuildNumber"),sBuildNumber); // read in the BuildType CString sBuildType; SystemInfo.GetProperty(_T("BuildType"),sBuildType); // read in the CSDVersion CString sCSDVersion; SystemInfo.GetProperty(_T("CSDVersion"),sCSDVersion); sOSInfo.Format(IDS_STRING_SYSINFO_FORMAT,sCaption,sBuildNumber,sBuildType,sCSDVersion); } ///////////////////////////////////////////////////////////////////////////// // Clipboard Operations ///////////////////////////////////////////////////////////////////////////// inline bool CSystem::Cut() { TRACEX(_T("CSystem::Cut\n")); return false; } inline bool CSystem::Copy() { TRACEX(_T("CSystem::Copy\n")); return false; } inline bool CSystem::Paste() { TRACEX(_T("CSystem::Paste\n")); return false; } ///////////////////////////////////////////////////////////////////////////// // Operations ///////////////////////////////////////////////////////////////////////////// inline void CSystem::Serialize(CArchive& ar) { TRACEX(_T("CSystem::Serialize\n")); CHMObject::Serialize(ar); if( ar.IsStoring() ) { ar << GetSystemName(); } else { CString sName; ar >> sName; SetSystemName(sName); // ping the machine first...adds the system to the lookup table in ConnMgr IWbemServices* pIServices = NULL; BOOL bAvail; HRESULT hr = CnxGetConnection(sName,pIServices,bAvail); if( pIServices ) { pIServices->Release(); } //-------------------------- // Caller will inspect system name to see if serialize was successful // v-marfin 62501 if( ! CHECKHRESULT(hr) ) { CString sFailed = GetSystemName() + FAILED_STRING; SetSystemName(sFailed); return; } //-------------------------- } } ///////////////////////////////////////////////////////////////////////////// // Scope Item Members ///////////////////////////////////////////////////////////////////////////// inline CScopePaneItem* CSystem::CreateScopeItem() { TRACEX(_T("CSystem::CreateScopeItem\n")); CSystemScopeItem * pNewItem = new CSystemScopeItem; pNewItem->SetObjectPtr(this); return pNewItem; } ///////////////////////////////////////////////////////////////////////////// // New Child Creation Members ///////////////////////////////////////////////////////////////////////////// inline void CSystem::CreateNewChildDataGroup() { TRACEX(_T("CSystem::CreateNewChildDataGroup\n")); CString sName = GetUniqueChildName(IDS_STRING_DATA_GROUP_FMT); CDataGroup* pNewGroup = new CDataGroup; pNewGroup->SetName(sName); CreateChild(pNewGroup,IDS_STRING_MOF_HMDG_CONFIG,IDS_STRING_MOF_HMC2C_ASSOC); if( pNewGroup->GetScopeItemCount() ) { CScopePaneItem* pItem = pNewGroup->GetScopeItem(0); if( pItem ) { pItem->SelectItem(); pItem->InvokePropertySheet(); } } }