130 lines
3.2 KiB
C
130 lines
3.2 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (C) 2000-2001 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
WMIObjCooker.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
The implementation of per object cooking
|
||
|
|
||
|
History:
|
||
|
|
||
|
a-dcrews 01-Mar-00 Created
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _WMIOBJCOOKER_H_
|
||
|
#define _WMIOBJCOOKER_H_
|
||
|
|
||
|
#include <wbemint.h>
|
||
|
#include <wstlallc.h>
|
||
|
#include "CookerUtils.h"
|
||
|
#include "Cache.h"
|
||
|
|
||
|
#define WMI_DEFAULT_SAMPLE_WINDOW 2
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
|
||
|
WMISTATUS GetPropValue( CProperty* pProp, IWbemObjectAccess* pInstance, __int64* pnResult );
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// CWMISimpleObjectCooker
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CWMISimpleObjectCooker : public IWMISimpleObjectCooker
|
||
|
{
|
||
|
long m_lRef; // Reference Counter
|
||
|
HRESULT m_InitHR; // to hold the failure within the constructor
|
||
|
|
||
|
IWbemObjectAccess* m_pCookingClass; // The cooking class
|
||
|
WCHAR* m_wszClassName; // The cooking class' name
|
||
|
|
||
|
IWbemServices * m_pNamespace;
|
||
|
|
||
|
// Instance Management
|
||
|
// ===================
|
||
|
|
||
|
DWORD m_NumInst;
|
||
|
IdCache<CCookingInstance *> m_InstanceCache; // The cooking instance cache
|
||
|
|
||
|
// Cooking Property Definition Management
|
||
|
// ======================================
|
||
|
|
||
|
std::vector<CCookingProperty*, wbem_allocator<CCookingProperty*> > m_apPropertyCache;
|
||
|
DWORD m_dwPropertyCacheSize;
|
||
|
DWORD m_dwNumProperties; // The number of properties
|
||
|
|
||
|
// Private Methods
|
||
|
// ===============
|
||
|
|
||
|
WMISTATUS GetData( CCookingProperty* pProperty,
|
||
|
__int64** panRawCounter,
|
||
|
__int64** panRawBase,
|
||
|
__int64** panRawTimeStamp,
|
||
|
DWORD* pdwNumEls );
|
||
|
|
||
|
WMISTATUS UpdateSamples( CCookingInstance* pCookedInstance,DWORD dwRefreshStamp);
|
||
|
WMISTATUS CookInstance( CCookingInstance* pCookingRecord, DWORD dwRefreshStamp);
|
||
|
|
||
|
public:
|
||
|
|
||
|
CWMISimpleObjectCooker();
|
||
|
CWMISimpleObjectCooker( WCHAR* wszCookingClassName,
|
||
|
IWbemObjectAccess* pCookingClass,
|
||
|
IWbemObjectAccess* pRawClass,
|
||
|
IWbemServices * pNamespace = NULL);
|
||
|
virtual ~CWMISimpleObjectCooker();
|
||
|
|
||
|
WCHAR* GetCookingClassName(){ return m_wszClassName; }
|
||
|
HRESULT GetLastHR(){ return m_InitHR; }
|
||
|
|
||
|
WMISTATUS SetProperties( IWbemClassObject* pCookingClassObject, IWbemObjectAccess *pRawClass );
|
||
|
|
||
|
// Standard COM methods
|
||
|
// ====================
|
||
|
|
||
|
STDMETHODIMP QueryInterface(REFIID riid, void** ppv);
|
||
|
STDMETHODIMP_(ULONG) AddRef();
|
||
|
STDMETHODIMP_(ULONG) Release();
|
||
|
|
||
|
// IWMISimpleObjectCooker COM Interface
|
||
|
// ====================================
|
||
|
|
||
|
STDMETHODIMP SetClass(
|
||
|
/*[in] */ WCHAR* wszCookingClassName,
|
||
|
/*[in] */ IWbemObjectAccess *pCookingClass,
|
||
|
/*[in] */ IWbemObjectAccess *pRawClass);
|
||
|
|
||
|
STDMETHODIMP SetCookedInstance(
|
||
|
/*[in] */ IWbemObjectAccess *pCookedInstance,
|
||
|
/*[out] */ long *plId
|
||
|
);
|
||
|
|
||
|
STDMETHODIMP BeginCooking(
|
||
|
/*[in] */ long lId,
|
||
|
/*[in] */ IWbemObjectAccess *pSampleInstance,
|
||
|
/*[in] */ unsigned long dwRefresherId);
|
||
|
|
||
|
STDMETHODIMP StopCooking(
|
||
|
/*[in] */ long lId);
|
||
|
|
||
|
STDMETHODIMP Recalc(/*[in] */ unsigned long dwRefresherId);
|
||
|
|
||
|
STDMETHODIMP Remove(
|
||
|
/*[in] */ long lId);
|
||
|
|
||
|
STDMETHODIMP Reset();
|
||
|
};
|
||
|
|
||
|
#endif //_WMIOBJCOOKER_H_
|