2025-04-27 07:49:33 -04:00

376 lines
11 KiB
C++

//***************************************************************************
//
// PropertyProvider.H
//
// Module:
//
// Purpose: Genral purpose include file.
//
// Copyright (c) 1996-2001 Microsoft Corporation, All Rights Reserved
//
//***************************************************************************
#ifndef _SNMPPropertyProvider_H_
#define _SNMPPropertyProvider_H_
class SnmpDefaultThreadObject : public SnmpThreadObject
{
private:
BOOL m_Active ;
protected:
public:
SnmpDefaultThreadObject ( const char *a_ThreadName = NULL ) : SnmpThreadObject ( a_ThreadName ) , m_Active ( FALSE ) {} ;
~SnmpDefaultThreadObject () {} ;
void Initialise () { CoInitialize ( NULL ) ; }
void Uninitialise () { CoUninitialize () ; }
BOOL GetActive () { return m_Active ; }
void SetActive ( BOOL a_Active = TRUE ) { m_Active = a_Active ; }
} ;
class CImpTraceRouteProv : public IWbemServices
{
private:
BOOL m_Initialised ;
LONG m_ReferenceCount ; //Object reference count
CCriticalSection m_CriticalSection ;
WbemNamespacePath m_NamespacePath ;
wchar_t *m_Namespace ;
IWbemServices *m_Server ;
IWbemServices *m_Parent ;
wchar_t *m_localeId ;
BOOL m_GetNotifyCalled ;
BOOL m_GetExtendedNotifyCalled ;
IWbemClassObject *m_NotificationClassObject ;
IWbemClassObject *m_ExtendedNotificationClassObject ;
static ProviderStore s_ProviderStore ;
TopNTableProv *m_TopNTableProv ;
private:
BOOL AttachParentServer (
WbemSnmpErrorObject &a_errorObject ,
BSTR Namespace,
IWbemContext *pCtx,
long lFlags,
IWbemServices FAR* FAR* ppNewContext,
IWbemCallResult FAR* FAR* ppErrorObject
) ;
BOOL AttachServer (
WbemSnmpErrorObject &a_errorObject ,
BSTR Namespace,
IWbemContext *pCtx,
long lFlags,
IWbemServices FAR* FAR* ppNewContext,
IWbemCallResult FAR* FAR* ppErrorObject
) ;
protected:
public:
CImpTraceRouteProv () ;
~CImpTraceRouteProv () ;
static SnmpDefaultThreadObject *s_DefaultThreadObject ;
static SnmpDefaultThreadObject *s_BackupThreadObject ;
// Implementation
IWbemServices *GetServer () ;
IWbemServices *GetParent () ;
void SetParent ( IWbemServices *a_Parent ) ;
void SetServer ( IWbemServices *a_Server ) ;
TopNTableProv *GetTopNTableProv () { return m_TopNTableProv ; }
void EnableRmonPolling () ;
WbemNamespacePath *GetNamespacePath () { return & m_NamespacePath ; }
wchar_t *GetNamespace () ;
void SetNamespace ( wchar_t *a_Namespace ) ;
void SetLocaleId ( wchar_t *a_localeId ) ;
wchar_t *GetLocaleId () { return m_localeId ; }
BOOL CreateExtendedNotificationObject (
WbemSnmpErrorObject &a_errorObject
) ;
BOOL CreateNotificationObject (
WbemSnmpErrorObject &a_errorObject
) ;
IWbemClassObject *GetNotificationObject ( WbemSnmpErrorObject &a_errorObject ) ;
IWbemClassObject *GetExtendedNotificationObject ( WbemSnmpErrorObject &a_errorObject ) ;
//Non-delegating object IUnknown
STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ;
STDMETHODIMP_( ULONG ) AddRef () ;
STDMETHODIMP_( ULONG ) Release () ;
/* 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:
LONG m_ReferenceCount ;
protected:
public:
CEnumInst (
HANDLE hContext ,
WCHAR * pClass ,
IWbemServices FAR* pOLEMSGateway ,
CImpTraceRouteProv *pProvider
) ;
~CEnumInst () ;
// IUnknown members
STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ;
STDMETHODIMP_( ULONG ) AddRef () ;
STDMETHODIMP_( ULONG ) Release () ;
// IEnumMosClassObject 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 CImpTraceRouteLocator : public IWbemLocator
{
private:
LONG m_ReferenceCount ; //Object reference count
protected:
public:
CImpTraceRouteLocator () ;
~CImpTraceRouteLocator () ;
//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
) ;
};
#endif