// // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved // // *************************************************************************** // // Original Author: Rajesh Rao // // $Author: rajeshr $ // $Date: 6/11/98 4:43p $ // $Workfile:classpro.cpp $ // // $Modtime: 6/11/98 11:21a $ // $Revision: 1 $ // $Nokeywords: $ // // // Description: Contains the declaration for the DS Class Provider class. This is // the base class for all DS Class Providers. Note that an instance of the CDSClassProviderInitializer // class has to be created to initialize the static members of the CDSClassProvider class. Hence exactly // one instance of the CDSClassProviderInitializer class should be created for this // class to function properly. // //*************************************************************************** ///////////////////////////////////////////////////////////////////////// #ifndef DS_CLASS_PROVIDER_H #define DS_CLASS_PROVIDER_H // Forward declaration for the initializer class class CDSClassProviderInitializer; class CDSClassProvider : public IWbemProviderInit, public IWbemServices { // The initialization class is a friend of this class friend CDSClassProviderInitializer; public: static DWORD dwClassProviderCount; // Create the object by passing the log object CDSClassProvider () ; virtual ~CDSClassProvider () ; //////////////////////////////////////// //IUnknown members //////////////////////////////////////// STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ; STDMETHODIMP_( ULONG ) AddRef () ; STDMETHODIMP_( ULONG ) Release () ; //////////////////////////////////////// //IWbemProviderInit members //////////////////////////////////////// virtual HRESULT STDMETHODCALLTYPE Initialize( LPWSTR wszUser, LONG lFlags, LPWSTR wszNamespace, LPWSTR wszLocale, IWbemServices __RPC_FAR *pNamespace, IWbemContext __RPC_FAR *pCtx, IWbemProviderInitSink __RPC_FAR *pInitSink) ; //////////////////////////////////////// //IWbemServices members //////////////////////////////////////// virtual HRESULT STDMETHODCALLTYPE OpenNamespace( /* [in] */ const BSTR strNamespace, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemServices __RPC_FAR *__RPC_FAR *ppWorkingNamespace, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppResult); virtual HRESULT STDMETHODCALLTYPE CancelAsyncCall( /* [in] */ IWbemObjectSink __RPC_FAR *pSink); virtual HRESULT STDMETHODCALLTYPE QueryObjectSink( /* [in] */ long lFlags, /* [out] */ IWbemObjectSink __RPC_FAR *__RPC_FAR *ppResponseHandler); virtual HRESULT STDMETHODCALLTYPE GetObject( /* [in] */ const BSTR strObjectPath, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppObject, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult); virtual HRESULT STDMETHODCALLTYPE GetObjectAsync( /* [in] */ const BSTR strObjectPath, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); virtual HRESULT STDMETHODCALLTYPE PutClass( /* [in] */ IWbemClassObject __RPC_FAR *pObject, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult); virtual HRESULT STDMETHODCALLTYPE PutClassAsync( /* [in] */ IWbemClassObject __RPC_FAR *pObject, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); virtual HRESULT STDMETHODCALLTYPE DeleteClass( /* [in] */ const BSTR strClass, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult); virtual HRESULT STDMETHODCALLTYPE DeleteClassAsync( /* [in] */ const BSTR strClass, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); virtual HRESULT STDMETHODCALLTYPE CreateClassEnum( /* [in] */ const BSTR strSuperclass, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum); virtual HRESULT STDMETHODCALLTYPE CreateClassEnumAsync( /* [in] */ const BSTR strSuperclass, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); virtual HRESULT STDMETHODCALLTYPE PutInstance( /* [in] */ IWbemClassObject __RPC_FAR *pInst, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult); virtual HRESULT STDMETHODCALLTYPE PutInstanceAsync( /* [in] */ IWbemClassObject __RPC_FAR *pInst, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); virtual HRESULT STDMETHODCALLTYPE DeleteInstance( /* [in] */ const BSTR strObjectPath, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult); virtual HRESULT STDMETHODCALLTYPE DeleteInstanceAsync( /* [in] */ const BSTR strObjectPath, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); virtual HRESULT STDMETHODCALLTYPE CreateInstanceEnum( /* [in] */ const BSTR strClass, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum); virtual HRESULT STDMETHODCALLTYPE CreateInstanceEnumAsync( /* [in] */ const BSTR strClass, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); virtual HRESULT STDMETHODCALLTYPE ExecQuery( /* [in] */ const BSTR strQueryLanguage, /* [in] */ const BSTR strQuery, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum); virtual HRESULT STDMETHODCALLTYPE ExecQueryAsync( /* [in] */ const BSTR strQueryLanguage, /* [in] */ const BSTR strQuery, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); virtual HRESULT STDMETHODCALLTYPE ExecNotificationQuery( /* [in] */ const BSTR strQueryLanguage, /* [in] */ const BSTR strQuery, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum); virtual HRESULT STDMETHODCALLTYPE ExecNotificationQueryAsync( /* [in] */ const BSTR strQueryLanguage, /* [in] */ const BSTR strQuery, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); virtual HRESULT STDMETHODCALLTYPE ExecMethod( /* [in] */ const BSTR strObjectPath, /* [in] */ const BSTR strMethodName, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemClassObject __RPC_FAR *pInParams, /* [unique][in][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppOutParams, /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult); virtual HRESULT STDMETHODCALLTYPE ExecMethodAsync( /* [in] */ const BSTR strObjectPath, /* [in] */ const BSTR strMethodName, /* [in] */ long lFlags, /* [in] */ IWbemContext __RPC_FAR *pCtx, /* [in] */ IWbemClassObject __RPC_FAR *pInParams, /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler); protected: #ifdef PROFILING // Used for profiling. Should be removed. DWORD dwStartTime; #endif //////////////////////////////////////////////// // Functions for interacting with ADSI providers //////////////////////////////////////////////// //*************************************************************************** // // CDSClassProvider::GetWBEMProviderName // // Purpose : Returns the name of the provider. This should be the same as the // value of the field Name in the __Win32Provider instance used for registration // of the provider // // Parameters: // None // // Return Value: The name of the provider //*************************************************************************** virtual const BSTR GetWBEMProviderName() = 0; //*************************************************************************** // // CDSClassProvider::IsUnProvidedClass // // Purpose : To check whether a class is one that the provider does not provide // // Parameters: // lpszClassName : The WBEM Name of the class to be checked // // // Return Value: TRUE is this is one of the classes not provided by the provider //*************************************************************************** virtual BOOLEAN IsUnProvidedClass(LPCWSTR lpszClassName) = 0; //*************************************************************************** // // CDSClassProvider::GetClassFromCacheOrADSI // // Purpose : To create a WBEM class from an ADSI Class // // Parameters: // lpszClassName : The WBEM Name of the class to be retreived // pCtx : A pointer to the context object that was used in this call. This // may be used by this function to make calls to CIMOM // // // Return Value: The COM result representing the status. //*************************************************************************** virtual HRESULT GetClassFromCacheOrADSI(LPCWSTR pszWBEMClassName, IWbemClassObject **ppReturnObject, IWbemContext *pCtx); //*************************************************************************** // // CDSClassProvider::GetClassFromADSI // // Purpose : To create a WBEM class from an ADSI Class // // Parameters: // lpszClassName : The WBEM Name of the class to be retreived // pCtx : A pointer to the context object that was used in this call. This // may be used by this function to make calls to CIMOM // ppWbemClass : The resulting WBEM Class. This has to be released once the // user is done with it. // // // Return Value: The COM result representing the status. //*************************************************************************** virtual HRESULT GetClassFromADSI( LPCWSTR lpszClassName, IWbemContext *pCtx, IWbemClassObject ** ppWbemClass ) = 0; //*************************************************************************** // // CDSClassProvider::GetADSIClass // // Purpose : To Create a CADSIClass from an ADSI classSchema object // Parameters: // lpszWBEMClassName : The WBEM Name of the class to be fetched. // ppADSIClass : The address where the pointer to the CADSIClass will be stored. // It is the caller's responsibility to Release() the object when done with it // // Return Value: The COM status value indicating the status of the request. //*************************************************************************** virtual HRESULT GetADSIClass(LPCWSTR lpszClassName, CADSIClass ** ppADSIClass) = 0; //*************************************************************************** // // CDSClassProvider::GetADSIProperty // // Purpose : To create an CADSIProperty object from an LDAP AttributeSchema object // Parameters: // lpszPropertyName : The LDAPDisplayName of the LDAP property to be fetched. // ppADSIProperty : The address where the pointer to the IDirectoryObject interface will be stored // It is the caller's responsibility to Release() the interface when done with it // // Return Value: The COM status value indicating the status of the request //*************************************************************************** virtual HRESULT GetADSIProperty( LPCWSTR lpszPropertyName, CADSIProperty **ppADSIProperty) = 0; //*************************************************************************** // // CDSClassProvider::GetWBEMBaseClassName // // Purpose : Returns the name of the class that is the base class of all classes // provided by this provider. // // Parameters: // None // // Return Value: The name of the base class. NULL if such a class doesnt exist. //*************************************************************************** virtual const BSTR GetWBEMBaseClassName() = 0; //*************************************************************************** // // CDSClassProvider::GetWBEMBaseClass // // Purpose : Returns a pointer to the class that is the base class of all classes // provided by this provider. // // Parameters: // None // // Return Value: The IWbemClassObject pointer to the base class. It is the duty of // user to release the class when done with using it. //*************************************************************************** virtual IWbemClassObject * GetWBEMBaseClass() = 0; // Returns whether the class name is present in the list of classes authorized for this user BOOLEAN IsClassAccessible(); // The IWbemServices pointer stored from Initialize() IWbemServices *m_IWbemServices; // Indicates whether the call to Initialize() was successful BOOLEAN m_bInitializedSuccessfully; // Creates a log file using the m_lpszLogFileName member BOOLEAN CreateLogFile(); // Some literals static BSTR CLASS_STR; // A cache of wbem classes static CWbemCache *s_pWbemCache; // A list of classes to which access has been granted for this user CNamesList m_AccessAllowedClasses; private: // The COM Reference count long m_lReferenceCount ; }; #endif // DS_CLASS_PROVIDER_H