Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

440 lines
16 KiB

/*++
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_