Leaked source code of windows server 2003
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.

105 lines
3.6 KiB

  1. #ifndef _INC_DSKQUOTA_POLICY_H
  2. #define _INC_DSKQUOTA_POLICY_H
  3. ///////////////////////////////////////////////////////////////////////////////
  4. /* File: policy.h
  5. Description: Header for policy.cpp.
  6. See policy.cpp for functional description.
  7. Revision History:
  8. Date Description Programmer
  9. -------- --------------------------------------------------- ----------
  10. 02/14/98 Initial creation. BrianAu
  11. */
  12. ///////////////////////////////////////////////////////////////////////////////
  13. #ifndef _GPEDIT_H_
  14. # include <gpedit.h>
  15. #endif
  16. #ifndef _INC_DSKQUOTA_EVENTLOG_H
  17. # include "eventlog.h"
  18. #endif
  19. #ifndef _INC_DSKQUOTA_REGISTRY_H
  20. # include "registry.h"
  21. #endif
  22. //
  23. // Structure used for storing and transferring disk quota policy.
  24. //
  25. struct DISKQUOTAPOLICYINFO
  26. {
  27. LONGLONG llDefaultQuotaThreshold; // Default user quota threshold (bytes).
  28. LONGLONG llDefaultQuotaLimit; // Default user quota limit (bytes).
  29. DWORD dwQuotaState; // NTFS quota state flags.
  30. DWORD dwQuotaLogFlags; // NTFS quota logging flags.
  31. bool bRemovableMedia; // Apply policy to removable media?
  32. };
  33. typedef DISKQUOTAPOLICYINFO *LPDISKQUOTAPOLICYINFO;
  34. typedef const DISKQUOTAPOLICYINFO *LPCDISKQUOTAPOLICYINFO;
  35. #undef INTERFACE
  36. #define INTERFACE IDiskQuotaPolicy
  37. DECLARE_INTERFACE_(IDiskQuotaPolicy, IUnknown)
  38. {
  39. //
  40. // IUnknown methods
  41. //
  42. STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  43. STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  44. STDMETHOD_(ULONG,Release)(THIS) PURE;
  45. //
  46. // IDiskQuotaPolicy methods
  47. //
  48. STDMETHOD(Initialize)(THIS_ LPGPEINFORMATION pGPEInfo, HKEY hkeyRoot) PURE;
  49. STDMETHOD(Load)(THIS_ LPDISKQUOTAPOLICYINFO pInfo) PURE;
  50. STDMETHOD(Apply)(THIS_ LPCDISKQUOTAPOLICYINFO pInfo) PURE;
  51. };
  52. typedef IDiskQuotaPolicy *LPDISKQUOTAPOLICY;
  53. //
  54. // Class for saving/loading/applying disk quota policy information.
  55. // Used by both the MMC policy snapin (server) and the GPE extension (client).
  56. //
  57. class CDiskQuotaPolicy : public IDiskQuotaPolicy
  58. {
  59. public:
  60. explicit CDiskQuotaPolicy(LPGPEINFORMATION pGPEInfo = NULL, HKEY hkeyRoot = NULL, bool bVerboseEventLog = false, BOOL *pbAbort = NULL);
  61. ~CDiskQuotaPolicy(void);
  62. //
  63. // IUnknown interface.
  64. //
  65. STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObj);
  66. STDMETHODIMP_(ULONG) AddRef(void);
  67. STDMETHODIMP_(ULONG) Release(void);
  68. //
  69. // IDiskQuotaPolicy interface.
  70. //
  71. STDMETHODIMP Initialize(LPGPEINFORMATION pGPEInfo, HKEY hkeyRoot);
  72. STDMETHODIMP Load(DISKQUOTAPOLICYINFO *pPolicyInfo);
  73. STDMETHODIMP Apply(const DISKQUOTAPOLICYINFO *pPolicyInfo);
  74. private:
  75. LONG m_cRef;
  76. LPGPEINFORMATION m_pGPEInfo;
  77. HKEY m_hkeyRoot;
  78. BOOL *m_pbAbort; // Monitor to detect abort.
  79. bool m_bRootKeyOpened; // Need to close root key?
  80. bool m_bVerboseEventLog; // Verbose log output?
  81. static const TCHAR m_szRegKeyPolicy[];
  82. static HRESULT GetDriveNames(CArray<CString> *prgstrDrives, bool bRemovableMedia);
  83. static HRESULT OkToApplyPolicy(LPCTSTR pszDrive, bool RemovableMedia);
  84. static void InitPolicyInfo(LPDISKQUOTAPOLICYINFO pInfo);
  85. static void LoadPolicyInfo(const RegKey& key, LPDISKQUOTAPOLICYINFO pInfo);
  86. };
  87. #endif // _INC_DSKQUOTA_POLICY_H