//*************************************************************************** // // Copyright (c) 1998-1999 Microsoft Corporation // // sobjpath.h // // alanbos 27-Mar-00 Created. // // CSWbemObjectPath definition // //*************************************************************************** #ifndef _SOBJPATH_H_ #define _SOBJPATH_H_ //*************************************************************************** // // CLASS NAME: // // CSWbemObjectPath // // DESCRIPTION: // // Implements the ISWbemObjectPath interface. // //*************************************************************************** class CSWbemObjectPath : public ISWbemObjectPath, public IObjectSafety, public ISupportErrorInfo, public IProvideClassInfo { friend CSWbemServices; private: class CObjectPathDispatchHelp : public CDispatchHelp { public: bool HandleNulls ( DISPID dispidMember, unsigned short wFlags) { return false; } }; CObjectPathDispatchHelp m_Dispatch; class CWbemObjectPathSecurity : public ISWbemSecurity, public ISupportErrorInfo, public IProvideClassInfo { private: CDispatchHelp m_Dispatch; protected: long m_cRef; public: CWbemObjectPathSecurity (CSWbemSecurity *pSecurity); CWbemObjectPathSecurity (ISWbemSecurity *pObjectPathSecurity); virtual ~CWbemObjectPathSecurity (void); //Non-delegating object IUnknown STDMETHODIMP QueryInterface(REFIID, LPVOID*); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // IDispatch STDMETHODIMP GetTypeInfoCount(UINT* pctinfo) {return m_Dispatch.GetTypeInfoCount(pctinfo);} STDMETHODIMP GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo** pptinfo) {return m_Dispatch.GetTypeInfo(itinfo, lcid, pptinfo);} STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR** rgszNames, UINT cNames, LCID lcid, DISPID* rgdispid) {return m_Dispatch.GetIDsOfNames(riid, rgszNames, cNames, lcid, rgdispid);} STDMETHODIMP Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr) {return m_Dispatch.Invoke(dispidMember, riid, lcid, wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr);} // ISWbemSecurity methods HRESULT STDMETHODCALLTYPE get_ImpersonationLevel ( /* [out] */ WbemImpersonationLevelEnum *iImpersonationLevel ); HRESULT STDMETHODCALLTYPE put_ImpersonationLevel ( /* [in] */ WbemImpersonationLevelEnum iImpersonationLevel ); HRESULT STDMETHODCALLTYPE get_AuthenticationLevel ( /* [out] */ WbemAuthenticationLevelEnum *iAuthenticationLevel ); HRESULT STDMETHODCALLTYPE put_AuthenticationLevel ( /* [in] */ WbemAuthenticationLevelEnum iAuthenticationLevel ); HRESULT STDMETHODCALLTYPE get_Privileges ( /* [out] */ ISWbemPrivilegeSet **objWbemPrivileges ); // ISupportErrorInfo methods HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo ( /* [in] */ REFIID riid ); // IProvideClassInfo methods HRESULT STDMETHODCALLTYPE GetClassInfo ( /* [in,out] */ ITypeInfo **ppTI ) { return m_Dispatch.GetClassInfo (ppTI); }; bool m_authnSpecified; bool m_impSpecified; enum WbemAuthenticationLevelEnum m_authnLevel; enum WbemImpersonationLevelEnum m_impLevel; CSWbemPrivilegeSet *m_pPrivilegeSet; }; CWbemObjectPathSecurity *m_pSecurity; BSTR m_bsLocale; BSTR m_bsAuthority; protected: long m_cRef; //Object reference count CWbemPathCracker *m_pPathCracker; protected: public: CSWbemObjectPath(CSWbemSecurity *pSecurity = NULL, BSTR bsLocale = NULL); CSWbemObjectPath(CSWbemObjectPath & wbemObjectPath); CSWbemObjectPath(ISWbemObjectPath *pISWbemObjectPath); ~CSWbemObjectPath(void); //Non-delegating object IUnknown STDMETHODIMP QueryInterface(REFIID, LPVOID*); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // IDispatch STDMETHODIMP GetTypeInfoCount(UINT* pctinfo) {return m_Dispatch.GetTypeInfoCount(pctinfo);} STDMETHODIMP GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo** pptinfo) {return m_Dispatch.GetTypeInfo(itinfo, lcid, pptinfo);} STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR** rgszNames, UINT cNames, LCID lcid, DISPID* rgdispid) {return m_Dispatch.GetIDsOfNames(riid, rgszNames, cNames, lcid, rgdispid);} STDMETHODIMP Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr) {return m_Dispatch.Invoke(dispidMember, riid, lcid, wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr);} // ISWbemObjectPath methods HRESULT STDMETHODCALLTYPE get_Path( /* [retval][out] */ BSTR __RPC_FAR *value) ; HRESULT STDMETHODCALLTYPE put_Path( /* [in] */ BSTR __RPC_FAR value) ; HRESULT STDMETHODCALLTYPE get_RelPath( /* [retval][out] */ BSTR __RPC_FAR *value) ; HRESULT STDMETHODCALLTYPE put_RelPath( /* [in] */ BSTR __RPC_FAR value) ; HRESULT STDMETHODCALLTYPE get_DisplayName( /* [retval][out] */ BSTR __RPC_FAR *value) ; HRESULT STDMETHODCALLTYPE put_DisplayName( /* [in] */ BSTR __RPC_FAR value) ; HRESULT STDMETHODCALLTYPE get_Namespace( /* [retval][out] */ BSTR __RPC_FAR *value) ; HRESULT STDMETHODCALLTYPE put_Namespace( /* [in] */ BSTR __RPC_FAR value) ; HRESULT STDMETHODCALLTYPE get_ParentNamespace( /* [retval][out] */ BSTR __RPC_FAR *value) ; HRESULT STDMETHODCALLTYPE get_Server( /* [retval][out] */ BSTR __RPC_FAR *value) ; HRESULT STDMETHODCALLTYPE put_Server( /* [in] */ BSTR __RPC_FAR value) ; HRESULT STDMETHODCALLTYPE get_IsClass( /* [retval][out] */ VARIANT_BOOL __RPC_FAR *value) ; HRESULT STDMETHODCALLTYPE SetAsClass() ; HRESULT STDMETHODCALLTYPE get_IsSingleton( /* [retval][out] */ VARIANT_BOOL __RPC_FAR *value) ; HRESULT STDMETHODCALLTYPE SetAsSingleton() ; HRESULT STDMETHODCALLTYPE get_Class( /* [retval][out] */ BSTR __RPC_FAR *value) ; HRESULT STDMETHODCALLTYPE put_Class( /* [in] */ BSTR __RPC_FAR value) ; HRESULT STDMETHODCALLTYPE get_Keys( /* [retval][out] */ ISWbemNamedValueSet **objKeys) ; HRESULT STDMETHODCALLTYPE get_Security_( /* [retval][out] */ ISWbemSecurity **objSecurity) ; HRESULT STDMETHODCALLTYPE get_Locale( /* [retval][out] */ BSTR __RPC_FAR *value) ; HRESULT STDMETHODCALLTYPE put_Locale( /* [in] */ BSTR __RPC_FAR value) ; HRESULT STDMETHODCALLTYPE get_Authority( /* [retval][out] */ BSTR __RPC_FAR *value) ; HRESULT STDMETHODCALLTYPE put_Authority( /* [in] */ BSTR __RPC_FAR value) ; // IObjectSafety methods HRESULT STDMETHODCALLTYPE SetInterfaceSafetyOptions ( /* [in] */ REFIID riid, /* [in] */ DWORD dwOptionSetMask, /* [in] */ DWORD dwEnabledOptions ) { return (dwOptionSetMask & dwEnabledOptions) ? E_FAIL : S_OK; } HRESULT STDMETHODCALLTYPE GetInterfaceSafetyOptions( /* [in] */ REFIID riid, /* [out] */ DWORD __RPC_FAR *pdwSupportedOptions, /* [out] */ DWORD __RPC_FAR *pdwEnabledOptions ) { if (pdwSupportedOptions) *pdwSupportedOptions = 0; if (pdwEnabledOptions) *pdwEnabledOptions = 0; return S_OK; } // ISupportErrorInfo methods HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo ( /* [in] */ REFIID riid ); // IProvideClassInfo methods HRESULT STDMETHODCALLTYPE GetClassInfo ( /* [in,out] */ ITypeInfo **ppTI ) { return m_Dispatch.GetClassInfo (ppTI); }; // Methods of CSWbemObjectPath static bool GetObjectPath (IWbemClassObject *pIWbemClassObject, CComBSTR & bsPath); static bool GetParentPath (IWbemClassObject *pIWbemClassObject, CComBSTR & bsPath); static bool CompareObjectPaths (IWbemClassObject *pIWbemClassObject, CWbemPathCracker & objectPath); }; #endif