|
|
#ifndef _INC_DSKQUOTA_CONTROL_H
#define _INC_DSKQUOTA_CONTROL_H
///////////////////////////////////////////////////////////////////////////////
/* File: control.h
Description: Contains declaration for class DiskQuotaControl.
Revision History:
Date Description Programmer -------- --------------------------------------------------- ---------- 05/22/96 Initial creation. BrianAu */ ///////////////////////////////////////////////////////////////////////////////
#ifndef _INC_DSKQUOTA_H
# include "dskquota.h"
#endif
#ifndef _INC_DSKQUOTA_FSOBJECT_H
# include "fsobject.h" // File System object types.
#endif
#ifndef _INC_DSKQUOTA_SIDNAME_H
# include "sidname.h" // Sid Name Resolver.
#endif
#ifndef _INC_DSKQUOTA_NTDS_H
# include "ntds.h" // For DS versions of LookupAccountSid/Name
#endif
#ifndef _INC_DSKQUOTA_DISPATCH_H
# include "dispatch.h" // MIDL-generated header.
#endif
#ifndef _INC_DSKQUOTA_OADISP_H
# include "oadisp.h" // OleAutoDispatch class.
#endif
class DiskQuotaControl : public IDiskQuotaControl { private: LONG m_cRef; // Object ref count.
BOOL m_bInitialized; // Controller initialized?
LONGLONG m_llDefaultQuotaThreshold; // "New User" default threshold.
LONGLONG m_llDefaultQuotaLimit; // "New User" default limit.
FSObject *m_pFSObject; // Volume or directory.
DWORD m_dwFlags; // State of quota system.
PSID_NAME_RESOLVER m_pSidNameResolver; // For getting SID account names.
CMutex m_mutex; // Ensures safe shutdown.
//
// Support for IConnectionPointContainer.
// 1. Static array of supported interface IDs.
// 2. Array of connection pt interface pointers.
// Dynamically grows as clients connect for events.
//
static const IID * const m_rgpIConnPtsSupported[]; PCONNECTIONPOINT *m_rgConnPts; // Array of conn pt object ptrs.
UINT m_cConnPts; // Count of conn pts supported.
//
// Create connection point objects for the supported connection
// point types.
//
HRESULT InitConnectionPoints( VOID);
//
// Read quota information from disk to member variables.
//
HRESULT QueryQuotaInformation( VOID);
//
// Write quota information from member variables to disk.
//
HRESULT SetQuotaInformation( DWORD dwChangeFlags);
HRESULT GetDefaultQuotaItem( PLONGLONG pllItem, PLONGLONG pllValueOut);
//
// Prevent copy construction.
//
DiskQuotaControl(const DiskQuotaControl& control); void operator = (const DiskQuotaControl& control);
public: NTDS m_NTDS;
//
// If you add a new connection point type, add a corresponding enumeration
// member that identifies the location of the conn pt IID in
// m_rgpIConnPtsSupported[].
//
enum { ConnPt_iQuotaEvents = 0, ConnPt_iQuotaEventsDisp = 1, };
DiskQuotaControl(VOID); ~DiskQuotaControl(VOID);
HRESULT NotifyUserNameChanged(PDISKQUOTA_USER pUser);
FSObject *GetFSObjectPtr(VOID) { return m_pFSObject; }
//
// IUnknown methods.
//
STDMETHODIMP QueryInterface( REFIID riid, LPVOID *ppvOut);
STDMETHODIMP_(ULONG) AddRef( VOID);
STDMETHODIMP_(ULONG) Release( VOID);
//
// IConnectionPointContainer methods.
//
STDMETHODIMP FindConnectionPoint( REFIID, PCONNECTIONPOINT *pCP);
STDMETHODIMP EnumConnectionPoints( PENUMCONNECTIONPOINTS *pEnumCP);
//
// IDiskQuotaControl methods.
//
STDMETHODIMP Initialize( LPCWSTR pszFSObjectName, BOOL bReadWrite);
STDMETHODIMP GetQuotaState( LPDWORD pdwState);
STDMETHODIMP SetQuotaState( DWORD dwState);
STDMETHODIMP SetQuotaLogFlags( DWORD dwFlags);
STDMETHODIMP GetQuotaLogFlags( LPDWORD pdwFlags);
STDMETHODIMP SetDefaultQuotaThreshold( LONGLONG llThreshold);
STDMETHODIMP SetDefaultQuotaLimit( LONGLONG llLimit);
STDMETHODIMP GetDefaultQuotaThreshold( PLONGLONG pllThreshold);
STDMETHODIMP GetDefaultQuotaThresholdText( LPWSTR pszText, DWORD cchText);
STDMETHODIMP GetDefaultQuotaLimit( PLONGLONG pllLimit);
STDMETHODIMP GetDefaultQuotaLimitText( LPWSTR pszText, DWORD cchText);
STDMETHODIMP AddUserSid( PSID pSid, DWORD fNameResolution, PDISKQUOTA_USER *ppUser);
STDMETHODIMP AddUserName( LPCWSTR pszLogonName, DWORD fNameResolution, PDISKQUOTA_USER *ppUser);
STDMETHODIMP DeleteUser( PDISKQUOTA_USER pUser);
STDMETHODIMP FindUserSid( PSID pSid, DWORD fNameResolution, PDISKQUOTA_USER *ppUser);
STDMETHODIMP FindUserName( LPCWSTR pszLogonName, PDISKQUOTA_USER *ppUser);
STDMETHODIMP CreateEnumUsers( PSID *rgpSids, DWORD cpSids, DWORD fNameResolution, PENUM_DISKQUOTA_USERS *ppEnum);
STDMETHODIMP CreateUserBatch( PDISKQUOTA_USER_BATCH *ppUserBatch);
STDMETHODIMP InvalidateSidNameCache( VOID);
STDMETHODIMP GiveUserNameResolutionPriority( PDISKQUOTA_USER pUser);
STDMETHODIMP ShutdownNameResolution( VOID); };
class DiskQuotaControlDisp : public DIDiskQuotaControl { public: DiskQuotaControlDisp(PDISKQUOTA_CONTROL pQC);
~DiskQuotaControlDisp(VOID);
//
// IUnknown methods.
//
STDMETHODIMP QueryInterface( REFIID riid, LPVOID *ppvOut);
STDMETHODIMP_(ULONG) AddRef( VOID);
STDMETHODIMP_(ULONG) Release( VOID);
//
// IDispatch methods.
//
STDMETHODIMP GetIDsOfNames( REFIID riid, OLECHAR ** rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
STDMETHODIMP GetTypeInfo( UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
STDMETHODIMP GetTypeInfoCount( UINT *pctinfo);
STDMETHODIMP Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
//
// Automation Properties.
//
STDMETHODIMP put_QuotaState(QuotaStateConstants State); STDMETHODIMP get_QuotaState(QuotaStateConstants *pState);
STDMETHODIMP get_QuotaFileIncomplete(VARIANT_BOOL *pbIncomplete);
STDMETHODIMP get_QuotaFileRebuilding(VARIANT_BOOL *pbRebuilding);
STDMETHODIMP put_LogQuotaThreshold(VARIANT_BOOL bLogThreshold); STDMETHODIMP get_LogQuotaThreshold(VARIANT_BOOL *pbLogThreshold);
STDMETHODIMP put_LogQuotaLimit(VARIANT_BOOL bLogLimit); STDMETHODIMP get_LogQuotaLimit(VARIANT_BOOL *pbLogLimit);
STDMETHODIMP put_DefaultQuotaThreshold(double Threshold); STDMETHODIMP get_DefaultQuotaThreshold(double *pThreshold); STDMETHODIMP get_DefaultQuotaThresholdText(BSTR *pThresholdText);
STDMETHODIMP put_DefaultQuotaLimit(double Limit); STDMETHODIMP get_DefaultQuotaLimit(double *pLimit); STDMETHODIMP get_DefaultQuotaLimitText(BSTR *pLimitText);
STDMETHODIMP put_UserNameResolution(UserNameResolutionConstants ResolutionType); STDMETHODIMP get_UserNameResolution(UserNameResolutionConstants *pResolutionType);
//
// Automation Methods.
//
STDMETHODIMP Initialize( BSTR path, VARIANT_BOOL bReadOnly);
STDMETHODIMP AddUser( BSTR LogonName, DIDiskQuotaUser **ppUser);
STDMETHODIMP DeleteUser( DIDiskQuotaUser *pUser);
STDMETHODIMP FindUser( BSTR LogonName, DIDiskQuotaUser **ppUser);
STDMETHODIMP TranslateLogonNameToSID( BSTR LogonName, BSTR *psid);
STDMETHODIMP _NewEnum( IDispatch **ppEnum);
STDMETHODIMP InvalidateSidNameCache(void);
STDMETHODIMP GiveUserNameResolutionPriority( DIDiskQuotaUser *pUser);
STDMETHODIMP ShutdownNameResolution(void);
private: LONG m_cRef; PDISKQUOTA_CONTROL m_pQC; // For delegation
OleAutoDispatch m_Dispatch; DWORD m_fOleAutoNameResolution; PENUM_DISKQUOTA_USERS m_pUserEnum;
//
// Prevent copy.
//
DiskQuotaControlDisp(const DiskQuotaControlDisp& rhs); DiskQuotaControlDisp& operator = (const DiskQuotaControlDisp& rhs); };
#endif // __DISK_QUOTA_CONTROL_H
|