//*************************************************************************** // // Copyright (c) 1998-1999 Microsoft Corporation // // nvalue.h // // alanbos 27-Mar-00 Created. // // General purpose include file. // //*************************************************************************** #ifndef _NVALUE_H_ #define _NVALUE_H_ //*************************************************************************** // // CLASS NAME: // // CSWbemNamedValueSet // // DESCRIPTION: // // Implements the ISWbemNamedValueSetE interface. // //*************************************************************************** class CSWbemNamedValueSet : public ISWbemNamedValueSet, public ISWbemInternalContext, public IObjectSafety, public ISupportErrorInfo, public IProvideClassInfo { private: class CContextDispatchHelp : public CDispatchHelp { public: HRESULT HandleError ( DISPID dispidMember, unsigned short wFlags, DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, UINT FAR* puArgErr, HRESULT hRes ); }; CSWbemServices *m_pSWbemServices; IWbemContext *m_pIWbemContext; CContextDispatchHelp m_Dispatch; CWbemPathCracker *m_pCWbemPathCracker; bool m_bMutable; void BuildContextFromKeyList (); HRESULT SetValueIntoContext (BSTR bsName, VARIANT *pVal, ULONG lFlags); protected: long m_cRef; //Object reference count public: CSWbemNamedValueSet (void); CSWbemNamedValueSet (CSWbemServices *pService, IWbemContext *pIWbemContext); CSWbemNamedValueSet (CWbemPathCracker *pCWbemPathCracker, bool bMutable = true); ~CSWbemNamedValueSet (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);} // ISWbemInternalContext STDMETHODIMP GetIWbemContext (IWbemContext **pContext); // Collection methods HRESULT STDMETHODCALLTYPE get__NewEnum ( /*[out]*/ IUnknown **ppUnk ); HRESULT STDMETHODCALLTYPE get_Count ( /*[out]*/ long *plCount ); HRESULT STDMETHODCALLTYPE Add ( /*[in]*/ BSTR Name, /*[in]*/ VARIANT *pValue, /*[in]*/ long lFlags, /*[out]*/ ISWbemNamedValue **ppNamedValue ); HRESULT STDMETHODCALLTYPE Item ( /*[in]*/ BSTR Name, /*[in]*/ long lFlags, /*[out]*/ ISWbemNamedValue **ppValue ); HRESULT STDMETHODCALLTYPE Remove ( /*[in]*/ BSTR Name, /*[in]*/ long lFlags ); // ISWbemNamedValueSet methods HRESULT STDMETHODCALLTYPE Clone ( /*[out]*/ ISWbemNamedValueSet **pNewCopy ); HRESULT STDMETHODCALLTYPE DeleteAll ( ); // CSWbemNamedValueSet methods HRESULT STDMETHODCALLTYPE BeginEnumeration ( ); HRESULT STDMETHODCALLTYPE Next ( /*[in]*/ long lFlags, /*[out]*/ ISWbemNamedValue **ppNamedValue ); // 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); }; // Other methods static IWbemContext *GetIWbemContext (IDispatch *pDispatch, IServiceProvider *pServiceProvider = NULL); static IDispatch *GetSWbemContext(IDispatch *pDispatch, IServiceProvider *pServiceProvider, CSWbemServices *pServices); IWbemContext *GetIWbemContext () { m_pIWbemContext->AddRef (); return m_pIWbemContext; } CWbemPathCracker *GetWbemPathCracker () { CWbemPathCracker *pCWbemPathCracker = NULL; if (m_pCWbemPathCracker) { pCWbemPathCracker = m_pCWbemPathCracker; pCWbemPathCracker->AddRef (); } return pCWbemPathCracker; } }; //*************************************************************************** // // CLASS NAME: // // CSWbemNamedValue // // DESCRIPTION: // // Implements the ISWbemNamedValue interface. // //*************************************************************************** class CSWbemNamedValue : public ISWbemNamedValue, public ISupportErrorInfo, public IProvideClassInfo { private: class CNamedValueDispatchHelp : public CDispatchHelp { public: HRESULT HandleError ( DISPID dispidMember, unsigned short wFlags, DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, UINT FAR* puArgErr, HRESULT hRes ); bool HandleNulls ( DISPID dispidMember, unsigned short wFlags) { return false; } }; CSWbemServices *m_pSWbemServices; CSWbemNamedValueSet *m_pCSWbemNamedValueSet; CNamedValueDispatchHelp m_Dispatch; BSTR m_name; bool m_bMutable; protected: long m_cRef; //Object reference count public: CSWbemNamedValue (CSWbemServices *pService, CSWbemNamedValueSet *pCSWbemNamedValueSet, BSTR name, bool bMutable = true); ~CSWbemNamedValue (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);} // ISWbemNamedValue methods HRESULT STDMETHODCALLTYPE get_Value ( /*[out]*/ VARIANT *value ); HRESULT STDMETHODCALLTYPE put_Value ( /*[in]*/ VARIANT *value ); HRESULT STDMETHODCALLTYPE get_Name ( /*[out]*/ BSTR *name ); // ISupportErrorInfo methods HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo ( /* [in] */ REFIID riid ); // IProvideClassInfo methods HRESULT STDMETHODCALLTYPE GetClassInfo ( /* [in,out] */ ITypeInfo **ppTI ) { return m_Dispatch.GetClassInfo (ppTI); }; }; #endif