windows-nt/Source/XPSP1/NT/admin/hmonitor/snapin/connectionmanager.h
2020-09-26 16:20:57 +08:00

166 lines
4.3 KiB
C++

// ConnectionManager.h: interface for the CConnectionManager class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CONNECTIONMANAGER_H__F0E5AFBD_0204_11D2_8355_0000F87A3912__INCLUDED_)
#define AFX_CONNECTIONMANAGER_H__F0E5AFBD_0204_11D2_8355_0000F87A3912__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <ConnMgr.h>
// error reporting defines
#define _ERRORDESCLEN _MAX_PATH*4
#define _ERRORNAMELEN _MAX_PATH
#define _FACILITYLEN _MAX_PATH
//////////////////////////////////////////////////////////////////////
// class CMarshalledConnection
//////////////////////////////////////////////////////////////////////
class CMarshalledConnection
{
// Constructors
public:
CMarshalledConnection();
// Operations
public:
HRESULT Marshal(IConnectionManager* pIConMgr);
HRESULT UnMarshal();
IConnectionManager* GetConnection();
// Attributes
protected:
IConnectionManager* m_pIMarshalledConnectionManager;
LPSTREAM m_lpMarshalStream;
};
//////////////////////////////////////////////////////////////////////
// class CConnectionManager
//////////////////////////////////////////////////////////////////////
class CConnectionManager : public CObject
{
DECLARE_DYNCREATE(CConnectionManager)
// Constructors
public:
CConnectionManager();
// Destructor
public:
virtual ~CConnectionManager();
// Create/Destroy
public:
BOOL Create();
void Destroy();
// Connection Operations
public:
HRESULT GetConnection(const CString& sMachineName, IWbemServices*& pIWbemServices, BOOL& bAvailable );
HRESULT ConnectToNamespace(const CString& sNamespace, IWbemServices*& pIWbemServices);
HRESULT RemoveConnection(const CString& sMachineName, IWbemObjectSink* pSink);
// Query Operations
public:
HRESULT ExecQueryAsync(const CString& sMachineName, const CString& sQuery, IWbemObjectSink*& pSink);
// Event Operations
public:
HRESULT RegisterEventNotification(const CString& sMachineName, const CString& sQuery, IWbemObjectSink*& pSink);
// Error Display Operations
public:
void DisplayErrorMsgBox(HRESULT hr, const CString& sMachineName);
void GetErrorString(HRESULT hr, const CString& sMachineName, CString& sErrorText);
// Marshalling Operations
public:
HRESULT MarshalCnxMgr();
HRESULT UnMarshalCnxMgr();
void CleanUpMarshalCnxMgr();
// Implementation Operations
protected:
void DecodeHResult(HRESULT hr, LPTSTR pszFacility, LPTSTR pszErrorName, LPTSTR pszErrorDesc);
void HandleConnMgrException(HRESULT hr);
// Implementation Attributes
protected:
IConnectionManager* m_pIConnectionManager;
CMap<DWORD,DWORD,CMarshalledConnection*,CMarshalledConnection*> m_MarshalMap;
CTypedPtrList<CPtrList,CMarshalledConnection*> m_MarshalStack;
};
extern CConnectionManager theCnxManager;
inline HRESULT CnxGetConnection(const CString& sMachineName, IWbemServices*& pIWbemServices, BOOL& bAvailable)
{
return theCnxManager.GetConnection(sMachineName,pIWbemServices,bAvailable);
}
inline HRESULT CnxConnectToNamespace(const CString& sNamespace, IWbemServices*& pIWbemServices)
{
return theCnxManager.ConnectToNamespace(sNamespace,pIWbemServices);
}
inline HRESULT CnxRemoveConnection(const CString& sMachineName, IWbemObjectSink* pSink)
{
return theCnxManager.RemoveConnection(sMachineName,pSink);
}
inline BOOL CnxCreate()
{
return theCnxManager.Create();
}
inline void CnxDestroy()
{
theCnxManager.Destroy();
}
inline HRESULT CnxExecQueryAsync(const CString& sMachineName, const CString& sQuery, IWbemObjectSink*& pSink)
{
return theCnxManager.ExecQueryAsync(sMachineName,sQuery,pSink);
}
inline HRESULT CnxRegisterEventNotification(const CString& sMachineName, const CString& sQuery, IWbemObjectSink*& pSink)
{
return theCnxManager.RegisterEventNotification(sMachineName,sQuery,pSink);
}
inline void CnxPropertyPageInit()
{
theCnxManager.MarshalCnxMgr();
}
inline void CnxPropertyPageCreate()
{
theCnxManager.UnMarshalCnxMgr();
}
inline void CnxPropertyPageDestroy()
{
theCnxManager.CleanUpMarshalCnxMgr();
}
inline void CnxDisplayErrorMsgBox(HRESULT hr, const CString& sMachineName)
{
theCnxManager.DisplayErrorMsgBox(hr,sMachineName);
}
inline void CnxGetErrorString(HRESULT hr, const CString& sMachineName, CString& sErrorText)
{
theCnxManager.GetErrorString(hr,sMachineName,sErrorText);
}
#endif // !defined(AFX_CONNECTIONMANAGER_H__F0E5AFBD_0204_11D2_8355_0000F87A3912__INCLUDED_)