home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / dskquota.h < prev    next >
C/C++ Source or Header  |  2000-02-01  |  11KB  |  385 lines

  1. /**************************************************************************
  2. *                                                                         *
  3. *   dskquota.h --  public header for Windows 2000 disk quota interfaces.  *
  4. *                                                                         *
  5. *   Copyright (c) 1991-1999, Microsoft Corp. All rights reserved.         *
  6. *                                                                         *
  7. **************************************************************************/
  8. #ifndef __DSKQUOTA_H
  9. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  10. #define __DSKQUOTA_H
  11.  
  12. #if _MSC_VER > 1000
  13. #pragma once
  14. #endif
  15.  
  16. #ifndef _WINDOWS_
  17. #include <windows.h>
  18. #endif
  19.  
  20. #ifndef _OLE2_H_
  21. #include <ole2.h>
  22. #endif
  23.  
  24. #ifndef _OLECTL_H_
  25. #include <olectl.h>
  26. #endif
  27.  
  28. #ifdef INITGUIDS
  29. #include <initguid.h>
  30. #endif
  31.  
  32.  
  33. //
  34. // Class IDs
  35. //
  36. // {7988B571-EC89-11cf-9C00-00AA00A14F56}
  37. DEFINE_GUID(CLSID_DiskQuotaControl,
  38. 0x7988b571, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
  39.  
  40. //
  41. // Interface IDs
  42. //
  43. // {7988B572-EC89-11cf-9C00-00AA00A14F56}
  44. DEFINE_GUID(IID_IDiskQuotaControl,
  45. 0x7988b572, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
  46.  
  47. // {7988B574-EC89-11cf-9C00-00AA00A14F56}
  48. DEFINE_GUID(IID_IDiskQuotaUser,
  49. 0x7988b574, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
  50.  
  51. // {7988B576-EC89-11cf-9C00-00AA00A14F56}
  52. DEFINE_GUID(IID_IDiskQuotaUserBatch,
  53. 0x7988b576, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
  54.  
  55. // {7988B577-EC89-11cf-9C00-00AA00A14F56}
  56. DEFINE_GUID(IID_IEnumDiskQuotaUsers,
  57. 0x7988b577, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
  58.  
  59. // {7988B579-EC89-11cf-9C00-00AA00A14F56}
  60. DEFINE_GUID(IID_IDiskQuotaEvents,
  61. 0x7988b579, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
  62.  
  63.  
  64. //
  65. // Definitions for value and bits in DWORD returned by 
  66. // IDiskQuotaControl::GetQuotaState.
  67. //
  68. #define DISKQUOTA_STATE_DISABLED            0x00000000
  69. #define DISKQUOTA_STATE_TRACK               0x00000001
  70. #define DISKQUOTA_STATE_ENFORCE             0x00000002
  71. #define DISKQUOTA_STATE_MASK                0x00000003
  72. #define DISKQUOTA_FILESTATE_INCOMPLETE      0x00000100
  73. #define DISKQUOTA_FILESTATE_REBUILDING      0x00000200
  74. #define DISKQUOTA_FILESTATE_MASK            0x00000300
  75.  
  76. //
  77. // Helper macros for setting and testing state value.
  78. //
  79. #define DISKQUOTA_SET_DISABLED(s) \
  80.             ((s) &= ~DISKQUOTA_STATE_MASK)
  81.  
  82. #define DISKQUOTA_SET_TRACKED(s) \
  83.             ((s) |= (DISKQUOTA_STATE_MASK & DISKQUOTA_STATE_TRACK))
  84.  
  85. #define DISKQUOTA_SET_ENFORCED(s) \
  86.             ((s) |= (DISKQUOTA_STATE_ENFORCE & DISKQUOTA_STATE_ENFORCE))
  87.  
  88. #define DISKQUOTA_IS_DISABLED(s) \
  89.             (DISKQUOTA_STATE_DISABLED == ((s) & DISKQUOTA_STATE_MASK))
  90.  
  91. #define DISKQUOTA_IS_TRACKED(s) \
  92.             (DISKQUOTA_STATE_TRACK == ((s) & DISKQUOTA_STATE_MASK))
  93.  
  94. #define DISKQUOTA_IS_ENFORCED(s) \
  95.             (DISKQUOTA_STATE_ENFORCE == ((s) & DISKQUOTA_STATE_MASK))
  96. //
  97. // These file state flags are read-only.
  98. //
  99. #define DISKQUOTA_FILE_INCOMPLETE(s) \
  100.             (0 != ((s) & DISKQUOTA_FILESTATE_INCOMPLETE))
  101.  
  102. #define DISKQUOTA_FILE_REBUILDING(s) \
  103.             (0 != ((s) & DISKQUOTA_FILESTATE_REBUILDING))
  104.  
  105.  
  106. //
  107. // Definitions for bits in DWORD returned by 
  108. // IDiskQuotaControl::GetQuotaLogFlags.
  109. //
  110. #define DISKQUOTA_LOGFLAG_USER_THRESHOLD    0x00000001
  111. #define DISKQUOTA_LOGFLAG_USER_LIMIT        0x00000002
  112.  
  113. //
  114. // Helper macros to interrogate a log flags DWORD.
  115. //
  116. #define DISKQUOTA_IS_LOGGED_USER_THRESHOLD(f) \
  117.             (0 != ((f) & DISKQUOTA_LOGFLAG_USER_THRESHOLD))
  118.  
  119. #define DISKQUOTA_IS_LOGGED_USER_LIMIT(f) \
  120.             (0 != ((f) & DISKQUOTA_LOGFLAG_USER_LIMIT))
  121.  
  122. //
  123. // Helper macros to set/clear bits in a log flags DWORD.
  124. //
  125. #define DISKQUOTA_SET_LOG_USER_THRESHOLD(f,yn) \
  126.               ((f &= ~DISKQUOTA_LOGFLAG_USER_THRESHOLD) |= ((yn) ? DISKQUOTA_LOGFLAG_USER_THRESHOLD : 0))
  127.  
  128. #define DISKQUOTA_SET_LOG_USER_LIMIT(f,yn) \
  129.               ((f &= ~DISKQUOTA_LOGFLAG_USER_LIMIT) |= ((yn) ? DISKQUOTA_LOGFLAG_USER_LIMIT : 0))
  130.  
  131. //
  132. // Per-user quota information.
  133. //
  134. typedef struct DiskQuotaUserInformation {
  135.     LONGLONG QuotaUsed;
  136.     LONGLONG QuotaThreshold;
  137.     LONGLONG QuotaLimit;
  138. } DISKQUOTA_USER_INFORMATION, *PDISKQUOTA_USER_INFORMATION;
  139.  
  140.  
  141. //
  142. // Values for fNameResolution argument to:
  143. //
  144. //      IDiskQuotaControl::AddUserSid
  145. //      IDiskQuotaControl::AddUserName
  146. //      IDiskQuotaControl::FindUserSid
  147. //      IDiskQuotaControl::CreateEnumUsers
  148. //
  149. #define DISKQUOTA_USERNAME_RESOLVE_NONE     0
  150. #define DISKQUOTA_USERNAME_RESOLVE_SYNC     1
  151. #define DISKQUOTA_USERNAME_RESOLVE_ASYNC    2
  152.  
  153. //
  154. // Values for status returned by IDiskQuotaUser::GetAccountStatus.
  155. //
  156. #define DISKQUOTA_USER_ACCOUNT_RESOLVED     0
  157. #define DISKQUOTA_USER_ACCOUNT_UNAVAILABLE  1
  158. #define DISKQUOTA_USER_ACCOUNT_DELETED      2
  159. #define DISKQUOTA_USER_ACCOUNT_INVALID      3
  160. #define DISKQUOTA_USER_ACCOUNT_UNKNOWN      4
  161. #define DISKQUOTA_USER_ACCOUNT_UNRESOLVED   5
  162.  
  163.  
  164. //
  165. // IDiskQuotaUser represents a single user quota record on a particular
  166. // NTFS volume.  Objects using this interface are instantiated 
  167. // through several IDiskQuotaControl methods.
  168. //
  169. #undef  INTERFACE
  170. #define INTERFACE IDiskQuotaUser
  171. DECLARE_INTERFACE_(IDiskQuotaUser, IUnknown)
  172. {
  173.     STDMETHOD(GetID)(THIS_
  174.         ULONG *pulID) PURE;
  175.  
  176.     STDMETHOD(GetName)(THIS_
  177.         LPWSTR pszAccountContainer,
  178.         DWORD cchAccountContainer,
  179.         LPWSTR pszLogonName,
  180.         DWORD cchLogonName,
  181.         LPWSTR pszDisplayName,
  182.         DWORD cchDisplayName) PURE;
  183.  
  184.     STDMETHOD(GetSidLength)(THIS_
  185.         LPDWORD pdwLength) PURE;
  186.  
  187.     STDMETHOD(GetSid)(THIS_
  188.         LPBYTE pbSidBuffer,
  189.         DWORD cbSidBuffer) PURE;
  190.  
  191.     STDMETHOD(GetQuotaThreshold)(THIS_
  192.         PLONGLONG pllThreshold) PURE;
  193.  
  194.     STDMETHOD(GetQuotaThresholdText)(THIS_
  195.         LPWSTR pszText,
  196.         DWORD cchText) PURE;
  197.  
  198.     STDMETHOD(GetQuotaLimit)(THIS_
  199.         PLONGLONG pllLimit) PURE;
  200.  
  201.     STDMETHOD(GetQuotaLimitText)(THIS_
  202.         LPWSTR pszText,
  203.         DWORD cchText) PURE;
  204.  
  205.     STDMETHOD(GetQuotaUsed)(THIS_
  206.         PLONGLONG pllUsed) PURE;
  207.  
  208.     STDMETHOD(GetQuotaUsedText)(THIS_
  209.         LPWSTR pszText,
  210.         DWORD cchText) PURE;
  211.  
  212.     STDMETHOD(GetQuotaInformation)(THIS_
  213.         LPVOID pbQuotaInfo,
  214.         DWORD cbQuotaInfo) PURE;
  215.  
  216.     STDMETHOD(SetQuotaThreshold)(THIS_
  217.         LONGLONG llThreshold,
  218.         BOOL fWriteThrough) PURE;
  219.  
  220.     STDMETHOD(SetQuotaLimit)(THIS_
  221.         LONGLONG llLimit,
  222.         BOOL fWriteThrough) PURE;
  223.  
  224.     STDMETHOD(Invalidate)(THIS) PURE;
  225.  
  226.     STDMETHOD(GetAccountStatus)(THIS_
  227.         LPDWORD pdwStatus) PURE;
  228. };
  229.  
  230. typedef IDiskQuotaUser DISKQUOTA_USER, *PDISKQUOTA_USER;
  231.  
  232.  
  233. //
  234. // IEnumDiskQuotaUsers represents an enumerator created by 
  235. // IDiskQuotaControl for the purpose of enumerating individual user quota
  236. // records on a particular volume.  Each record is represented through
  237. // the IDiskQuotaUser interface.
  238. //
  239. #undef  INTERFACE
  240. #define INTERFACE IEnumDiskQuotaUsers
  241. DECLARE_INTERFACE_(IEnumDiskQuotaUsers, IUnknown)
  242. {
  243.     STDMETHOD(Next)(THIS_
  244.         DWORD cUsers,
  245.         PDISKQUOTA_USER *rgUsers,
  246.         LPDWORD pcUsersFetched) PURE;
  247.  
  248.     STDMETHOD(Skip)(THIS_
  249.         DWORD cUsers) PURE;
  250.  
  251.     STDMETHOD(Reset)(THIS) PURE;
  252.  
  253.     STDMETHOD(Clone)(THIS_
  254.         IEnumDiskQuotaUsers **ppEnum) PURE;
  255. };
  256.  
  257. typedef IEnumDiskQuotaUsers ENUM_DISKQUOTA_USERS, *PENUM_DISKQUOTA_USERS;
  258.  
  259.  
  260. //
  261. // IDiskQuotaUserBatch represents a collection of IDiskQuotaUser 
  262. // pointers for the purpose of grouping updates to quota information.
  263. // 
  264. #undef  INTERFACE
  265. #define INTERFACE IDiskQuotaUserBatch
  266. DECLARE_INTERFACE_(IDiskQuotaUserBatch, IUnknown)
  267. {
  268.     STDMETHOD(Add)(THIS_
  269.         PDISKQUOTA_USER pUser) PURE;
  270.  
  271.     STDMETHOD(Remove)(THIS_
  272.         PDISKQUOTA_USER pUser) PURE;
  273.  
  274.     STDMETHOD(RemoveAll)(THIS) PURE;
  275.  
  276.     STDMETHOD(FlushToDisk)(THIS) PURE;
  277. };
  278.  
  279. typedef IDiskQuotaUserBatch DISKQUOTA_USER_BATCH, *PDISKQUOTA_USER_BATCH;
  280.  
  281.  
  282. //
  283. // IDiskQuotaControl represents a disk volume, providing query and 
  284. // control of that volume's quota information.
  285. //
  286. #undef INTERFACE
  287. #define INTERFACE IDiskQuotaControl
  288. DECLARE_INTERFACE_(IDiskQuotaControl, IConnectionPointContainer)
  289. {
  290.     STDMETHOD(Initialize)(THIS_
  291.         LPCWSTR pszPath,
  292.         BOOL bReadWrite) PURE;
  293.  
  294.     STDMETHOD(SetQuotaState)(THIS_
  295.         DWORD dwState) PURE;
  296.  
  297.     STDMETHOD(GetQuotaState)(THIS_
  298.         LPDWORD pdwState) PURE;
  299.  
  300.     STDMETHOD(SetQuotaLogFlags)(THIS_
  301.         DWORD dwFlags) PURE;
  302.  
  303.     STDMETHOD(GetQuotaLogFlags)(THIS_
  304.         LPDWORD pdwFlags) PURE;
  305.  
  306.     STDMETHOD(SetDefaultQuotaThreshold)(THIS_
  307.         LONGLONG llThreshold) PURE;
  308.  
  309.     STDMETHOD(GetDefaultQuotaThreshold)(THIS_
  310.         PLONGLONG pllThreshold) PURE;
  311.  
  312.     STDMETHOD(GetDefaultQuotaThresholdText)(THIS_
  313.         LPWSTR pszText,
  314.         DWORD cchText) PURE;
  315.  
  316.     STDMETHOD(SetDefaultQuotaLimit)(THIS_
  317.         LONGLONG llLimit) PURE;
  318.  
  319.     STDMETHOD(GetDefaultQuotaLimit)(THIS_
  320.         PLONGLONG pllLimit) PURE;
  321.  
  322.     STDMETHOD(GetDefaultQuotaLimitText)(THIS_
  323.         LPWSTR pszText,
  324.         DWORD cchText) PURE;
  325.  
  326.     STDMETHOD(AddUserSid)(THIS_
  327.         PSID pUserSid,
  328.         DWORD fNameResolution,
  329.         PDISKQUOTA_USER *ppUser) PURE;
  330.  
  331.     STDMETHOD(AddUserName)(THIS_
  332.         LPCWSTR pszLogonName,
  333.         DWORD fNameResolution,
  334.         PDISKQUOTA_USER *ppUser) PURE;
  335.  
  336.     STDMETHOD(DeleteUser)(THIS_
  337.         PDISKQUOTA_USER pUser) PURE;
  338.  
  339.     STDMETHOD(FindUserSid)(THIS_
  340.         PSID pUserSid,
  341.         DWORD fNameResolution,
  342.         PDISKQUOTA_USER *ppUser) PURE;
  343.  
  344.     STDMETHOD(FindUserName)(THIS_
  345.         LPCWSTR pszLogonName,
  346.         PDISKQUOTA_USER *ppUser) PURE;
  347.  
  348.     STDMETHOD(CreateEnumUsers)(THIS_
  349.         PSID *rgpUserSids,
  350.         DWORD cpSids,
  351.         DWORD fNameResolution,
  352.         PENUM_DISKQUOTA_USERS *ppEnum) PURE;
  353.  
  354.     STDMETHOD(CreateUserBatch)(THIS_
  355.         PDISKQUOTA_USER_BATCH *ppBatch) PURE;
  356.  
  357.     STDMETHOD(InvalidateSidNameCache)(THIS) PURE;
  358.  
  359.     STDMETHOD(GiveUserNameResolutionPriority)(THIS_
  360.         PDISKQUOTA_USER pUser) PURE;
  361.  
  362.     STDMETHOD(ShutdownNameResolution)(THIS_
  363.         VOID) PURE;
  364. };
  365.  
  366. typedef IDiskQuotaControl DISKQUOTA_CONTROL, *PDISKQUOTA_CONTROL;
  367.  
  368.  
  369.  
  370. #undef  INTERFACE
  371. #define INTERFACE IDiskQuotaEvents
  372. DECLARE_INTERFACE_(IDiskQuotaEvents, IUnknown)
  373. {
  374.     STDMETHOD(OnUserNameChanged)(THIS_
  375.         PDISKQUOTA_USER pUser) PURE;
  376. };
  377.  
  378. typedef IDiskQuotaEvents DISKQUOTA_EVENTS, *PDISKQUOTA_EVENTS;
  379.  
  380.  
  381.  
  382. #pragma option pop /*P_O_Pop*/
  383. #endif // __DSKQUOTA_H
  384.  
  385.