home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magazyn Internet 2000 May
/
MICD_2000_05.iso
/
CBuilder5
/
INSTALL
/
DATA1.CAB
/
Program_Built_Files
/
Include
/
wbemglue.h
< prev
next >
Wrap
C/C++ Source or Header
|
2000-02-01
|
18KB
|
469 lines
#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*/