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.
132 lines
5.6 KiB
132 lines
5.6 KiB
//=============================================================================
|
|
// This file defines the classes for live WMI data access (which are subclassed
|
|
// from the abstract base classes in wmiabstraction.h).
|
|
//=============================================================================
|
|
|
|
#pragma once
|
|
#include "wmiabstraction.h"
|
|
#include "wbemcli.h"
|
|
|
|
// Set a timeout value for WMI queries of 20 second. No single WMI operation
|
|
// should take longer - if it does, we should assume it isn't coming back.
|
|
|
|
#define TIMEOUT 20000
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// The CWMILiveObject implements a CWMIObject using a real WMI object. It
|
|
// can be created with either a IWbemClassObject pointer, or a services
|
|
// pointer and a path.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class CWMILiveObject : public CWMIObject
|
|
{
|
|
public:
|
|
CWMILiveObject();
|
|
virtual ~CWMILiveObject();
|
|
|
|
// Functions inherited from the base class:
|
|
|
|
HRESULT GetValue(LPCTSTR szProperty, VARIANT * pvarValue);
|
|
HRESULT GetValueString(LPCTSTR szProperty, CString * pstrValue);
|
|
HRESULT GetValueDWORD(LPCTSTR szProperty, DWORD * pdwValue);
|
|
HRESULT GetValueTime(LPCTSTR szProperty, SYSTEMTIME * psystimeValue);
|
|
HRESULT GetValueDoubleFloat(LPCTSTR szProperty, double * pdblValue);
|
|
HRESULT GetValueValueMap(LPCTSTR szProperty, CString * pstrValue);
|
|
|
|
// Functions specific to this subclass:
|
|
//
|
|
// Note - Create with an object pointer will addref() the pointer:
|
|
|
|
HRESULT Create(IWbemServices * pServices, IWbemClassObject * pObject);
|
|
HRESULT Create(IWbemServices * pServices, LPCTSTR szObjectPath);
|
|
|
|
private:
|
|
IWbemClassObject * m_pObject;
|
|
IWbemServices * m_pServices;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// The CWMILiveObjectCollection implements a collection of live WMI objects
|
|
// using a WMI enumerator. This collection can be created from an existing
|
|
// IEnumWbemClassObject pointer, from a WQL statement or from a WMI class name.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class CWMILiveObjectCollection : public CWMIObjectCollection
|
|
{
|
|
public:
|
|
CWMILiveObjectCollection(IWbemServices * pServices);
|
|
virtual ~CWMILiveObjectCollection();
|
|
|
|
// Functions inherited from the base class:
|
|
|
|
HRESULT Create(LPCTSTR szClass, LPCTSTR szProperties = NULL);
|
|
HRESULT GetNext(CWMIObject ** ppObject);
|
|
|
|
// Functions specific to this subclass:
|
|
//
|
|
// Note - Create with an enum pointer will addref() the pointer:
|
|
|
|
public:
|
|
HRESULT Create(IEnumWbemClassObject * pEnum);
|
|
HRESULT CreateWQL(LPCTSTR szQuery);
|
|
|
|
private:
|
|
IEnumWbemClassObject * m_pEnum;
|
|
IWbemServices * m_pServices;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// The CWMILiveHelper function encapsulates a WMI connection (which might be to
|
|
// XML).
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class CWMILiveHelper : public CWMIHelper
|
|
{
|
|
public:
|
|
CWMILiveHelper();
|
|
~CWMILiveHelper();
|
|
|
|
HRESULT Enumerate(LPCTSTR szClass, CWMIObjectCollection ** ppCollection, LPCTSTR szProperties = NULL);
|
|
HRESULT WQLQuery(LPCTSTR szQuery, CWMIObjectCollection ** ppCollection);
|
|
HRESULT NewNamespace(LPCTSTR szNamespace, CWMIHelper **ppNewHelper);
|
|
HRESULT GetNamespace(CString * pstrNamespace);
|
|
HRESULT GetObject(LPCTSTR szObjectPath, CWMIObject ** ppObject);
|
|
|
|
public:
|
|
// Functions specific to this subclass:
|
|
|
|
HRESULT Create(LPCTSTR szMachine = NULL, LPCTSTR szNamespace = NULL);
|
|
|
|
// Check the value map for a given value. This is static since the object
|
|
// must be able to call it and there is no back pointer to this class.
|
|
|
|
static HRESULT CheckValueMap(IWbemServices * pServices, const CString& strClass, const CString& strProperty, const CString& strVal, CString &strResult);
|
|
|
|
// These functions are specific to version 5.0 refreshes.
|
|
|
|
BOOL Version5ResetClass(const CString & strClass, GATH_FIELD * pConstraints);
|
|
BOOL Version5EnumClass(const CString & strClass, GATH_FIELD * pConstraints);
|
|
|
|
BOOL Version5QueryValueDWORD(const CString & strClass, const CString & strProperty, DWORD & dwResult, CString & strMessage);
|
|
BOOL Version5QueryValueDateTime(const CString & strClass, const CString & strProperty, COleDateTime & datetime, CString & strMessage);
|
|
BOOL Version5QueryValueDoubleFloat(const CString & strClass, const CString & strProperty, double & dblResult, CString & strMessage);
|
|
BOOL Version5QueryValue(const CString & strClass, const CString & strProperty, CString & strResult);
|
|
|
|
CMSIEnumerator * Version5GetEnumObject(const CString & strClass, const GATH_FIELD * pConstraints = NULL);
|
|
CMSIObject * Version5GetObject(const CString & strClass, const GATH_FIELD * pConstraints, CString * pstrLabel = NULL);
|
|
void Version5RemoveObject(const CString & strClass);
|
|
IWbemServices * Version5GetWBEMService(CString * pstrNamespace = NULL);
|
|
BOOL Version5EvaluateFilter(IWbemClassObject * pObject, const GATH_FIELD * pConstraints);
|
|
void Version5EvaluateJoin(const CString & strClass, IWbemClassObject * pObject, const GATH_FIELD * pConstraints);
|
|
BOOL Version5IsDependencyJoin(const GATH_FIELD * pConstraints);
|
|
void Version5EvaluateDependencyJoin(IWbemClassObject * pObject);
|
|
void Version5RemoveEnumObject(const CString & strClass);
|
|
void Version5ClearCache();
|
|
HRESULT Version5CheckValueMap(const CString& strClass, const CString& strProperty, const CString& strVal, CString &strResult);
|
|
|
|
private:
|
|
HRESULT m_hrError;
|
|
CString m_strMachine;
|
|
CString m_strNamespace;
|
|
IWbemServices * m_pServices;
|
|
};
|