Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

436 lines
12 KiB

//***************************************************************************
//
// 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