//*************************************************************************** // // Copyright (c) 1998-1999 Microsoft Corporation // // services.h // // alanbos 27-Mar-00 Created. // // CSWbemServices definition. // //*************************************************************************** #ifndef _SERVICES_H_ #define _SERVICES_H_ //*************************************************************************** // // CLASS NAME: // // CSWbemServices // // DESCRIPTION: // // Implements the IWbemSServices interface. // //*************************************************************************** class CSWbemServices : public ISWbemServicesEx, public IDispatchEx, public ISupportErrorInfo, public ISWbemInternalServices, public IProvideClassInfo { private: CComBSTR m_bsNamespacePath; BSTR m_bsLocale; CDispatchHelp m_Dispatch; CSWbemSecurity* m_SecurityInfo; IServiceProvider *m_pIServiceProvider; IUnsecuredApartment *m_pUnsecuredApartment; static BSTR BuildPath (BSTR bsClassName, VARIANT *pKeyValue); static BSTR BuildPath (BSTR bsClassName, /*ISWbemNamedValueSet*/ IDispatch *pCompoundKeys); protected: long m_cRef; //Object reference count public: CSWbemServices (IWbemServices *pIWbemServices, BSTR bsNamespacePath, BSTR bsAuthority, BSTR bsUser, BSTR bsPassword, CWbemLocatorSecurity *pSecurity = NULL, BSTR bsLocale = NULL); CSWbemServices (IWbemServices *pIWbemServices, BSTR bsNamespacePath, COAUTHIDENTITY *pCoAuthIdentity, BSTR bsPrincipal, BSTR bsAuthority); CSWbemServices (CSWbemServices *pService, CSWbemSecurity *pSecurity); CSWbemServices (ISWbemInternalServices *pService); CSWbemServices (IWbemServices *pIWbemServices, CSWbemServices *pServiceb); IUnsecuredApartment *GetCachedUnsecuredApartment(); ~CSWbemServices(void); //Non-delegating object IUnknown STDMETHODIMP QueryInterface(REFIID, LPVOID*); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // IDispatch methods should be inline STDMETHODIMP GetTypeInfoCount(UINT* pctinfo); STDMETHODIMP GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo** pptinfo); STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR** rgszNames, UINT cNames, LCID lcid, DISPID* rgdispid); STDMETHODIMP Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr); // IDispatchEx methods should be inline HRESULT STDMETHODCALLTYPE GetDispID( /* [in] */ BSTR bstrName, /* [in] */ DWORD grfdex, /* [out] */ DISPID __RPC_FAR *pid); /* [local] */ HRESULT STDMETHODCALLTYPE InvokeEx( /* [in] */ DISPID id, /* [in] */ LCID lcid, /* [in] */ WORD wFlags, /* [in] */ DISPPARAMS __RPC_FAR *pdp, /* [out] */ VARIANT __RPC_FAR *pvarRes, /* [out] */ EXCEPINFO __RPC_FAR *pei, /* [unique][in] */ IServiceProvider __RPC_FAR *pspCaller); HRESULT STDMETHODCALLTYPE DeleteMemberByName( /* [in] */ BSTR bstr, /* [in] */ DWORD grfdex); HRESULT STDMETHODCALLTYPE DeleteMemberByDispID( /* [in] */ DISPID id); HRESULT STDMETHODCALLTYPE GetMemberProperties( /* [in] */ DISPID id, /* [in] */ DWORD grfdexFetch, /* [out] */ DWORD __RPC_FAR *pgrfdex); HRESULT STDMETHODCALLTYPE GetMemberName( /* [in] */ DISPID id, /* [out] */ BSTR __RPC_FAR *pbstrName); HRESULT STDMETHODCALLTYPE GetNextDispID( /* [in] */ DWORD grfdex, /* [in] */ DISPID id, /* [out] */ DISPID __RPC_FAR *pid); HRESULT STDMETHODCALLTYPE GetNameSpaceParent( /* [out] */ IUnknown __RPC_FAR *__RPC_FAR *ppunk); // ISWbemInternalServices methods STDMETHODIMP GetIWbemServices (IWbemServices **ppService); STDMETHODIMP GetNamespacePath (BSTR *bsNamespacePath) { HRESULT hr = WBEM_E_FAILED; if (bsNamespacePath) hr = m_bsNamespacePath.CopyTo (bsNamespacePath); return hr; } STDMETHODIMP GetLocale (BSTR *bsLocale) { HRESULT hr = WBEM_E_FAILED; if (bsLocale) { *bsLocale = SysAllocString (GetLocale ()); hr = S_OK; } return hr; } STDMETHODIMP GetISWbemInternalSecurity (ISWbemInternalSecurity **ppISWbemInternalSecurity) { HRESULT hr = WBEM_E_FAILED; if (ppISWbemInternalSecurity && m_SecurityInfo) { m_SecurityInfo->QueryInterface (IID_ISWbemInternalSecurity, (void**) ppISWbemInternalSecurity); hr = S_OK; } return hr; } // ISWbemServices methods HRESULT STDMETHODCALLTYPE Get ( /*[in]*/ BSTR objectPath, /*[in]*/ long lFlags, /*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext, /*[out]*/ ISWbemObject **ppObject ); HRESULT STDMETHODCALLTYPE Delete ( /*[in]*/ BSTR objectPath, /*[in]*/ long lFlags, /*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext ); HRESULT STDMETHODCALLTYPE InstancesOf ( /*[in]*/ BSTR className, /*[in]*/ long lFlags, /*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext, /*[out]*/ ISWbemObjectSet **ppEnum ); HRESULT STDMETHODCALLTYPE ExecQuery ( /*[in]*/ BSTR Query, /*[in]*/ BSTR QueryLanguage, /*[in]*/ long lFlags, /*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext, /*[out]*/ ISWbemObjectSet **ppEnum ); HRESULT STDMETHODCALLTYPE ExecNotificationQuery ( /*[in]*/ BSTR Query, /*[in]*/ BSTR QueryLanguage, /*[in]*/ long lFlags, /*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext, /*[out]*/ ISWbemEventSource **ppEnum ); HRESULT STDMETHODCALLTYPE AssociatorsOf ( /*[in]*/ BSTR objectPath, /*[in]*/ BSTR assocClass, /*[in]*/ BSTR resultClass, /*[in]*/ BSTR resultRole, /*[in]*/ BSTR role, /*[in]*/ VARIANT_BOOL classesOnly, /*[in]*/ VARIANT_BOOL schemaOnly, /*[in]*/ BSTR requiredAssocQualifier, /*[in]*/ BSTR requiredQualifier, /*[in]*/ long lFlags, /*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext, /*[out]*/ ISWbemObjectSet **ppEnum ); HRESULT STDMETHODCALLTYPE ReferencesTo ( /*[in]*/ BSTR objectPath, /*[in]*/ BSTR resultClass, /*[in]*/ BSTR role, /*[in]*/ VARIANT_BOOL classesOnly, /*[in]*/ VARIANT_BOOL schemaOnly, /*[in]*/ BSTR requiredQualifier, /*[in]*/ long lFlags, /*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext, /*[out]*/ ISWbemObjectSet **ppEnum ); HRESULT STDMETHODCALLTYPE ExecMethod ( /*[in]*/ BSTR className, /*[in]*/ BSTR methodName, /*[in]*/ /*ISWbemObject*/ IDispatch *pInParams, /*[in]*/ long lFlags, /*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext, /*[out]*/ ISWbemObject **ppOutParams ); HRESULT STDMETHODCALLTYPE SubclassesOf ( /*[in]*/ BSTR superclass, /*[in]*/ long lFlags, /*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext, /*[out]*/ ISWbemObjectSet **ppEnum ); HRESULT STDMETHODCALLTYPE GetAsync ( /* [in] */ IDispatch __RPC_FAR *pAsyncNotify, /* [defaultvalue][optional][in] */ BSTR strObjectPath, /* [defaultvalue][optional][in] */ long iFlags, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objContext, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext ); HRESULT STDMETHODCALLTYPE DeleteAsync ( /* [in] */ IDispatch __RPC_FAR *pAsyncNotify, /* [in] */ BSTR strObjectPath, /* [defaultvalue][optional][in] */ long iFlags, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objContext, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext ); HRESULT STDMETHODCALLTYPE InstancesOfAsync ( /* [in] */ IDispatch __RPC_FAR *pAsyncNotify, /* [in] */ BSTR strClass, /* [defaultvalue][optional][in] */ long iFlags, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objContext, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext ); HRESULT STDMETHODCALLTYPE SubclassesOfAsync ( /* [in] */ IDispatch __RPC_FAR *pAsyncNotify, /* [defaultvalue][optional][in] */ BSTR strSuperclass, /* [defaultvalue][optional][in] */ long iFlags, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objContext, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext ); HRESULT STDMETHODCALLTYPE ExecQueryAsync ( /* [in] */ IDispatch __RPC_FAR *pAsyncNotify, /* [in] */ BSTR Query, /* [defaultvalue][optional][in] */ BSTR QueryLanguage, /* [defaultvalue][optional][in] */ long lFlags, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pContext, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext ); HRESULT STDMETHODCALLTYPE AssociatorsOfAsync ( /* [in] */ IDispatch __RPC_FAR *pAsyncNotify, /* [in] */ BSTR strObjectPath, /* [defaultvalue][optional][in] */ BSTR strAssocClass, /* [defaultvalue][optional][in] */ BSTR strResultClass, /* [defaultvalue][optional][in] */ BSTR strResultRole, /* [defaultvalue][optional][in] */ BSTR strRole, /* [defaultvalue][optional][in] */ VARIANT_BOOL bClassesOnly, /* [defaultvalue][optional][in] */ VARIANT_BOOL bSchemaOnly, /* [defaultvalue][optional][in] */ BSTR strRequiredAssocQualifier, /* [defaultvalue][optional][in] */ BSTR strRequiredQualifier, /* [defaultvalue][optional][in] */ long iFlags, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objContext, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext ); HRESULT STDMETHODCALLTYPE ReferencesToAsync ( /* [in] */ IDispatch __RPC_FAR *pAsyncNotify, /* [in] */ BSTR objectPath, /* [defaultvalue][optional][in] */ BSTR strResultClass, /* [defaultvalue][optional][in] */ BSTR strRole, /* [defaultvalue][optional][in] */ VARIANT_BOOL bClassesOnly, /* [defaultvalue][optional][in] */ VARIANT_BOOL bSchemaOnly, /* [defaultvalue][optional][in] */ BSTR strRequiredQualifier, /* [defaultvalue][optional][in] */ long iFlags, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objContext, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext ); HRESULT STDMETHODCALLTYPE ExecNotificationQueryAsync ( /* [in] */ IDispatch __RPC_FAR *pAsyncNotify, /* [in] */ BSTR Query, /* [defaultvalue][optional][in] */ BSTR strQueryLanguage, /* [defaultvalue][optional][in] */ long iFlags, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objContext, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext ); HRESULT STDMETHODCALLTYPE ExecMethodAsync ( /* [in] */ IDispatch __RPC_FAR *pAsyncNotify, /* [in] */ BSTR strObjectPath, /* [in] */ BSTR strMethodName, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objInParams, /* [defaultvalue][optional][in] */ long iFlags, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objContext, /* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext ); HRESULT STDMETHODCALLTYPE get_Security_ ( /* [in] */ ISWbemSecurity **ppSecurity ); // ISWbemServicesEx methods HRESULT STDMETHODCALLTYPE Put( /* [in] */ ISWbemObjectEx *objWbemObject, /* [in] */ long iFlags, /* [in] */ /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet, /* [out, retval] */ ISWbemObjectPath **objWbemObjectPath ); HRESULT STDMETHODCALLTYPE PutAsync( /* [in] */ ISWbemSink *objWbemSink, /* [in] */ ISWbemObjectEx *objWbemObject, /* [in] */ long iFlags, /* [in] */ /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet, /* [in] */ /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext ); // ISupportErrorInfo methods HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo ( /* [in] */ REFIID riid ); // IProvideClassInfo methods HRESULT STDMETHODCALLTYPE GetClassInfo ( /* [in,out] */ ITypeInfo **ppTI ) { return m_Dispatch.GetClassInfo (ppTI); }; // Other methods CSWbemSecurity *GetSecurityInfo () { CSWbemSecurity *pInfo = NULL; if (m_SecurityInfo) { pInfo = m_SecurityInfo; pInfo->AddRef (); } return pInfo; } BSTR GetLocale () { return m_bsLocale; } const CComBSTR & GetPath () { return m_bsNamespacePath; } HRESULT CancelAsyncCall(IWbemObjectSink *sink); IWbemServices *GetIWbemServices () { IWbemServices *pService = NULL; if (m_SecurityInfo) pService = (IWbemServices *) m_SecurityInfo->GetProxy (); return pService; } static IWbemServices *GetIWbemServices (IDispatch *pDispatch); }; #endif