328 lines
8.4 KiB
C
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
|