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

328 lines
8.4 KiB
C++

//***************************************************************************
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// objobjp.h
//
// alanbos 13-Feb-98 Created.
//
// Implementation of IWbemObjectPathEx for ISWbemObjectEx.
//
//***************************************************************************
#ifndef _OBJOBJP_H_
#define _OBJOBJP_H_
class CSWbemObjectObjectPathSecurity;
//***************************************************************************
//
// CLASS NAME:
//
// CSWbemObjectObjectPath
//
// DESCRIPTION:
//
// Implements the ISWbemObjectPath interface for the
// ISWbemObject.Path_ property.
//
//***************************************************************************
class CSWbemObjectObjectPath : public ISWbemObjectPath,
public ISupportErrorInfo,
public IProvideClassInfo
{
private:
class CObjectObjectPathDispatchHelp : public CDispatchHelp
{
public:
bool HandleNulls (
DISPID dispidMember,
unsigned short wFlags)
{
return false;
}
};
IWbemClassObject *m_pIWbemClassObject;
CSWbemServices *m_pSWbemServices;
CObjectObjectPathDispatchHelp m_Dispatch;
CWbemSite *m_pSite;
CSWbemObjectObjectPathSecurity *m_pSecurity;
HRESULT STDMETHODCALLTYPE GetStrVal (BSTR *value, LPWSTR name);
HRESULT RaiseReadOnlyException ()
{
m_Dispatch.RaiseException (WBEM_E_READ_ONLY);
return WBEM_E_READ_ONLY;
}
protected:
long m_cRef; //Object reference count
public:
CSWbemObjectObjectPath(CSWbemServices *pSWbemServices, CSWbemObject *pSObject);
~CSWbemObjectObjectPath(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)
{
return RaiseReadOnlyException ();
}
HRESULT STDMETHODCALLTYPE get_RelPath(
/* [retval][out] */ BSTR __RPC_FAR *value) ;
HRESULT STDMETHODCALLTYPE put_RelPath(
/* [in] */ BSTR __RPC_FAR value)
{
return RaiseReadOnlyException ();
}
HRESULT STDMETHODCALLTYPE get_DisplayName(
/* [retval][out] */ BSTR __RPC_FAR *value) ;
HRESULT STDMETHODCALLTYPE put_DisplayName(
/* [in] */ BSTR __RPC_FAR value)
{
return RaiseReadOnlyException ();
}
HRESULT STDMETHODCALLTYPE get_Namespace(
/* [retval][out] */ BSTR __RPC_FAR *value) ;
HRESULT STDMETHODCALLTYPE put_Namespace(
/* [in] */ BSTR __RPC_FAR value)
{
return RaiseReadOnlyException ();
}
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)
{
return RaiseReadOnlyException ();
}
HRESULT STDMETHODCALLTYPE get_IsClass(
/* [retval][out] */ VARIANT_BOOL __RPC_FAR *value) ;
HRESULT STDMETHODCALLTYPE SetAsClass()
{
return RaiseReadOnlyException ();
}
HRESULT STDMETHODCALLTYPE get_IsSingleton(
/* [retval][out] */ VARIANT_BOOL __RPC_FAR *value) ;
HRESULT STDMETHODCALLTYPE SetAsSingleton()
{
return RaiseReadOnlyException ();
}
HRESULT STDMETHODCALLTYPE get_Class(
/* [retval][out] */ BSTR __RPC_FAR *value) ;
HRESULT STDMETHODCALLTYPE put_Class(
/* [in] */ BSTR __RPC_FAR value) ;
HRESULT STDMETHODCALLTYPE get_Keys(
/* [out,retval] */ ISWbemNamedValueSet **objKeys);
HRESULT STDMETHODCALLTYPE get_Security_(
/* [out,retval] */ ISWbemSecurity **objKeys);
HRESULT STDMETHODCALLTYPE get_Locale(
/* [retval][out] */ BSTR __RPC_FAR *value) ;
HRESULT STDMETHODCALLTYPE put_Locale(
/* [in] */ BSTR __RPC_FAR value)
{
return RaiseReadOnlyException ();
}
HRESULT STDMETHODCALLTYPE get_Authority(
/* [retval][out] */ BSTR __RPC_FAR *value) ;
HRESULT STDMETHODCALLTYPE put_Authority(
/* [in] */ BSTR __RPC_FAR value)
{
return RaiseReadOnlyException ();
}
// IProvideClassInfo methods
HRESULT STDMETHODCALLTYPE GetClassInfo
(
/* [in] */ ITypeInfo **ppTI
)
{
return m_Dispatch.GetClassInfo (ppTI);
}
// ISupportErrorInfo methods
HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo
(
/* [in] */ REFIID riid
);
};
//***************************************************************************
//
// CLASS NAME:
//
// CSWbemObjectObjectPathSecurity
//
// DESCRIPTION:
//
// Implements the ISWbemSecurity interface for CSWbemObjectObjectPath.
//
//***************************************************************************
class CSWbemObjectObjectPathSecurity : public ISWbemSecurity,
public ISupportErrorInfo,
public IProvideClassInfo
{
private:
CSWbemPrivilegeSet *m_pPrivilegeSet;
CDispatchHelp m_Dispatch;
WbemImpersonationLevelEnum m_dwImpLevel;
WbemAuthenticationLevelEnum m_dwAuthnLevel;
BSTR m_bsAuthority;
HRESULT RaiseReadOnlyException ()
{
m_Dispatch.RaiseException (WBEM_E_READ_ONLY);
return WBEM_E_READ_ONLY;
}
protected:
long m_cRef; //Object reference count
public:
CSWbemObjectObjectPathSecurity (CSWbemServices *pSWbemServices);
virtual ~CSWbemObjectObjectPathSecurity (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
)
{
return RaiseReadOnlyException ();
}
HRESULT STDMETHODCALLTYPE get_AuthenticationLevel
(
/* [out] */ WbemAuthenticationLevelEnum *iAuthenticationLevel
);
HRESULT STDMETHODCALLTYPE put_AuthenticationLevel
(
/* [in] */ WbemAuthenticationLevelEnum iAuthenticationLevel
)
{
return RaiseReadOnlyException ();
}
HRESULT STDMETHODCALLTYPE get_Privileges
(
/* [out] */ ISWbemPrivilegeSet **objWbemPrivileges
);
// ISupportErrorInfo methods
HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo
(
/* [in] */ REFIID riid
);
// IProvideClassInfo methods
HRESULT STDMETHODCALLTYPE GetClassInfo
(
/* [in] */ ITypeInfo **ppTI
)
{
return m_Dispatch.GetClassInfo (ppTI);
}
// Other methods
CSWbemPrivilegeSet *GetPrivilegeSet ()
{
CSWbemPrivilegeSet *pPrivSet = m_pPrivilegeSet;
if (pPrivSet)
pPrivSet->AddRef ();
return pPrivSet;
}
BSTR &GetAuthority ()
{
return m_bsAuthority;
}
};
#endif