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.
587 lines
11 KiB
587 lines
11 KiB
/*++
|
|
|
|
Copyright (C) 1996-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ProvSubS.h
|
|
|
|
Abstract:
|
|
|
|
|
|
History:
|
|
|
|
--*/
|
|
|
|
#ifndef _Server_ProviderSubSystem_H
|
|
#define _Server_ProviderSubSystem_H
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#include "ProvCache.h"
|
|
|
|
class CInterceptor_IWmiProvSSSink : public _IWmiProvSSSink ,
|
|
public VoidPointerContainerElement
|
|
{
|
|
private:
|
|
|
|
_IWmiProvSSSink *m_InterceptedSink ;
|
|
|
|
protected:
|
|
public:
|
|
|
|
CInterceptor_IWmiProvSSSink (
|
|
|
|
_IWmiProvSSSink *a_InterceptedSink ,
|
|
CWbemGlobal_VoidPointerController *a_Controller
|
|
) ;
|
|
|
|
~CInterceptor_IWmiProvSSSink () ;
|
|
|
|
public:
|
|
|
|
//Non-delegating object IUnknown
|
|
|
|
STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ;
|
|
STDMETHODIMP_( ULONG ) AddRef () ;
|
|
STDMETHODIMP_( ULONG ) Release () ;
|
|
|
|
HRESULT STDMETHODCALLTYPE Synchronize (
|
|
|
|
long a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
LPCWSTR a_Namespace ,
|
|
LPCWSTR a_Provider
|
|
) ;
|
|
} ;
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
class CServerObject_BindingFactory ;
|
|
class CServerObject_ProviderSubSystem : public _IWmiProvSS ,
|
|
public _IWmiCoreWriteHook ,
|
|
public _IWmiProviderConfiguration ,
|
|
public IWbemShutdown ,
|
|
public ProvSubSysContainerElement ,
|
|
public CWbemGlobal_IWmiFactoryController
|
|
|
|
{
|
|
public:
|
|
|
|
class InternalInterface : public _IWmiCoreWriteHook
|
|
{
|
|
private:
|
|
|
|
CServerObject_ProviderSubSystem *m_This ;
|
|
|
|
public:
|
|
|
|
InternalInterface ( CServerObject_ProviderSubSystem *a_This ) : m_This ( a_This )
|
|
{
|
|
}
|
|
|
|
STDMETHODIMP QueryInterface (
|
|
|
|
REFIID iid ,
|
|
LPVOID FAR *iplpv
|
|
)
|
|
{
|
|
*iplpv = NULL ;
|
|
|
|
if ( iid == IID_IUnknown )
|
|
{
|
|
*iplpv = ( LPVOID ) this ;
|
|
}
|
|
else if ( iid == IID__IWmiCoreWriteHook )
|
|
{
|
|
*iplpv = ( LPVOID ) ( _IWmiCoreWriteHook * ) this ;
|
|
}
|
|
|
|
if ( *iplpv )
|
|
{
|
|
( ( LPUNKNOWN ) *iplpv )->AddRef () ;
|
|
|
|
return ResultFromScode ( S_OK ) ;
|
|
}
|
|
else
|
|
{
|
|
return ResultFromScode ( E_NOINTERFACE ) ;
|
|
}
|
|
}
|
|
|
|
STDMETHODIMP_( ULONG ) AddRef ()
|
|
{
|
|
return m_This->ProvSubSysContainerElement :: NonCyclicAddRef () ;
|
|
}
|
|
|
|
STDMETHODIMP_( ULONG ) Release ()
|
|
{
|
|
return m_This->ProvSubSysContainerElement :: NonCyclicRelease () ;
|
|
}
|
|
|
|
HRESULT STDMETHODCALLTYPE PrePut (
|
|
|
|
long a_Flags ,
|
|
long a_UserFlags ,
|
|
IWbemContext *a_Context ,
|
|
IWbemPath *a_Path ,
|
|
LPCWSTR a_Namespace ,
|
|
LPCWSTR a_Class ,
|
|
_IWmiObject *a_Copy
|
|
)
|
|
{
|
|
return m_This->PrePut (
|
|
|
|
a_Flags ,
|
|
a_UserFlags ,
|
|
a_Context ,
|
|
a_Path ,
|
|
a_Namespace ,
|
|
a_Class ,
|
|
a_Copy
|
|
) ;
|
|
}
|
|
|
|
HRESULT STDMETHODCALLTYPE PostPut (
|
|
|
|
long a_Flags ,
|
|
HRESULT hRes,
|
|
IWbemContext *a_Context ,
|
|
IWbemPath *a_Path ,
|
|
LPCWSTR a_Namespace ,
|
|
LPCWSTR a_Class ,
|
|
_IWmiObject *a_New ,
|
|
_IWmiObject *a_Old
|
|
)
|
|
{
|
|
return m_This->PostPut (
|
|
|
|
a_Flags ,
|
|
hRes,
|
|
a_Context ,
|
|
a_Path ,
|
|
a_Namespace ,
|
|
a_Class ,
|
|
a_New ,
|
|
a_Old
|
|
) ;
|
|
}
|
|
|
|
HRESULT STDMETHODCALLTYPE PreDelete (
|
|
|
|
long a_Flags ,
|
|
long a_UserFlags ,
|
|
IWbemContext *a_Context ,
|
|
IWbemPath *a_Path,
|
|
LPCWSTR a_Namespace,
|
|
LPCWSTR a_Class
|
|
)
|
|
{
|
|
return m_This->PreDelete (
|
|
|
|
a_Flags ,
|
|
a_UserFlags ,
|
|
a_Context ,
|
|
a_Path,
|
|
a_Namespace,
|
|
a_Class
|
|
) ;
|
|
}
|
|
|
|
HRESULT STDMETHODCALLTYPE PostDelete (
|
|
|
|
long a_Flags ,
|
|
HRESULT hRes,
|
|
IWbemContext *a_Context ,
|
|
IWbemPath *a_Path,
|
|
LPCWSTR a_Namespace,
|
|
LPCWSTR a_Class,
|
|
_IWmiObject *a_Old
|
|
)
|
|
{
|
|
return m_This->PostDelete (
|
|
|
|
a_Flags ,
|
|
hRes,
|
|
a_Context ,
|
|
a_Path,
|
|
a_Namespace,
|
|
a_Class,
|
|
a_Old
|
|
) ;
|
|
}
|
|
} ;
|
|
|
|
InternalInterface m_Internal ;
|
|
|
|
void CallBackInternalRelease () ;
|
|
|
|
private:
|
|
|
|
_IWmiCoreServices *m_Core ;
|
|
|
|
WmiAllocator &m_Allocator ;
|
|
|
|
CWbemGlobal_VoidPointerController *m_SinkController ;
|
|
|
|
wchar_t *Strip_Slash ( wchar_t *a_String ) ;
|
|
wchar_t *Strip_Server ( wchar_t *a_String , wchar_t *&a_FreeString ) ;
|
|
|
|
HRESULT IsChild_Namespace ( wchar_t *a_Left , wchar_t *a_Right ) ;
|
|
|
|
HRESULT GetNamespaceServerPath (
|
|
|
|
IWbemPath *a_Namespace ,
|
|
wchar_t *&a_ServerNamespacePath
|
|
) ;
|
|
|
|
HRESULT Cache (
|
|
|
|
LPCWSTR a_Namespace ,
|
|
IWbemPath *a_NamespacePath ,
|
|
CServerObject_BindingFactory *a_Factory ,
|
|
BindingFactoryCacheKey &a_Key ,
|
|
REFIID a_RIID ,
|
|
void **a_Interface
|
|
) ;
|
|
|
|
HRESULT CreateAndCache (
|
|
|
|
IWbemServices *a_Core ,
|
|
LONG a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
LPCWSTR a_Namespace ,
|
|
IWbemPath *a_NamespacePath ,
|
|
BindingFactoryCacheKey &a_Key ,
|
|
REFIID a_RIID ,
|
|
void **a_Interface
|
|
) ;
|
|
|
|
HRESULT GetProvider (
|
|
|
|
LPCWSTR a_Class ,
|
|
IWbemPath *a_Path ,
|
|
IWbemClassObject *a_Object ,
|
|
LPWSTR &a_Provider
|
|
) ;
|
|
|
|
HRESULT Call_Load (
|
|
|
|
long a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
LPCWSTR a_Class ,
|
|
LPCWSTR a_Path ,
|
|
LPCWSTR a_Method,
|
|
IWbemClassObject *a_InParams,
|
|
IWbemObjectSink *a_Sink
|
|
) ;
|
|
|
|
HRESULT GetDeleteInfo (
|
|
|
|
IWbemClassObject *a_OldObject ,
|
|
LPCWSTR a_Class ,
|
|
IWbemPath *a_Path ,
|
|
LPWSTR &a_OutClass ,
|
|
LPWSTR &a_OutStringPath ,
|
|
IWbemPath *&a_OutPathObject
|
|
) ;
|
|
|
|
HRESULT PostDelete_ProviderRegistration (
|
|
|
|
long a_Flags ,
|
|
HRESULT hRes,
|
|
IWbemContext *a_Context ,
|
|
IWbemPath *a_Path,
|
|
LPCWSTR a_PathString ,
|
|
LPCWSTR a_Namespace,
|
|
LPCWSTR a_Class,
|
|
IWbemClassObject *a_Old
|
|
|
|
) ;
|
|
|
|
HRESULT PostDelete_Namespace (
|
|
|
|
long a_Flags ,
|
|
HRESULT hRes,
|
|
IWbemContext *a_Context ,
|
|
IWbemPath *a_Path,
|
|
LPCWSTR a_PathString ,
|
|
LPCWSTR a_Namespace,
|
|
LPCWSTR a_Class,
|
|
IWbemClassObject *a_Old
|
|
) ;
|
|
|
|
QueryPreprocessor :: QuadState IsA (
|
|
|
|
IWbemClassObject *a_Left ,
|
|
wchar_t *a_Right
|
|
) ;
|
|
|
|
HRESULT VerifySecurity (
|
|
|
|
IWbemContext *a_Context ,
|
|
const BSTR a_Provider ,
|
|
const BSTR a_NamespacePath
|
|
) ;
|
|
|
|
HRESULT GetPath (
|
|
|
|
IWbemClassObject *a_Object ,
|
|
IWbemPath *&a_Path ,
|
|
LPWSTR &a_PathText
|
|
) ;
|
|
|
|
static HRESULT ReportEvent (
|
|
|
|
CServerObject_ProviderRegistrationV1 &a_Registration ,
|
|
const BSTR a_NamespacePath
|
|
) ;
|
|
|
|
HRESULT ClearSinkController () ;
|
|
|
|
protected:
|
|
public:
|
|
|
|
CServerObject_ProviderSubSystem ( WmiAllocator &a_Allocator , CWbemGlobal_IWmiProvSubSysController *a_Controller ) ;
|
|
~CServerObject_ProviderSubSystem ( void ) ;
|
|
|
|
HRESULT GetWmiRepositoryService (
|
|
|
|
IWbemPath *a_Namespace ,
|
|
const BSTR a_User ,
|
|
const BSTR a_Locale ,
|
|
IWbemServices *&a_Service
|
|
) ;
|
|
|
|
HRESULT GetWmiRepositoryService (
|
|
|
|
const BSTR a_Namespace ,
|
|
const BSTR a_User ,
|
|
const BSTR a_Locale ,
|
|
IWbemServices *&a_Service
|
|
) ;
|
|
|
|
HRESULT GetWmiService (
|
|
|
|
IWbemPath *a_Namespace ,
|
|
const BSTR a_User ,
|
|
const BSTR a_Locale ,
|
|
IWbemServices *&a_Service
|
|
) ;
|
|
|
|
HRESULT GetWmiService (
|
|
|
|
const BSTR a_Namespace ,
|
|
const BSTR a_User ,
|
|
const BSTR a_Locale ,
|
|
IWbemServices *&a_Service
|
|
) ;
|
|
|
|
HRESULT ForwardReload (
|
|
|
|
long a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
LPCWSTR a_Namespace ,
|
|
LPCWSTR a_Provider
|
|
) ;
|
|
|
|
//IUnknown members
|
|
|
|
STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ;
|
|
STDMETHODIMP_( ULONG ) AddRef () ;
|
|
STDMETHODIMP_( ULONG ) Release () ;
|
|
|
|
// IWmi_ProviderSubSystem members
|
|
|
|
HRESULT STDMETHODCALLTYPE Create (
|
|
|
|
IWbemServices *a_Core ,
|
|
LONG a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
LPCWSTR a_Namespace ,
|
|
REFIID a_RIID ,
|
|
void **a_Interface
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE CreateRefresherManager (
|
|
|
|
IWbemServices *a_Core ,
|
|
LONG a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
REFIID a_RIID ,
|
|
void **a_Interface
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE RegisterNotificationSink (
|
|
|
|
LONG a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
_IWmiProvSSSink *a_Sink
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE UnRegisterNotificationSink (
|
|
|
|
LONG a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
_IWmiProvSSSink *a_Sink
|
|
) ;
|
|
|
|
// IWmi_Initialize members
|
|
|
|
HRESULT STDMETHODCALLTYPE Initialize (
|
|
|
|
LONG a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
_IWmiCoreServices *a_Core
|
|
) ;
|
|
|
|
// IWmi_UnInitialize members
|
|
|
|
HRESULT STDMETHODCALLTYPE Shutdown (
|
|
|
|
LONG a_Flags ,
|
|
ULONG a_MaxMilliSeconds ,
|
|
IWbemContext *a_Context
|
|
) ;
|
|
|
|
WmiStatusCode Strobe ( ULONG &a_NextStrobeDelta ) ;
|
|
|
|
WmiStatusCode StrobeBegin ( const ULONG &a_Period ) ;
|
|
|
|
/* _IWmiProviderConfiguration methods */
|
|
|
|
HRESULT STDMETHODCALLTYPE Get (
|
|
|
|
IWbemServices *a_Service ,
|
|
long a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
LPCWSTR a_Class ,
|
|
LPCWSTR a_Path ,
|
|
IWbemObjectSink *a_Sink
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE Set (
|
|
|
|
IWbemServices *a_Service ,
|
|
long a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
LPCWSTR a_Provider ,
|
|
LPCWSTR a_Class ,
|
|
LPCWSTR a_Path ,
|
|
IWbemClassObject *a_OldObject ,
|
|
IWbemClassObject *a_NewObject
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE Deleted (
|
|
|
|
IWbemServices *a_Service ,
|
|
long a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
LPCWSTR a_Provider ,
|
|
LPCWSTR a_Class ,
|
|
LPCWSTR a_Path ,
|
|
IWbemClassObject *a_Object
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE Enumerate (
|
|
|
|
IWbemServices *a_Service ,
|
|
long a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
LPCWSTR a_Class ,
|
|
IWbemObjectSink *a_Sink
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE Shutdown (
|
|
|
|
IWbemServices *a_Service ,
|
|
long a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
LPCWSTR a_Provider ,
|
|
ULONG a_MilliSeconds
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE Call (
|
|
|
|
IWbemServices *a_Service ,
|
|
long a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
LPCWSTR a_Class ,
|
|
LPCWSTR a_Path ,
|
|
LPCWSTR a_Method,
|
|
IWbemClassObject *a_InParams,
|
|
IWbemObjectSink *a_Sink
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE Query (
|
|
|
|
IWbemServices *a_Service ,
|
|
long a_Flags ,
|
|
IWbemContext *a_Context ,
|
|
WBEM_PROVIDER_CONFIGURATION_CLASS_ID a_ClassIdentifier ,
|
|
WBEM_PROVIDER_CONFIGURATION_PROPERTY_ID a_PropertyIdentifier ,
|
|
VARIANT *a_Value
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE PrePut (
|
|
|
|
long a_Flags ,
|
|
long a_UserFlags ,
|
|
IWbemContext *a_Context ,
|
|
IWbemPath *a_Path ,
|
|
LPCWSTR a_Namespace ,
|
|
LPCWSTR a_Class ,
|
|
_IWmiObject *a_Copy
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE PostPut (
|
|
|
|
long a_Flags ,
|
|
HRESULT hRes,
|
|
IWbemContext *a_Context ,
|
|
IWbemPath *a_Path ,
|
|
LPCWSTR a_Namespace ,
|
|
LPCWSTR a_Class ,
|
|
_IWmiObject *a_New ,
|
|
_IWmiObject *a_Old
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE PreDelete (
|
|
|
|
long a_Flags ,
|
|
long a_UserFlags ,
|
|
IWbemContext *a_Context ,
|
|
IWbemPath *a_Path,
|
|
LPCWSTR a_Namespace,
|
|
LPCWSTR a_Class
|
|
) ;
|
|
|
|
HRESULT STDMETHODCALLTYPE PostDelete (
|
|
|
|
long a_Flags ,
|
|
HRESULT hRes,
|
|
IWbemContext *a_Context ,
|
|
IWbemPath *a_Path,
|
|
LPCWSTR a_Namespace,
|
|
LPCWSTR a_Class,
|
|
_IWmiObject *a_Old
|
|
) ;
|
|
};
|
|
|
|
#endif // _Server_ProviderSubSystem_H
|