Leaked source code of windows server 2003
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.
 
 
 
 
 
 

123 lines
3.4 KiB

/*++
Copyright (C) 2000-2001 Microsoft Corporation
Module Name:
RefreshCooker.h
Abstract:
The implementation of the refresher
History:
a-dcrews 01-Mar-00 Created
--*/
#ifndef _REFRESHCOOKER_H_
#define _REFRESHCOOKER_H_
#include "Cache.h"
#include "WMIObjCooker.h"
#define WMI_COOKED_ENUM_MASK 0x70000000
typedef CObjRecord<CWMISimpleObjectCooker> TObjectCookerRec;
//
// a Refresher in the Hi-perf world
// is a container of Enumerators and Objects-By-Path
// Since this Refresher is proxy for the Raw Refresher, it holds the Raw one as well
// All the operations on this Refresher translates into enumerations
// of the "arrays" of Enumerators and Objects, and then invocation the the distinct
// refresh-yourself methods.
// This class offers routine book-keeping function for adding and removing
// objects/enumerators from the internal "arrays"
//
///////////////////////////////////////////////////////////////////////
class CRefresher : public IWMIRefreshableCooker, public IWbemRefresher
{
bool m_bOK; // Creation status indicator
long m_lRef; // Object refrence counter
CCache<CWMISimpleObjectCooker, TObjectCookerRec> m_CookingClassCache; // The cooking class cache
IWbemRefresher* m_pRefresher;
IWbemConfigureRefresher* m_pConfig;
CEnumeratorCache m_EnumCache;
DWORD m_dwRefreshId;
WMISTATUS SearchCookingClassCache( WCHAR* wszCookingClass,
CWMISimpleObjectCooker* & ppObjectCooker );
WMISTATUS AddRawInstance( IWbemServices* pNamespace,
IWbemContext * pContext,
IWbemObjectAccess* pCookingInst,
IWbemObjectAccess** ppRawInst );
WMISTATUS AddRawEnum( IWbemServices* pNamespace,
IWbemContext * pContext,
WCHAR * wszRawClassName,
IWbemHiPerfEnum** ppRawEnum,
long* plID );
WMISTATUS CreateObjectCooker( WCHAR* wszCookingClassName,
IWbemObjectAccess* pCookingAccess,
IWbemObjectAccess* pRawAccess,
CWMISimpleObjectCooker** ppObjectCooker,
IWbemServices * pNamespace = NULL);
public:
CRefresher();
virtual ~CRefresher();
// Non-interface methods
// =====================
bool IsOK(){ return m_bOK; }
// Standard COM methods
// ====================
STDMETHODIMP QueryInterface(REFIID riid, void** ppv);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// IWMIRefreshableCooker methods
// =============================
STDMETHODIMP AddInstance(
/*[in] */ IWbemServices* pNamespace,
/*[in] */ IWbemContext * pCtx,
/*[in] */ IWbemObjectAccess* pCookingClass,
/*[in] */ IWbemObjectAccess* pRefreshableRawInstance,
/*[out] */ IWbemObjectAccess** ppRefreshableInstance,
/*[out] */ long* plId
);
STDMETHODIMP AddEnum(
/*[in] */ IWbemServices* pNamespace,
/*[in] */ IWbemContext * pCtx,
/*[in,string] */ LPCWSTR szCookingClass,
/*[in] */ IWbemHiPerfEnum* pRefreshableEnum,
/*[out] */ long* plId
);
STDMETHODIMP Remove(
/*[in] */ long lId
);
STDMETHODIMP Refresh();
// IWbemRefresher methods
// ======================
STDMETHODIMP Refresh( /* [in] */ long lFlags );
};
#endif //_REFRESHCOOKER_H_