windows-nt/Source/XPSP1/NT/admin/wmi/wbem/winmgmt/wmicooker/wmiobjcooker.h
2020-09-26 16:20:57 +08:00

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_