home *** CD-ROM | disk | FTP | other *** search
- #pragma option push -b -a8 -pc -A- /*P_O_Push*/
- //***************************************************************************
- //
- // Copyright (c) 1997-1999 Microsoft Corporation
- //
- // WBEMGLUE.H
- //
- // Purpose: Implementation of WBEM Glue classes
- //
- //***************************************************************************
-
- #if _MSC_VER > 1000
- #pragma once
- #endif
-
- #ifndef _WbemGlue_H_Included
- #define _WbemGlue_H_Included
-
- #undef PURE
- #define PURE {return (ULONG)E_NOTIMPL;}
- typedef LPVOID *PPVOID;
-
- #include <wbemidl.h>
- #include <map>
- #include <provider.h>
-
- #define DEFAULT_NAMESPACE L"Root\\CimV2"
-
- typedef std::map<CHString, LPVOID> STRING2LPVOID;
-
- class POLARITY CWbemProviderGlue : public IWbemServices, public IWbemProviderInit
- {
-
- public:
- // Public Static functions
- // these are for use by implementors of Framework based providers
-
- static HRESULT WINAPI GetAllInstances( LPCWSTR pszClassName,
- TRefPointerCollection<CInstance> *pList,
- LPCWSTR pszNamespace,
- MethodContext *pMethodContext );
-
- static HRESULT WINAPI GetAllInstancesAsynch( LPCWSTR pszClassName,
- Provider *pRequester,
- LPProviderInstanceCallback pCallback,
- LPCWSTR pszNamespace,
- MethodContext *pMethodContext,
- void *pUserData );
-
- static HRESULT WINAPI GetAllDerivedInstancesAsynch( LPCWSTR pszBaseClassName,
- Provider *pRequester,
- LPProviderInstanceCallback pCallback,
- LPCWSTR pszNamespace,
- MethodContext *pMethodContext,
- void *pUserData );
-
- static HRESULT WINAPI GetAllDerivedInstances( LPCWSTR pszBaseClassName,
- TRefPointerCollection<CInstance> *pList,
- MethodContext *pMethodContext,
- LPCWSTR pszNamespace = NULL);
-
- static HRESULT WINAPI GetInstanceByPath( LPCWSTR pszObjectPath,
- CInstance **ppInstance,
- MethodContext *pMethodContext = NULL );
-
- static HRESULT WINAPI GetInstanceKeysByPath( LPCWSTR pszInstancePath,
- CInstance **ppInstance,
- MethodContext *pMethodContext);
-
- static HRESULT WINAPI GetInstancePropertiesByPath( LPCWSTR pszInstancePath,
- CInstance **ppInstance,
- MethodContext *pMethodContext,
- CHStringArray &csaProperties);
-
- static HRESULT WINAPI GetInstancesByQuery( LPCWSTR query,
- TRefPointerCollection<CInstance> *pList,
- MethodContext *pMethodContext,
- LPCWSTR pszNamespace = NULL);
-
- static HRESULT WINAPI GetInstancesByQueryAsynch( LPCWSTR query,
- Provider *pRequester,
- LPProviderInstanceCallback pCallback,
- LPCWSTR pszNamespace,
- MethodContext *pMethodContext,
- void *pUserData );
-
- // This version of GetEmptyInstance is deprecated. Use the next one.
- static HRESULT WINAPI GetEmptyInstance( LPCWSTR pszClassName,
- CInstance **ppInstance,
- LPCWSTR pszNamespace = NULL);
-
- static HRESULT WINAPI GetEmptyInstance( MethodContext *pMethodContext,
- LPCWSTR pszClassName,
- CInstance **ppInstance,
- LPCWSTR pszNamespace = NULL);
-
- // Both of these FillInstance calls are deprecated. Use GetInstanceByPath, or the even
- // more performant versions of GetInstanceKeysByPath or GetInstancePropertiesByPath.
- static HRESULT WINAPI FillInstance( CInstance *pInstance,
- LPCWSTR pszNamespace = NULL );
-
- static HRESULT WINAPI FillInstance( MethodContext *pMethodContext,
- CInstance *pInstance );
-
- // determine whether one class is derived from another
- static bool WINAPI IsDerivedFrom( LPCWSTR pszBaseClassName,
- LPCWSTR pszDerivedClassName,
- MethodContext *pMethodContext,
- LPCWSTR pszNamespace = NULL );
-
- // logging in and out of framework
- // each framework based DLL must log in and out with these functions
- // preferably in DllMain and DllCanUnloadNow
- static BOOL WINAPI FrameworkLoginDLL(LPCWSTR name);
- static BOOL WINAPI FrameworkLogoffDLL(LPCWSTR name);
-
- static bool WINAPI SetStatusObject(MethodContext *pContext, LPCWSTR pNamespace,
- LPCWSTR pDescription, HRESULT hr,
- const SAFEARRAY *pPrivilegesNotHeld = NULL,
- const SAFEARRAY *pPrivilegesRequired = NULL);
-
- ////////////////////////////////////////////////////////////////////////////////////
- // note: the following public functions are necessary to allow COM communication //
- // with CIMOM. Provider Implementors will not need to call these. //
- ////////////////////////////////////////////////////////////////////////////////////
-
- #ifndef NO_BASEINTERFACE_FUNCS
-
- /* IUnknown methods */
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR *ppvObj) ;
- STDMETHOD_(ULONG, AddRef)(THIS) ;
- STDMETHOD_(ULONG, Release)(THIS) ;
- #endif
-
- virtual HRESULT STDMETHODCALLTYPE Initialize(
- /* [in] */ LPWSTR pszUser,
- /* [in] */ LONG lFlags,
- /* [in] */ LPWSTR pszNamespace,
- /* [in] */ LPWSTR pszLocale,
- /* [in] */ IWbemServices __RPC_FAR *pNamespace,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [in] */ IWbemProviderInitSink __RPC_FAR *pInitSink
- );
-
- STDMETHOD(CreateInstanceEnumAsync)(THIS_
- /* [in] */ const BSTR Class,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
- );
-
- STDMETHOD(GetObjectAsync)( THIS_
- const BSTR ObjectPath,
- long lFlags,
- IWbemContext __RPC_FAR *pCtx,
- IWbemObjectSink __RPC_FAR *pResponseHandler
- );
-
- STDMETHOD(ExecQueryAsync)(THIS_
- /* [in] */ const BSTR QueryLanguage,
- /* [in] */ const BSTR Query,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
- );
-
- STDMETHOD(PutInstanceAsync)( THIS_
- /* [in] */ IWbemClassObject __RPC_FAR *pInst,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
- );
-
- STDMETHOD(DeleteInstanceAsync)(
- /* [in] */ const BSTR ObjectPath,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
- );
-
- STDMETHOD(ExecMethodAsync)( const BSTR,
- const BSTR,
- long,
- IWbemContext*,
- IWbemClassObject*,
- IWbemObjectSink*
- );
-
-
- // Unsupported service methods
- // ===========================
-
- STDMETHOD(OpenNamespace)(THIS_
- const BSTR Namespace,
- long lFlags,
- IWbemContext __RPC_FAR *pCtx,
- IWbemServices __RPC_FAR *__RPC_FAR *ppWorkingNamespace,
- IWbemCallResult __RPC_FAR *__RPC_FAR *ppResult
- )
- { return E_NOTIMPL; }
-
-
- STDMETHOD(PutClass)(IWbemClassObject __RPC_FAR *pObject,
- long lFlags,
- IWbemContext __RPC_FAR *pCtx,
- IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(PutClassAsync)(
- /* [in] */ IWbemClassObject __RPC_FAR *pObject,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(DeleteClass)(
- /* [in] */ const BSTR Class,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(DeleteClassAsync)(
- /* [in] */ const BSTR Class,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(CreateClassEnum)(
- /* [in] */ const BSTR Superclass,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(CreateClassEnumAsync)(
- /* [in] */ const BSTR Superclass,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(PutInstance)(
- /* [in] */ IWbemClassObject __RPC_FAR *pInst,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(DeleteInstance)(
- /* [in] */ const BSTR ObjectPath,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(CancelAsyncRequest)(THIS_ long lAsyncRequestHandle
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(CancelAsyncCall)(IWbemObjectSink __RPC_FAR *pSink
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(CreateInstanceEnum)(
- /* [in] */ const BSTR Class,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(ExecQuery)(
- /* [in] */ const BSTR QueryLanguage,
- /* [in] */ const BSTR Query,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(QueryObjectSink)(long lFlags,
- IWbemObjectSink __RPC_FAR *__RPC_FAR *ppResponseHandler
- )
- {return E_NOTIMPL;}
-
-
- STDMETHOD(GetObject)( const BSTR ObjectPath,
- long lFlags,
- IWbemContext __RPC_FAR *pCtx,
- IWbemClassObject __RPC_FAR *__RPC_FAR *ppObject,
- IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult
- )
-
- {return E_NOTIMPL;}
-
- STDMETHOD(ExecNotificationQuery)(
- /* [in] */ const BSTR QueryLanguage,
- /* [in] */ const BSTR Query,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum
- )
- {return E_NOTIMPL;}
-
-
- STDMETHOD(ExecNotificationQueryAsync)(
- /* [in] */ const BSTR QueryLanguage,
- /* [in] */ const BSTR Query,
- /* [in] */ long lFlags,
- /* [in] */ IWbemContext __RPC_FAR *pCtx,
- /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
- )
- {return E_NOTIMPL;}
-
- STDMETHOD(ExecMethod)(const BSTR,
- const BSTR,
- long,
- IWbemContext*,
- IWbemClassObject*,
- IWbemClassObject**,
- IWbemCallResult**
- )
- {return E_NOTIMPL;}
-
- CWbemProviderGlue();
- ~CWbemProviderGlue(); // Destructor
-
- // used by the provider base class - you probably will never need to call this directly
- static IWbemServices *WINAPI GetNamespaceConnection( LPCWSTR NameSpace );
-
- // each provider class must log in and out with these in their constructors and destructors
- // this is done for you in the Provider base class
- static void WINAPI FrameworkLogin( LPCWSTR a_pszName,
- Provider *a_pProvider,
- LPCWSTR a_pszNameSpace );
-
- static void WINAPI FrameworkLogoff( LPCWSTR a_pszName,
- LPCWSTR a_pszNameSpace );
-
- static void WINAPI IncrementObjectCount(void);
-
- static LONG WINAPI DecrementObjectCount(void);
-
- static DWORD WINAPI GetOSMajorVersion() { return s_dwMajorVersion; }
-
- static DWORD WINAPI GetPlatform() { return s_dwPlatform; }
-
- static LPCWSTR WINAPI GetCSDVersion() { return s_wstrCSDVersion; }
-
- private:
- static HRESULT WINAPI GetInstanceFromCIMOM( LPCWSTR pszObjectPath,
- LPCWSTR pszNameSpace,
- MethodContext *pMethodContext,
- CInstance **ppInstance );
-
- void FlushAll(void);
-
- static IWbemServices *WINAPI SearchMapForNamespace( const BSTR NameSpace );
-
- static void WINAPI AddNamespaceToMap( const BSTR NameSpace,
- IWbemServices *pWbemServices );
-
- static void WINAPI ClearNamespaceMap( void );
-
- static Provider *WINAPI SearchMapForProvider( LPCWSTR a_pszProviderName,
- LPCWSTR a_pszNamespace );
-
- static Provider *WINAPI AddProviderToMap( LPCWSTR a_pszProviderName,
- LPCWSTR a_strNamespace,
- Provider *a_pProvider );
-
- static void WINAPI LockProviderMap( void );
-
- static void WINAPI UnlockProviderMap( void );
-
- static IWbemClassObject *WINAPI GetStatusObject( MethodContext *pContext,
- LPCWSTR pNamespace);
-
- static void WINAPI LockNamespaceMap( void );
-
- static void WINAPI UnlockNamespaceMap( void );
-
- static void WINAPI Init( void );
-
- static void WINAPI UnInit( void );
-
- static void WINAPI GetComputerName( CHString& strComputerName );
-
- static HRESULT WINAPI CheckImpersonationLevel();
-
- HRESULT PreProcessPutInstanceParms(IWbemClassObject __RPC_FAR *pInstIn,
- IWbemClassObject __RPC_FAR **pInstOut,
- IWbemContext __RPC_FAR *pCtx);
-
- HRESULT NullOutUnsetProperties(IWbemClassObject __RPC_FAR *pInstIn,
- IWbemClassObject __RPC_FAR **pInstOut,
- const VARIANT& vValue);
-
- long m_lRefCount;
- CHString m_strNamespace;
-
- static long s_lObjects; // number of objects out there - class factories, mostly.
- static STRING2LPVOID s_providersmap;
- static STRING2LPVOID s_wbemservicesmap;
- static CCritSec s_csProviderMap;
- static CCritSec s_csNamespaceMap;
- static CCritSec m_csStatusObject;
- static BOOL s_bInitted;
- static DWORD s_dwPlatform;
- static DWORD s_dwMajorVersion;
- static WCHAR s_wstrCSDVersion[128];
- static IWbemClassObject *m_pStatusObject;
-
- };
-
- inline void CWbemProviderGlue::LockProviderMap( void )
- {
- EnterCriticalSection( &s_csProviderMap );
- }
-
- inline void CWbemProviderGlue::UnlockProviderMap( void )
- {
- LeaveCriticalSection( &s_csProviderMap );
- }
-
- inline void CWbemProviderGlue::LockNamespaceMap( void )
- {
- EnterCriticalSection( &s_csNamespaceMap );
- }
-
- inline void CWbemProviderGlue::UnlockNamespaceMap( void )
- {
- LeaveCriticalSection( &s_csNamespaceMap );
- }
-
- class POLARITY CWbemGlueFactory : public IClassFactory
- {
- protected:
- long m_lRefCount;
-
- public:
- CWbemGlueFactory(void);
- ~CWbemGlueFactory(void);
-
- //IUnknown members
- STDMETHODIMP QueryInterface(REFIID, PPVOID);
- STDMETHODIMP_(ULONG) AddRef(void);
- STDMETHODIMP_(ULONG) Release(void);
-
- //IClassFactory members
- STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID, PPVOID);
- STDMETHODIMP LockServer(BOOL);
- };
-
- typedef CWbemGlueFactory *PCWbemGlueFactory;
-
- #endif
- #pragma option pop /*P_O_Pop*/
-