375 lines
11 KiB
C++
375 lines
11 KiB
C++
//***************************************************************************
|
|
|
|
//
|
|
|
|
// PropertyProvider.H
|
|
|
|
//
|
|
|
|
// Module: Sample Mini Server for Ole MS
|
|
|
|
//
|
|
|
|
// Purpose: Genral purpose include file.
|
|
|
|
//
|
|
|
|
// Copyright (c) 1996-2001 Microsoft Corporation, All Rights Reserved
|
|
//
|
|
//***************************************************************************
|
|
|
|
#ifndef _ProxyProvider_H_
|
|
#define _ProxyProvider_H_
|
|
|
|
class SnmpDefaultThreadObject : public SnmpThreadObject
|
|
{
|
|
private:
|
|
protected:
|
|
public:
|
|
|
|
SnmpDefaultThreadObject () {} ;
|
|
~SnmpDefaultThreadObject () {} ;
|
|
|
|
void Initialise () { CoInitialize ( NULL ) ; }
|
|
void Uninitialise () { CoUninitialize () ; }
|
|
|
|
} ;
|
|
|
|
class CImpProxyProv : public IWbemServices
|
|
{
|
|
private:
|
|
|
|
LONG m_referenceCount ; //Object reference count
|
|
|
|
private:
|
|
|
|
BOOL initialised ;
|
|
IWbemServices *proxiedProvider ;
|
|
IWbemServices *server ;
|
|
IWbemServices *parentServer ;
|
|
wchar_t *proxiedNamespaceString ;
|
|
|
|
wchar_t *thisNamespace ;
|
|
WbemNamespacePath namespacePath ;
|
|
|
|
|
|
private:
|
|
|
|
void SetServer ( IWbemServices *serverArg ) ;
|
|
void SetParentServer ( IWbemServices *parentServerArg ) ;
|
|
|
|
BOOL AttachServer (
|
|
|
|
WbemSnmpErrorObject &a_errorObject ,
|
|
BSTR ObjectPath,
|
|
long lFlags,
|
|
IWbemServices FAR* FAR* ppNewContext,
|
|
IWbemCallResult FAR* FAR* ppErrorObject
|
|
) ;
|
|
|
|
BOOL AttachParentServer (
|
|
|
|
WbemSnmpErrorObject &a_errorObject ,
|
|
BSTR ObjectPath,
|
|
long lFlags,
|
|
IWbemServices FAR* FAR* ppNewContext,
|
|
IWbemCallResult FAR* FAR* ppErrorObject
|
|
) ;
|
|
|
|
BOOL AttachProxyProvider (
|
|
|
|
WbemSnmpErrorObject &a_errorObject ,
|
|
BSTR ObjectPath,
|
|
long lFlags,
|
|
IWbemServices FAR* FAR* ppNewContext,
|
|
IWbemCallResult FAR* FAR* ppErrorObject
|
|
) ;
|
|
|
|
BOOL ObtainProxiedNamespace ( WbemSnmpErrorObject &a_errorObject ) ;
|
|
|
|
protected:
|
|
|
|
public:
|
|
|
|
CImpProxyProv () ;
|
|
~CImpProxyProv () ;
|
|
|
|
void SetProvider ( IWbemServices *provider ) ;
|
|
IWbemServices *GetParentServer () ;
|
|
IWbemServices *GetServer () ;
|
|
WbemNamespacePath *GetNamespacePath () { return & namespacePath ; }
|
|
wchar_t *GetThisNamespace () ;
|
|
void SetThisNamespace ( wchar_t *thisNamespaceArg ) ;
|
|
wchar_t *GetProxiedNamespaceString () { return proxiedNamespaceString ; }
|
|
|
|
public:
|
|
|
|
static SnmpDefaultThreadObject *s_defaultThreadObject ;
|
|
|
|
//Non-delegating object IUnknown
|
|
|
|
STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ;
|
|
STDMETHODIMP_( ULONG ) AddRef () ;
|
|
STDMETHODIMP_( ULONG ) Release () ;
|
|
|
|
public:
|
|
|
|
/* IWbemServices methods */
|
|
|
|
HRESULT STDMETHODCALLTYPE OpenNamespace(
|
|
/* [in] */ 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) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE CancelAsyncCall(
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pSink) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE QueryObjectSink(
|
|
/* [in] */ long lFlags,
|
|
/* [out] */ IWbemObjectSink __RPC_FAR *__RPC_FAR *ppResponseHandler) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE GetObject(
|
|
/* [in] */ 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] */ 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) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE PutClassAsync(
|
|
/* [in] */ IWbemClassObject __RPC_FAR *pObject,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE DeleteClass(
|
|
/* [in] */ BSTR Class,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE DeleteClassAsync(
|
|
/* [in] */ BSTR Class,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE CreateClassEnum(
|
|
/* [in] */ BSTR Superclass,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE CreateClassEnumAsync(
|
|
/* [in] */ 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) ;
|
|
|
|
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] */ BSTR ObjectPath,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE DeleteInstanceAsync(
|
|
/* [in] */ BSTR ObjectPath,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE CreateInstanceEnum(
|
|
/* [in] */ BSTR Class,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE CreateInstanceEnumAsync(
|
|
/* [in] */ BSTR Class,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE ExecQuery(
|
|
/* [in] */ BSTR QueryLanguage,
|
|
/* [in] */ BSTR Query,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE ExecQueryAsync(
|
|
/* [in] */ BSTR QueryLanguage,
|
|
/* [in] */ BSTR Query,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE ExecNotificationQuery(
|
|
/* [in] */ BSTR QueryLanguage,
|
|
/* [in] */ BSTR Query,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE ExecNotificationQueryAsync(
|
|
/* [in] */ BSTR QueryLanguage,
|
|
/* [in] */ BSTR Query,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE ExecMethod(
|
|
/* [in] */ BSTR ObjectPath,
|
|
/* [in] */ 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) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE ExecMethodAsync(
|
|
/* [in] */ BSTR ObjectPath,
|
|
/* [in] */ BSTR MethodName,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemClassObject __RPC_FAR *pInParams,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) ;
|
|
|
|
|
|
} ;
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// This class is used to enumerate instances
|
|
|
|
class CEnumInst : public IEnumWbemClassObject
|
|
{
|
|
private:
|
|
|
|
ULONG m_referenceCount ;
|
|
|
|
protected:
|
|
public:
|
|
|
|
CEnumInst (
|
|
|
|
HANDLE hContext ,
|
|
WCHAR * pClass ,
|
|
IWbemServices FAR* pWbemGateway ,
|
|
CImpProxyProv *pProvider
|
|
) ;
|
|
|
|
~CEnumInst () ;
|
|
|
|
// IUnknown members
|
|
|
|
STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ;
|
|
STDMETHODIMP_( ULONG ) AddRef () ;
|
|
STDMETHODIMP_( ULONG ) Release () ;
|
|
|
|
// IEnumWbemClassObject methods
|
|
|
|
STDMETHODIMP Reset () ;
|
|
|
|
STDMETHODIMP Next (
|
|
|
|
ULONG uCount ,
|
|
IWbemClassObject FAR* FAR* pProp ,
|
|
ULONG FAR* puReturned
|
|
) ;
|
|
|
|
STDMETHODIMP Clone (
|
|
|
|
IEnumWbemClassObject FAR* FAR* pEnum
|
|
) ;
|
|
|
|
STDMETHODIMP Skip (
|
|
|
|
ULONG nNum
|
|
) ;
|
|
|
|
} ;
|
|
|
|
class CImpProxyLocator : public IWbemLocator
|
|
{
|
|
private:
|
|
|
|
LONG m_referenceCount ; //Object reference count
|
|
|
|
protected:
|
|
public:
|
|
|
|
CImpProxyLocator () ;
|
|
~CImpProxyLocator () ;
|
|
|
|
//Non-delegating object IUnknown
|
|
|
|
STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ;
|
|
STDMETHODIMP_( ULONG ) AddRef () ;
|
|
STDMETHODIMP_( ULONG ) Release () ;
|
|
|
|
/* IWbemLocator methods */
|
|
|
|
STDMETHODIMP ConnectServer (
|
|
|
|
BSTR NetworkResource,
|
|
BSTR User,
|
|
BSTR Password,
|
|
BSTR lLocaleId,
|
|
long lFlags,
|
|
BSTR Authority,
|
|
IWbemContext FAR *pCtx ,
|
|
IWbemServices FAR* FAR* ppNamespace
|
|
) ;
|
|
|
|
};
|
|
|
|
class Notification : public IWbemObjectSink
|
|
{
|
|
private:
|
|
|
|
LONG m_ReferenceCount ;
|
|
CImpProxyProv *m_Provider ;
|
|
IWbemObjectSink *m_ProviderNotification ;
|
|
|
|
protected:
|
|
public:
|
|
|
|
Notification ( CImpProxyProv *a_Provider , IWbemObjectSink *a_ProviderNotification ) ;
|
|
virtual ~Notification () ;
|
|
|
|
STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ;
|
|
STDMETHODIMP_( ULONG ) AddRef () ;
|
|
STDMETHODIMP_( ULONG ) Release () ;
|
|
|
|
STDMETHOD_(SCODE, Indicate)(THIS_ long lObjectCount, IWbemClassObject FAR* FAR* pObjArray) ;
|
|
STDMETHOD_(SCODE, SetStatus)(THIS_ long lFlags,long lParam,BSTR strParam,IWbemClassObject __RPC_FAR *pObjParam) ;
|
|
|
|
} ;
|
|
|
|
#endif
|