windows-nt/Source/XPSP1/NT/admin/wmi/wbem/scripting/object.h
2020-09-26 16:20:57 +08:00

517 lines
14 KiB
C++

//***************************************************************************
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// object.h
//
// alanbos 27-Mar-00 Created.
//
// CSWbemObject and CSWbemObjectSet definition.
//
//***************************************************************************
#ifndef _OBJECT_H_
#define _OBJECT_H_
//***************************************************************************
//
// CLASS NAME:
//
// CSWbemObject
//
// DESCRIPTION:
//
// Implements the ISWbemObjectEx interface.
//
//***************************************************************************
class CSWbemObject : public ISWbemObjectEx,
public IDispatchEx,
public ISWbemInternalObject,
public IObjectSafety,
public ISupportErrorInfo,
public IProvideClassInfo
{
friend CSWbemServices;
private:
bool m_isErrorObject;
CSWbemServices *m_pSWbemServices;
IWbemClassObject *m_pIWbemClassObject;
CWbemDispatchMgr *m_pDispatch;
IServiceProvider *m_pIServiceProvider;
IWbemRefresher *m_pIWbemRefresher;
bool m_bCanUseRefresher;
// If an embedded object, we store the parent site
CWbemSite *m_pSite;
bool CastToScope (IDispatch *pContext, CComPtr<ISWbemServicesEx> &pISWbemServicesEx);
protected:
long m_cRef; //Object reference count
public:
CSWbemObject(CSWbemServices *pService, IWbemClassObject *pIWbemClassObject,
CSWbemSecurity *pSecurity = NULL, bool isErrorObject = false);
virtual ~CSWbemObject(void);
//Non-delegating object IUnknown
STDMETHODIMP QueryInterface(REFIID, LPVOID*);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IDispatch 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);
// ISWbemObject methods
HRESULT STDMETHODCALLTYPE Put_
(
/*[in]*/ long lFlags,
/*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext,
/*[out]*/ ISWbemObjectPath **ppObject
);
HRESULT STDMETHODCALLTYPE Delete_
(
/*[in]*/ long lFlags,
/*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext
);
HRESULT STDMETHODCALLTYPE Instances_
(
/*[in]*/ long lFlags,
/*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext,
/*[out]*/ ISWbemObjectSet **ppEnum
);
HRESULT STDMETHODCALLTYPE Subclasses_
(
/*[in]*/ long lFlags,
/*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext,
/*[out]*/ ISWbemObjectSet **ppEnum
);
HRESULT STDMETHODCALLTYPE ExecMethod_
(
/*[in]*/ BSTR methodName,
/*[in]*/ /*ISWbemObject*/ IDispatch *pInParams,
/*[in]*/ long lFlags,
/*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext,
/*[out]*/ ISWbemObject **ppOutParams
);
HRESULT STDMETHODCALLTYPE Associators_
(
/*[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 References_
(
/*[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 Clone_
(
/*[out]*/ ISWbemObject **ppCopy
);
HRESULT STDMETHODCALLTYPE GetObjectText_
(
/*[in]*/ long lFlags,
/*[out]*/ BSTR *pObjectText
);
HRESULT STDMETHODCALLTYPE SpawnDerivedClass_
(
/*[in]*/ long lFlags,
/*[out]*/ ISWbemObject** ppNewClass
);
HRESULT STDMETHODCALLTYPE SpawnInstance_
(
/*[in]*/ long lFlags,
/*[out]*/ ISWbemObject** ppNewInstance
);
HRESULT STDMETHODCALLTYPE CompareTo_
(
/*[in]*/ /*ISWbemObject*/ IDispatch *pCompareTo,
/*[in]*/ long lFlags,
/*[out]*/ VARIANT_BOOL *result
);
HRESULT STDMETHODCALLTYPE get_Qualifiers_
(
/*[out]*/ ISWbemQualifierSet **ppQualifierSet
);
HRESULT STDMETHODCALLTYPE get_Properties_
(
/*[out]*/ ISWbemPropertySet **ppPropertySet
);
HRESULT STDMETHODCALLTYPE get_Methods_
(
/*[out]*/ ISWbemMethodSet **ppMethodSet
);
HRESULT STDMETHODCALLTYPE get_Derivation_
(
/*[out]*/ VARIANT *pClassNames
);
HRESULT STDMETHODCALLTYPE get_Path_
(
/*[out]*/ ISWbemObjectPath **ppObjectPath
);
// Async methods
HRESULT STDMETHODCALLTYPE PutAsync_(
/* [in] */ IDispatch __RPC_FAR *pAsyncNotify,
/* [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,
/* [defaultvalue][optional][in] */ long iFlags,
/* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objContext,
/* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext);
HRESULT STDMETHODCALLTYPE InstancesAsync_(
/* [in] */ IDispatch __RPC_FAR *pAsyncNotify,
/* [defaultvalue][optional][in] */ long iFlags,
/* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objContext,
/* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext);
HRESULT STDMETHODCALLTYPE SubclassesAsync_(
/* [in] */ IDispatch __RPC_FAR *pAsyncNotify,
/* [defaultvalue][optional][in] */ long iFlags,
/* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *objContext,
/* [defaultvalue][optional][in] */ IDispatch __RPC_FAR *pAsyncContext);
HRESULT STDMETHODCALLTYPE AssociatorsAsync_(
/* [in] */ IDispatch __RPC_FAR *pAsyncNotify,
/* [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 ReferencesAsync_(
/* [in] */ IDispatch __RPC_FAR *pAsyncNotify,
/* [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 ExecMethodAsync_(
/* [in] */ IDispatch __RPC_FAR *pAsyncNotify,
/* [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
);
// ISWbemObjectEx methods
HRESULT STDMETHODCALLTYPE Refresh_ (
/*[ in ]*/ long iFlags,
/*[ in ]*/ /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet
);
HRESULT STDMETHODCALLTYPE get_SystemProperties_
(
/*[out]*/ ISWbemPropertySet **ppPropertySet
);
HRESULT STDMETHODCALLTYPE GetText_ (
/*[in]*/ WbemObjectTextFormatEnum iObjectTextFormat,
/*[in]*/ long iFlags,
/*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
/*[out, retval]*/ BSTR *bsText
);
HRESULT STDMETHODCALLTYPE SetFromText_ (
/*[in]*/ BSTR bsText,
/*[in]*/ WbemObjectTextFormatEnum iObjectTextFormat,
/*[in]*/ long iFlags,
/*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet
);
// ISWbemInternalObject methods
HRESULT STDMETHODCALLTYPE GetIWbemClassObject (IWbemClassObject **ppObject);
HRESULT STDMETHODCALLTYPE SetSite (ISWbemInternalObject *pParentObject,
BSTR propertyName, long index = -1);
HRESULT STDMETHODCALLTYPE UpdateSite ();
// 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_pDispatch) ? m_pDispatch->GetClassInfo (ppTI) : E_FAIL;
};
// Other methods
static IWbemClassObject *GetIWbemClassObject (IDispatch *pDispatch);
IWbemClassObject* GetIWbemClassObject ()
{
m_pIWbemClassObject->AddRef ();
return m_pIWbemClassObject;
}
void SetIWbemClassObject (IWbemClassObject *pIWbemClassObject);
static void SetSite (IDispatch *pDispatch,
ISWbemInternalObject *pSObject, BSTR propertyName, long index = -1);
};
//***************************************************************************
//
// CLASS NAME:
//
// CSWbemObjectSet
//
// DESCRIPTION:
//
// Implements the ISWbemObjectSet interface.
//
//***************************************************************************
class CSWbemObjectSet : public ISWbemObjectSet,
public ISupportErrorInfo,
public IProvideClassInfo
{
private:
CSWbemServices *m_pSWbemServices;
CDispatchHelp m_Dispatch;
CSWbemSecurity *m_SecurityInfo;
bool m_firstEnumerator;
bool m_bIsEmpty;
protected:
long m_cRef; //Object reference count
public:
CSWbemObjectSet(CSWbemServices *pService, IEnumWbemClassObject *pIEnumWbemClassObject,
CSWbemSecurity *pSecurity = NULL);
CSWbemObjectSet (void);
~CSWbemObjectSet(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);}
// Collection methods
HRESULT STDMETHODCALLTYPE get__NewEnum
(
/*[out]*/ IUnknown **ppUnk
);
HRESULT STDMETHODCALLTYPE get_Count
(
/*[out]*/ long *plCount
);
HRESULT STDMETHODCALLTYPE Item
(
/*[in]*/ BSTR objectPath,
/*[in]*/ long lFlags,
/*[out]*/ ISWbemObject **ppObject
);
// ISWbemObjectSet methods
HRESULT STDMETHODCALLTYPE Reset
(
);
HRESULT STDMETHODCALLTYPE Next
(
/*[in]*/ long lTimeout,
/*[out]*/ ISWbemObject **ppObject
);
HRESULT STDMETHODCALLTYPE Clone
(
/*[out]*/ ISWbemObjectSet **ppEnum
);
HRESULT STDMETHODCALLTYPE Skip
(
/*[in]*/ ULONG lElements,
/*[in]*/ long lTimeout
);
HRESULT STDMETHODCALLTYPE get_Security_
(
/* [in] */ ISWbemSecurity **ppSecurity
);
// ISupportErrorInfo methods
HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo
(
/* [in] */ REFIID riid
);
// IProvideClassInfo methods
HRESULT STDMETHODCALLTYPE GetClassInfo
(
/* [in,out] */ ITypeInfo **ppTI
)
{
return m_Dispatch.GetClassInfo (ppTI);
};
// Other methods
CSWbemServices *GetSWbemServices ()
{
return m_pSWbemServices;
}
HRESULT CloneObjectSet (CSWbemObjectSet **ppEnum);
};
#endif