////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1999-2000 Microsoft Corporation // // Module Name: // NtRkComm.h // // Implementation File: // NtRkComm.cpp // // Description: // Definition of the CWbemServices, CImpersonatedProvider and // CInstanceMgr class. // // Author: // Henry Wang (HenryWa) 24-AUG-1999 // // Notes: // ////////////////////////////////////////////////////////////////////////////// #pragma once ////////////////////////////////////////////////////////////////////////////// // Include Files ////////////////////////////////////////////////////////////////////////////// #include #include typedef LPVOID * PPVOID; ////////////////////////////////////////////////////////////////////////////// //++ // // class CWbemServices // // Description: // Wraps for IWbemServices. security impersonation is implemented here // //-- ////////////////////////////////////////////////////////////////////////////// class CWbemServices { protected: IWbemServices * m_pWbemServices; public: CWbemServices( IWbemServices * ); virtual ~CWbemServices( void ); HRESULT STDMETHODCALLTYPE GetObject( BSTR bstrObjectPathIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemClassObject ** ppObjectInout, IWbemCallResult ** ppCallResultInout ); HRESULT STDMETHODCALLTYPE PutClass( IWbemClassObject * pObjectIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemCallResult ** ppCallResultInout ); HRESULT STDMETHODCALLTYPE DeleteClass( BSTR bstrClassIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemCallResult ** ppCallResultInout ); HRESULT STDMETHODCALLTYPE CreateClassEnum( BSTR bstrSuperclassIn, long lFlagsIn, IWbemContext * pCtxIn, IEnumWbemClassObject ** ppEnumOut ); HRESULT STDMETHODCALLTYPE PutInstance( IWbemClassObject * pInstIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemCallResult ** ppCallResultInout ); HRESULT STDMETHODCALLTYPE DeleteInstance( BSTR bstrObjectPathIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemCallResult ** ppCallResultInout ); HRESULT STDMETHODCALLTYPE CreateInstanceEnum( BSTR bstrClassIn, long lFlagsIn, IWbemContext * pCtxIn, IEnumWbemClassObject ** ppEnumOut ); HRESULT STDMETHODCALLTYPE ExecQuery( BSTR bstrQueryLanguageIn, BSTR bstrQueryIn, long lFlagsIn, IWbemContext * pCtxIn, IEnumWbemClassObject ** ppEnumOut ); HRESULT STDMETHODCALLTYPE ExecNotificationQuery( BSTR bstrQueryLanguageIn, BSTR bstrQueryIn, long lFlagsIn, IWbemContext * pCtxIn, IEnumWbemClassObject ** ppEnumOut ); HRESULT STDMETHODCALLTYPE ExecMethod( BSTR bstrObjectPathIn, BSTR bstrMethodNameIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemClassObject * pInParamsIn, IWbemClassObject ** ppOurParamsOut, IWbemCallResult ** ppCallResultOut ); }; //*** class CWbemServices ////////////////////////////////////////////////////////////////////////////// //++ // // class CImpersonatedProvider // // Description: // a middle layer between IWbemservices and actual provider. It takes // care of security impersonation // //-- ////////////////////////////////////////////////////////////////////////////// class CImpersonatedProvider : public IWbemServices , public IWbemProviderInit { protected: ULONG m_cRef; //Object reference count CWbemServices * m_pNamespace; public: CImpersonatedProvider( BSTR bstrObjectPathIn = NULL, BSTR bstrUserIn = NULL, BSTR bstrPasswordIn = NULL, IWbemContext * pCtxIn = NULL ); virtual ~CImpersonatedProvider( void ); //Non-delegating object IUnknown STDMETHODIMP QueryInterface( REFIID riid, PPVOID ppv ); STDMETHODIMP_( ULONG ) AddRef( void ); STDMETHODIMP_( ULONG ) Release( void ); //IWbemProviderInit HRESULT STDMETHODCALLTYPE Initialize( LPWSTR pszUserIn, LONG lFlagsIn, LPWSTR pszNamespaceIn, LPWSTR pszLocaleIn, IWbemServices * pNamespaceIn, IWbemContext * pCtxIn, IWbemProviderInitSink * pInitSinkIn ); //IWbemServices HRESULT STDMETHODCALLTYPE OpenNamespace( const BSTR bstrNamespaceIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemServices ** ppWorkingNamespaceInout, IWbemCallResult ** ppResultInout ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE CancelAsyncCall( IWbemObjectSink * pSinkIn ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE QueryObjectSink( long lFlagsIn, IWbemObjectSink ** ppResponseHandlerOut ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE GetObject( const BSTR bstrObjectPathIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemClassObject ** ppObjectInout, IWbemCallResult ** ppCallResultInout ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE GetObjectAsync( const BSTR bstrObjectPathIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pResponseHandlerIn ); HRESULT STDMETHODCALLTYPE PutClass( IWbemClassObject * pObjectIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemCallResult ** ppCallResultInout ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE PutClassAsync( IWbemClassObject * pObjectIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pResponseHandlerIn ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE DeleteClass( const BSTR bstrClassIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemCallResult ** ppCallResultInout ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE DeleteClassAsync( const BSTR bstrClassIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pResponseHandlerIn ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE CreateClassEnum( const BSTR bstrSuperclassIn, long lFlagsIn, IWbemContext * pCtxIn, IEnumWbemClassObject ** ppEnumOut ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE CreateClassEnumAsync( const BSTR bstrSuperclassIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pResponseHandlerIn ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE PutInstance( IWbemClassObject * pInstIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemCallResult ** ppCallResultInout ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE PutInstanceAsync( IWbemClassObject * pInstIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pResponseHandlerIn ); HRESULT STDMETHODCALLTYPE DeleteInstance( const BSTR bstrObjectPathIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemCallResult ** ppCallResultInout ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE DeleteInstanceAsync( const BSTR bstrObjectPathIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pResponseHandlerIn ); HRESULT STDMETHODCALLTYPE CreateInstanceEnum( const BSTR bstrClassIn, long lFlagsIn, IWbemContext * pCtxIn, IEnumWbemClassObject ** ppEnumOut ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE CreateInstanceEnumAsync( const BSTR bstrClassIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pResponseHandlerIn ); HRESULT STDMETHODCALLTYPE ExecQuery( const BSTR bstrQueryLanguageIn, const BSTR bstrQueryIn, long lFlagsIn, IWbemContext * pCtxIn, IEnumWbemClassObject ** ppEnumOut ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE ExecQueryAsync( const BSTR bstrQueryLanguageIn, const BSTR bstrQueryIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pResponseHandlerIn ); HRESULT STDMETHODCALLTYPE ExecNotificationQuery( const BSTR bstrQueryLanguageIn, const BSTR bstrQueryIn, long lFlagsIn, IWbemContext* pCtxIn, IEnumWbemClassObject ** ppEnumOut ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE ExecNotificationQueryAsync( const BSTR bstrQueryLanguageIn, const BSTR bstrQueryIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pResponseHandlerIn ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE ExecMethod( const BSTR bstrObjectPathIn, const BSTR bstrMethodNameIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemClassObject * pInParamsIn, IWbemClassObject ** ppOurParamsOut, IWbemCallResult ** ppCallResultOut ) { return WBEM_E_NOT_SUPPORTED; } HRESULT STDMETHODCALLTYPE ExecMethodAsync( const BSTR bstrObjectPathIn, const BSTR bstrMethodNameIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemClassObject * pInParamsIn, IWbemObjectSink * pResponseHandlerIn ); protected: virtual HRESULT STDMETHODCALLTYPE DoCreateInstanceEnumAsync( BSTR bstrRefStrIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pHandlerIn ) = 0; virtual HRESULT STDMETHODCALLTYPE DoDeleteInstanceAsync( BSTR bstrObjectPathIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pHandlerIn ) = 0; virtual HRESULT STDMETHODCALLTYPE DoExecMethodAsync( BSTR bstrObjectPathIn, BSTR bstrMethodNameIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemClassObject * pInParamsIn, IWbemObjectSink * pHandlerIn ) = 0; virtual HRESULT STDMETHODCALLTYPE DoExecQueryAsync( BSTR bstrQueryLanguageIn, BSTR bstrQueryIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pHandlerIn ) = 0; virtual HRESULT STDMETHODCALLTYPE DoGetObjectAsync( BSTR bstrObjectPathIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink FAR * pHandlerIn ) = 0; virtual HRESULT STDMETHODCALLTYPE DoPutInstanceAsync( IWbemClassObject * pInstIn, long lFlagsIn, IWbemContext * pCtxIn, IWbemObjectSink * pHandlerIn ) = 0; }; //*** class CImpersonatedProvider ////////////////////////////////////////////////////////////////////////////// //++ // // class CWbemInstanceMgr // // Description: // Manage WMI instance, allow block indicate // //-- ////////////////////////////////////////////////////////////////////////////// class CWbemInstanceMgr { protected: IWbemObjectSink * m_pSink; IWbemClassObject ** m_ppInst; DWORD m_dwThreshHold; DWORD m_dwIndex; public: CWbemInstanceMgr( IWbemObjectSink * pHandlerIn, DWORD dwSizeIn = 50 ); virtual ~CWbemInstanceMgr( void ); void Indicate( IN IWbemClassObject * pInst ); void SetStatus( LONG lFlagsIn, HRESULT hrIn, BSTR bstrParamIn, IWbemClassObject * pObjParamIn ); }; //*** class CWbemInstanceMgr