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.
 
 
 
 
 
 

148 lines
3.6 KiB

// Connection.cpp: implementation of the CConnection class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ConnMgr.h"
#include "Connection.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// CEventRegistrationEntry
IMPLEMENT_DYNCREATE(CEventRegistrationEntry,CObject)
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CEventRegistrationEntry::CEventRegistrationEntry()
{
OutputDebugString(_T("CEventRegistrationEntry::CEventRegistrationEntry()\n"));
m_pSink = NULL;
m_bRegistered = FALSE;
m_sQuery = _T("");
}
CEventRegistrationEntry::CEventRegistrationEntry(CString sQuery, IWbemObjectSink* pSink)
{
OutputDebugString(_T("CEventRegistrationEntry::CEventRegistrationEntry(CString, IWbemObjectSink*)\n"));
m_pSink = pSink;
m_pSink->AddRef();
m_sQuery = sQuery;
m_bRegistered = FALSE;
if (m_sQuery == IDS_STRING_HMEVENT_QUERY)
{
m_bsClassName = SysAllocString(L"HMEvent");
m_eType = HMEvent;
}
else if (m_sQuery == IDS_STRING_HMMACHSTATUS_QUERY)
{
m_bsClassName = SysAllocString(L"HMMachStatus");
m_eType = HMMachStatus;
}
else if( m_sQuery == IDS_STRING_HMCATSTATUS_QUERY)
{
m_bsClassName = SysAllocString(L"HMCatStatus");
m_eType = HMCatStatus;
}
else if( m_sQuery == IDS_STRING_HMSYSTEMSTATUS_QUERY)
{
m_bsClassName = SysAllocString(L"Microsoft_HMSystemStatus");
m_eType = HMSystemStatus;
}
else if( m_sQuery == IDS_STRING_HMCONFIGCREATE_QUERY)
{
m_bsClassName = NULL;
m_eType = HMConfig;
}
else if( m_sQuery == IDS_STRING_HMCONFIGDELETE_QUERY)
{
m_bsClassName = NULL;
m_eType = HMConfig;
}
else
{
m_eType = AsyncQuery;
m_bsClassName = NULL;
}
}
CEventRegistrationEntry::~CEventRegistrationEntry()
{
OutputDebugString(_T("CEventRegistrationEntry::~CEventRegistrationEntry()\n"));
if (m_pSink)
m_pSink->Release();
m_pSink = NULL;
SysFreeString(m_bsClassName);
}
HRESULT CEventRegistrationEntry::NotifyConsole(long lFlag, HRESULT hr)
{
OutputDebugString(_T("CEventRegistrationEntry::NotifyConsole()\n"));
ASSERT(m_pSink);
// other temporary data
HRESULT hResult = hr;
BSTR strParam = NULL;
IWbemClassObject* pObjParam = NULL;
HRESULT hRes = m_pSink->SetStatus(lFlag, hResult, strParam, pObjParam);
return hRes;
}
HRESULT CEventRegistrationEntry::SendInstances(IWbemServices*& pServices, long lFlag)
{
OutputDebugString(_T("CEventRegistrationEntry::SendInstances()\n"));
ASSERT(pServices);
HRESULT hRes = S_OK;
if(m_eType == HMEvent || m_eType == HMSystemStatus)
{
OutputDebugString(_T("\tSending HMSystemStatus instances...\n"));
OutputDebugString(_T("\t"));
OutputDebugString(m_bsClassName);
OutputDebugString(_T("\n"));
if (lFlag == 2)
hRes = pServices->CreateInstanceEnumAsync(m_bsClassName, WBEM_FLAG_SHALLOW, NULL, m_pSink);
return hRes;
}
else if( m_eType == AsyncQuery )
{
if (lFlag == 2)
{
OutputDebugString(_T("\tExecuting async query for instances...\n"));
OutputDebugString(_T("\t"));
OutputDebugString(m_sQuery);
OutputDebugString(_T("\n"));
BSTR bsQuery = m_sQuery.AllocSysString();
BSTR bsLanguage = SysAllocString(_T("WQL"));
hRes = pServices->ExecQueryAsync(bsLanguage, bsQuery, WBEM_FLAG_BIDIRECTIONAL, NULL, m_pSink);
SysFreeString(bsQuery);
SysFreeString(bsLanguage);
}
return hRes;
}
hRes = pServices->CreateInstanceEnumAsync(m_bsClassName, WBEM_FLAG_SHALLOW, NULL, m_pSink);
return hRes;
}