|
|
/*++
Copyright (C) 1995-2001 Microsoft Corporation
Module Name:
IMPDYN.H
Abstract:
Declares the various generic provider classes.
History:
a-davj 27-Sep-95 Created.
--*/
#ifndef _IMPDYN_H_
#define _IMPDYN_H_
#include "indexcac.h"
#include "cvariant.h"
typedef enum {REFRESH,UPDATE} FUNCTYPE;
typedef struct SET_STATUS{ DWORD dwType; DWORD dwSize; DWORD dwResult; } STATSET, * PSETSTAT;
#ifndef PPVOID
typedef LPVOID * PPVOID; #endif //PPVOID
//***************************************************************************
//
// CLASS NAME:
//
// CEnumInfo
//
// DESCRIPTION:
//
// base class of various collection objects used to keep track of instances
// for enumeration.
//
//***************************************************************************
class CEnumInfo : public CObject{ public: CEnumInfo(){m_cRef = 1;}; virtual ~CEnumInfo(){return;}; long AddRef(void); long Release(void); private: long m_cRef; //Object reference count
};
//***************************************************************************
//
// CLASS NAME:
//
// CImpDyn
//
// DESCRIPTION:
//
// This is the base class of the instance providers. It does quite a lot
// though the actual getting and putting of data is overriden by derived
// classes.
//
//***************************************************************************
class CImpDyn : public IWbemServices, public IWbemProviderInit { protected: long m_cRef; //Object reference count
IWbemServices * m_pGateway; WCHAR wcCLSID[42]; IWbemContext * m_pCtx; public: CImpDyn(); virtual ~CImpDyn(void);
SCODE ReturnAndSetObj(SCODE sc, IWbemCallResult FAR* FAR* ppCallResult); virtual SCODE MakeEnum(IWbemClassObject * pClass, CProvObj & ProvObj, CEnumInfo ** ppInfo) { return E_NOTIMPL;}; virtual SCODE GetKey(CEnumInfo * pInfo, int iIndex, LPWSTR * ppKey) {return E_NOTIMPL;};
BSTR GetKeyName(IWbemClassObject FAR* pClassInt); virtual int iGetMinTokens(void) = 0; virtual SCODE RefreshProperty(long lFlags, IWbemClassObject FAR * pClassInt, BSTR PropName,CProvObj & ProvObj,CObject * pPackage, CVariant * pVar, BOOL bTesterDetails) = 0; virtual SCODE UpdateProperty(long lFlags, IWbemClassObject FAR * pClassInt, BSTR PropName,CProvObj & ProvObj,CObject * pPackage, CVariant * pVar) = 0; virtual SCODE StartBatch(long lFlags, IWbemClassObject FAR * pClassInt,CObject **pObj,BOOL bGet); virtual void EndBatch(long lFlags, IWbemClassObject FAR * pClassInt,CObject *pObj,BOOL bGet); SCODE EnumPropDoFunc( long lFlags, IWbemClassObject FAR* pInstance, FUNCTYPE FuncType, LPWSTR pwcKey = NULL, CIndexCache * pCache = NULL, IWbemClassObject * pClass = NULL); SCODE CImpDyn::GetAttString(IWbemClassObject FAR* pClassInt, LPWSTR pPropName, LPWSTR pAttName, LPWSTR * ppResult, CIndexCache * pCache = NULL, int iIndex = -1); SCODE GetByKey( BSTR ClassRef, long lFlags, SAFEARRAY FAR* FAR* pKeyNames, SAFEARRAY FAR* FAR* pKeyValues, IWbemClassObject FAR* FAR* pObj); SCODE CreateInst( IWbemServices * pGateway, LPWSTR pwcClass, LPWSTR pKey, IWbemClassObject ** pNewInst, LPWSTR pwcKeyName = NULL, CIndexCache * pCache = NULL, IWbemContext *pCtx = NULL); virtual SCODE MethodAsync(BSTR ObjectPath, BSTR MethodName, long lFlags, IWbemContext* pCtx, IWbemClassObject* pInParams, IWbemObjectSink* pSink){return WBEM_E_NOT_SUPPORTED;};
virtual SCODE MergeStrings(LPWSTR *ppOut,LPWSTR pClassContext,LPWSTR pKey,LPWSTR pPropContext);
virtual bool NeedsEscapes(){return false;}; // so far, on reg prov needs this
STDMETHOD_(SCODE, RefreshInstance)(THIS_ long lFlags, IWbemClassObject FAR* pObj);
//Non-delegating object IUnknown
STDMETHODIMP QueryInterface(REFIID, PPVOID); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
/* IWbemProviderInit methods */ HRESULT STDMETHODCALLTYPE Initialize(LPWSTR wszUser, long lFlags, LPWSTR wszNamespace, LPWSTR wszLocale, IWbemServices* pNamespace, IWbemContext* pContext, IWbemProviderInitSink* pSink);
/* IWbemServices methods */
HRESULT STDMETHODCALLTYPE OpenNamespace( /* [in] */ const BSTR Namespace, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemServices __RPC_FAR *__RPC_FAR *ppWorkingNamespace, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppResult){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE CancelAsyncCall( /* [in] */ IWbemObjectSink __RPC_FAR *pSink){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE QueryObjectSink( /* [in] */ long lFlags, /* [out] */ IWbemObjectSink __RPC_FAR *__RPC_FAR *ppResponseHandler){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE GetObject( /* [in] */ const BSTR ObjectPath, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppObject, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult); HRESULT STDMETHODCALLTYPE GetObjectAsync( /* [in] */ const BSTR ObjectPath, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); HRESULT STDMETHODCALLTYPE PutClass( /* [in] */ IWbemClassObject __RPC_FAR *pObject, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE PutClassAsync( /* [in] */ IWbemClassObject __RPC_FAR *pObject, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE DeleteClass( /* [in] */ const BSTR Class, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE DeleteClassAsync( /* [in] */ const BSTR Class, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE CreateClassEnum( /* [in] */ const BSTR Superclass, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE CreateClassEnumAsync( /* [in] */ const BSTR Superclass, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); HRESULT STDMETHODCALLTYPE PutInstance( /* [in] */ IWbemClassObject __RPC_FAR *pInst, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE PutInstanceAsync( /* [in] */ IWbemClassObject __RPC_FAR *pInst, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); HRESULT STDMETHODCALLTYPE DeleteInstance( /* [in] */ const BSTR ObjectPath, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE DeleteInstanceAsync( /* [in] */ const BSTR ObjectPath, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE CreateInstanceEnum( /* [in] */ const BSTR Class, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum); HRESULT STDMETHODCALLTYPE CreateInstanceEnumAsync( /* [in] */ const BSTR Class, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); HRESULT STDMETHODCALLTYPE ExecQuery( /* [in] */ const BSTR QueryLanguage, /* [in] */ const BSTR Query, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE ExecQueryAsync( /* [in] */ const BSTR QueryLanguage, /* [in] */ const BSTR Query, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE ExecNotificationQuery( /* [in] */ const BSTR QueryLanguage, /* [in] */ const BSTR Query, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE ExecNotificationQueryAsync( /* [in] */ const BSTR QueryLanguage, /* [in] */ const BSTR Query, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE ExecMethod( /* [in] */ const BSTR ObjectPath, /* [in] */ const BSTR MethodName, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemClassObject __RPC_FAR *pInParams, /* [unique][in][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppOutParams, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult) {return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE ExecMethodAsync( /* [in] */ const BSTR ObjectPath, /* [in] */ const BSTR MethodName, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemClassObject __RPC_FAR *pInParams, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); };
typedef CImpDyn *PCImpDyn;
//***************************************************************************
//
// CLASS NAME:
//
// CImpDynProp
//
// DESCRIPTION:
//
// This is the base class of the property providers. It does quite a lot
// though the actual getting and putting of data is overriden by derived
// classes.
//
//***************************************************************************
class CImpDynProp : public IWbemPropertyProvider { protected: long m_cRef; //Object reference count
WCHAR wcCLSID[42]; CImpDyn * m_pImpDynProv; WCHAR * BuildString(BSTR ClassMapping, BSTR InstMapping, BSTR PropMapping); public: CImpDynProp(); virtual ~CImpDynProp(void); virtual bool NeedsEscapes(){return false;}; // so far, on reg prov needs this
//Non-delegating object IUnknown
STDMETHODIMP QueryInterface(REFIID, PPVOID); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
/* IWbemPropertyProvider methods */
virtual HRESULT STDMETHODCALLTYPE GetProperty( long lFlags, const BSTR Locale, const BSTR ClassMapping, const BSTR InstMapping, const BSTR PropMapping, VARIANT *pvValue); virtual HRESULT STDMETHODCALLTYPE PutProperty( long lFlags, const BSTR Locale, /* [in] */ const BSTR ClassMapping, /* [in] */ const BSTR InstMapping, /* [in] */ const BSTR PropMapping, /* [in] */ const VARIANT __RPC_FAR *pvValue); };
//***************************************************************************
//
// CLASS NAME:
//
// CEnumInst
//
// DESCRIPTION:
//
// This class is used to enumerate instances
//
//***************************************************************************
class CEnumInst : public IEnumWbemClassObject { protected: int m_iIndex; CEnumInfo * m_pEnumInfo; WCHAR * m_pwcClass; long m_lFlags; IWbemContext * m_pCtx;
IWbemServices FAR* m_pWBEMGateway; CImpDyn * m_pProvider; long m_cRef; BSTR m_bstrKeyName; CIndexCache m_PropContextCache; public: CEnumInst(CEnumInfo * pEnumInfo,long lFlags,WCHAR * pClass,IWbemServices FAR* pWBEMGateway, CImpDyn * pProvider, IWbemContext *pCtx); ~CEnumInst(void);
//IUnknown members
STDMETHODIMP QueryInterface(REFIID, PPVOID); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
STDMETHOD(GetTypeInfoCount)(THIS_ UINT FAR* pctinfo){return WBEM_E_NOT_SUPPORTED;};
STDMETHOD(GetTypeInfo)( THIS_ UINT itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo){return WBEM_E_NOT_SUPPORTED;};
STDMETHOD(GetIDsOfNames)( THIS_ REFIID riid, OLECHAR FAR* FAR* rgszNames, UINT cNames, LCID lcid, DISPID FAR* rgdispid){return WBEM_E_NOT_SUPPORTED;};
STDMETHOD(Invoke)( THIS_ DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, EXCEPINFO FAR* pexcepinfo, UINT FAR* puArgErr){return WBEM_E_NOT_SUPPORTED;}; /* IEnumWbemClassObject methods */
HRESULT STDMETHODCALLTYPE Reset( void); HRESULT STDMETHODCALLTYPE Next( /* [in] */ long lTimeout, /* [in] */ unsigned long uCount, /* [length_is][size_is][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppObject, /* [out] */ unsigned long __RPC_FAR *puReturned); HRESULT STDMETHODCALLTYPE NextAsync( /* [in] */ unsigned long uCount, /* [in] */ IWbemObjectSink __RPC_FAR *pSink){return WBEM_E_NOT_SUPPORTED;}; HRESULT STDMETHODCALLTYPE Clone( /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum); HRESULT STDMETHODCALLTYPE Skip( /* [in] */ long lTimeout, /* [in] */ unsigned long nNum);
}; // This structure is passed to async enumerators
typedef struct { IEnumWbemClassObject FAR* pIEnum; IWbemObjectSink FAR* pHandler; } ArgStruct;
// this utility is useful for setting error objects and end of async calls
IWbemClassObject * GetNotifyObj(IWbemServices * pServices, long lRet, IWbemContext * pCtx);
#endif //_IMPDYN_H_
|