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.
 
 
 
 
 
 

302 lines
7.1 KiB

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