mirror of https://github.com/tongzx/nt5src
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.
378 lines
9.0 KiB
378 lines
9.0 KiB
// 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();
|
|
}
|
|
}
|
|
}
|