//*************************************************************************** // // Copyright (c) 1998-1999 Microsoft Corporation // // PRIVILEGE.H // // alanbos 30-Sep-98 Created. // // Define Privilege classes. // //*************************************************************************** #ifndef _PRIVILEGE_H_ #define _PRIVILEGE_H_ using namespace std; class CEnumPrivilegeSet; //*************************************************************************** // // CLASS NAME: // // CSWbemPrivilege // // DESCRIPTION: // // Implements the ISWbemPrivilege interface. // //*************************************************************************** class CSWbemPrivilege : public ISWbemPrivilege, public ISupportErrorInfo, public IProvideClassInfo { private: CDispatchHelp m_Dispatch; LUID m_Luid; bool m_bIsEnabled; WbemPrivilegeEnum m_privilege; protected: long m_cRef; //Object reference count public: CSWbemPrivilege (WbemPrivilegeEnum privilege, LUID &luid, bool bIsEnabled); virtual ~CSWbemPrivilege (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);} // ISWbemPrivilege methods HRESULT STDMETHODCALLTYPE get_IsEnabled ( /* [out] */ VARIANT_BOOL *bIsEnabled ); HRESULT STDMETHODCALLTYPE put_IsEnabled ( /* [in] */ VARIANT_BOOL bIsEnabled ); HRESULT STDMETHODCALLTYPE get_Name ( /* [out] */ BSTR *bsName ); HRESULT STDMETHODCALLTYPE get_DisplayName ( /* [out] */ BSTR *bsDisplayName ); HRESULT STDMETHODCALLTYPE get_Identifier ( /* [out] */ WbemPrivilegeEnum *iPrivilege ); // ISupportErrorInfo methods HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo ( /* [in] */ REFIID riid ); // IProvideClassInfo methods HRESULT STDMETHODCALLTYPE GetClassInfo ( /* [in,out] */ ITypeInfo **ppTI ) { return m_Dispatch.GetClassInfo (ppTI); }; // CSWbemPrivilege methods void GetLUID (PLUID pLuid); static TCHAR *GetNameFromId (WbemPrivilegeEnum iPrivilege); static OLECHAR *GetMonikerNameFromId (WbemPrivilegeEnum iPrivilege); static bool GetIdFromMonikerName (OLECHAR *name, WbemPrivilegeEnum &iPrivilege); static bool GetIdFromName (BSTR bsName, WbemPrivilegeEnum &iPrivilege); }; typedef map< WbemPrivilegeEnum,CSWbemPrivilege*,less > PrivilegeMap; //*************************************************************************** // // CLASS NAME: // // CSWbemPrivilegeSet // // DESCRIPTION: // // Implements the ISWbemPrivilegeSet interface. // //*************************************************************************** class CSWbemPrivilegeSet : public ISWbemPrivilegeSet, public ISupportErrorInfo, public IProvideClassInfo { friend CEnumPrivilegeSet; friend CSWbemSecurity; private: bool m_bMutable; CDispatchHelp m_Dispatch; PrivilegeMap m_PrivilegeMap; protected: long m_cRef; //Object reference count public: CSWbemPrivilegeSet (); CSWbemPrivilegeSet (const CSWbemPrivilegeSet &privSet, bool bMutable = true); CSWbemPrivilegeSet (ISWbemPrivilegeSet *pISWbemPrivilegeSet); virtual ~CSWbemPrivilegeSet (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 Item ( /*[in]*/ WbemPrivilegeEnum privilege, /*[out]*/ ISWbemPrivilege **ppPrivilege ); HRESULT STDMETHODCALLTYPE get_Count ( /*[in]*/ long *plCount ); HRESULT STDMETHODCALLTYPE Add ( /*[in]*/ WbemPrivilegeEnum privilege, /*[in]*/ VARIANT_BOOL bIsEnabled, /*[out]*/ ISWbemPrivilege **ppPrivilege ); HRESULT STDMETHODCALLTYPE Remove ( /*[in]*/ WbemPrivilegeEnum privilege ); // CSWbemPrivilegeSet methods HRESULT STDMETHODCALLTYPE DeleteAll ( ); HRESULT STDMETHODCALLTYPE AddAsString ( /*[in]*/ BSTR strPrivilege, /*[in]*/ VARIANT_BOOL bIsEnabled, /*[out]*/ ISWbemPrivilege **ppPrivilege ); // ISupportErrorInfo methods HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo ( /* [in] */ REFIID riid ); // IProvideClassInfo methods HRESULT STDMETHODCALLTYPE GetClassInfo ( /* [in,out] */ ITypeInfo **ppTI ) { return m_Dispatch.GetClassInfo (ppTI); }; // Other methods ULONG GetNumberOfDisabledElements (); PrivilegeMap &GetPrivilegeMap () { return m_PrivilegeMap; } void Reset (CSWbemPrivilegeSet &privSet); }; //*************************************************************************** // // CLASS NAME: // // CEnumPrivilegeSet // // DESCRIPTION: // // Implements the IEnumVARIANT interface for Privilege collections. // //*************************************************************************** class CEnumPrivilegeSet : public IEnumVARIANT { private: long m_cRef; CSWbemPrivilegeSet *m_pPrivilegeSet; PrivilegeMap::iterator m_Iterator; public: CEnumPrivilegeSet (CSWbemPrivilegeSet *pPrivilegeSet); CEnumPrivilegeSet (CSWbemPrivilegeSet *pPrivilegeSet, PrivilegeMap::iterator iterator); virtual ~CEnumPrivilegeSet (void); // Non-delegating object IUnknown STDMETHODIMP QueryInterface(REFIID, LPVOID*); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // IEnumVARIANT STDMETHODIMP Next( unsigned long celt, VARIANT FAR* rgvar, unsigned long FAR* pceltFetched ); STDMETHODIMP Skip( unsigned long celt ); STDMETHODIMP Reset(); STDMETHODIMP Clone( IEnumVARIANT **ppenum ); }; #endif