/*++ Copyright (C) 1996-2001 Microsoft Corporation Module Name: ProvSubS.h Abstract: History: --*/ #ifndef _Server_Host_H #define _Server_Host_H /****************************************************************************** * * Name: * * * Description: * * *****************************************************************************/ #define ProxyIndex_Host__IWmiProviderHost 0 #define ProxyIndex_Host_IWbemShutdown 1 /****************************************************************************** * * Name: * * * Description: * * *****************************************************************************/ #include "ProvCache.h" class CServerObject_HostInterceptor : public _IWmiProviderHost , public IWbemShutdown , public HostCacheElement { private: WmiAllocator &m_Allocator ; IUnknown *m_Unknown ; IWbemShutdown *m_Host_IWbemShutdown ; _IWmiProviderHost *m_Host_IWmiProviderHost ; ProxyContainer m_ProxyContainer ; LONG m_Initialized ; LONG m_UnInitialized ; HRESULT m_InitializeResult ; HANDLE m_InitializedEvent ; IWbemContext *m_InitializationContext ; DWORD m_ProcessIdentifier ; void CallBackInternalRelease () ; public: CServerObject_HostInterceptor ( WmiAllocator &a_Allocator , CWbemGlobal_IWmiHostController *a_Controller , const HostCacheKey &a_Key , const ULONG &a_Period , IWbemContext *a_InitializationContext ) ; ~CServerObject_HostInterceptor () ; HRESULT Initialize ( IWbemContext *a_Context , IWbemProviderInitSink *a_Sink // For init signals ) ; HRESULT SetHost ( IUnknown *a_Unknown ) ; HRESULT IsIndependant ( IWbemContext *a_Context ) ; HRESULT SetInitialized ( HRESULT a_InitializeResult ) ; HRESULT WaitHost ( IWbemContext *a_Context , ULONG a_Timeout ) ; HRESULT GetInitializeResult () { return m_InitializeResult ; } DWORD GetProcessIdentifier () { return m_ProcessIdentifier ; } static HRESULT AbnormalShutdown ( HostCacheKey &a_Key ) ; static HRESULT CreateUsingAccount ( HostCacheKey &a_Key , LPWSTR a_User , LPWSTR a_Domain , _IWmiProviderHost **a_Host , _IWmiProviderFactory **a_Factory , IWbemContext *a_Context ) ; static HRESULT CreateUsingToken ( HostCacheKey &a_Key , _IWmiProviderHost **a_Host , _IWmiProviderFactory **a_Factory , IWbemContext *a_Context ) ; static HRESULT CreateUsingToken ( HostCacheKey &a_Key , _IWmiProviderHost **a_Host , _IWbemRefresherMgr **a_RefresherManager , IWbemContext *a_Context ) ; static HRESULT CreateUsingAccount ( HostCacheKey &a_Key , LPWSTR a_User , LPWSTR a_Domain , _IWmiProviderHost **a_Host , _IWbemRefresherMgr **a_RefresherManager , IWbemContext *a_Context ) ; static HRESULT FindHost ( IWbemContext *a_Context , HostCacheKey &a_Key , REFIID a_RIID , void **a_Interface ) ; public: //Non-delegating object IUnknown STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ; STDMETHODIMP_( ULONG ) AddRef () ; STDMETHODIMP_( ULONG ) Release () ; HRESULT STDMETHODCALLTYPE GetObject ( REFCLSID a_Clsid , long a_Flags , IWbemContext *a_Context , REFIID a_Riid , void **a_Interface ) ; HRESULT STDMETHODCALLTYPE GetProcessIdentifier ( DWORD *a_ProcessIdentifier ) ; // IWmi_UnInitialize members HRESULT STDMETHODCALLTYPE Shutdown ( LONG a_Flags , ULONG a_MaxMilliSeconds , IWbemContext *a_Context ) ; } ; /****************************************************************************** * * Name: * * * Description: * * *****************************************************************************/ class CServerObject_Host : public _IWmiProviderHost , public IWbemShutdown { private: LONG m_ReferenceCount ; WmiAllocator &m_Allocator ; protected: public: CServerObject_Host ( WmiAllocator &a_Allocator ) ; ~CServerObject_Host ( void ) ; //IUnknown members STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ; STDMETHODIMP_( ULONG ) AddRef () ; STDMETHODIMP_( ULONG ) Release () ; // HRESULT STDMETHODCALLTYPE GetObject ( REFCLSID a_Clsid , long a_Flags , IWbemContext *a_Context , REFIID a_Riid , void **a_Interface ) ; HRESULT STDMETHODCALLTYPE GetProcessIdentifier ( DWORD *a_ProcessIdentifier ) ; // IWmi_UnInitialize members HRESULT STDMETHODCALLTYPE Shutdown ( LONG a_Flags , ULONG a_MaxMilliSeconds , IWbemContext *a_Context ) ; }; #endif // _Server_Host_H