windows-nt/Source/XPSP1/NT/public/sdk/inc/dskquota.h
2020-09-26 16:20:57 +08:00

383 lines
10 KiB
C

/**************************************************************************
* *
* dskquota.h -- public header for Windows 2000 disk quota interfaces. *
* *
* Copyright (c) 1991-1999, Microsoft Corp. All rights reserved. *
* *
**************************************************************************/
#ifndef __DSKQUOTA_H
#define __DSKQUOTA_H
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef _WINDOWS_
#include <windows.h>
#endif
#ifndef _OLE2_H_
#include <ole2.h>
#endif
#ifndef _OLECTL_H_
#include <olectl.h>
#endif
#ifdef INITGUIDS
#include <initguid.h>
#endif
//
// Class IDs
//
// {7988B571-EC89-11cf-9C00-00AA00A14F56}
DEFINE_GUID(CLSID_DiskQuotaControl,
0x7988b571, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
//
// Interface IDs
//
// {7988B572-EC89-11cf-9C00-00AA00A14F56}
DEFINE_GUID(IID_IDiskQuotaControl,
0x7988b572, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
// {7988B574-EC89-11cf-9C00-00AA00A14F56}
DEFINE_GUID(IID_IDiskQuotaUser,
0x7988b574, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
// {7988B576-EC89-11cf-9C00-00AA00A14F56}
DEFINE_GUID(IID_IDiskQuotaUserBatch,
0x7988b576, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
// {7988B577-EC89-11cf-9C00-00AA00A14F56}
DEFINE_GUID(IID_IEnumDiskQuotaUsers,
0x7988b577, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
// {7988B579-EC89-11cf-9C00-00AA00A14F56}
DEFINE_GUID(IID_IDiskQuotaEvents,
0x7988b579, 0xec89, 0x11cf, 0x9c, 0x0, 0x0, 0xaa, 0x0, 0xa1, 0x4f, 0x56);
//
// Definitions for value and bits in DWORD returned by
// IDiskQuotaControl::GetQuotaState.
//
#define DISKQUOTA_STATE_DISABLED 0x00000000
#define DISKQUOTA_STATE_TRACK 0x00000001
#define DISKQUOTA_STATE_ENFORCE 0x00000002
#define DISKQUOTA_STATE_MASK 0x00000003
#define DISKQUOTA_FILESTATE_INCOMPLETE 0x00000100
#define DISKQUOTA_FILESTATE_REBUILDING 0x00000200
#define DISKQUOTA_FILESTATE_MASK 0x00000300
//
// Helper macros for setting and testing state value.
//
#define DISKQUOTA_SET_DISABLED(s) \
((s) &= ~DISKQUOTA_STATE_MASK)
#define DISKQUOTA_SET_TRACKED(s) \
((s) |= (DISKQUOTA_STATE_MASK & DISKQUOTA_STATE_TRACK))
#define DISKQUOTA_SET_ENFORCED(s) \
((s) |= (DISKQUOTA_STATE_ENFORCE & DISKQUOTA_STATE_ENFORCE))
#define DISKQUOTA_IS_DISABLED(s) \
(DISKQUOTA_STATE_DISABLED == ((s) & DISKQUOTA_STATE_MASK))
#define DISKQUOTA_IS_TRACKED(s) \
(DISKQUOTA_STATE_TRACK == ((s) & DISKQUOTA_STATE_MASK))
#define DISKQUOTA_IS_ENFORCED(s) \
(DISKQUOTA_STATE_ENFORCE == ((s) & DISKQUOTA_STATE_MASK))
//
// These file state flags are read-only.
//
#define DISKQUOTA_FILE_INCOMPLETE(s) \
(0 != ((s) & DISKQUOTA_FILESTATE_INCOMPLETE))
#define DISKQUOTA_FILE_REBUILDING(s) \
(0 != ((s) & DISKQUOTA_FILESTATE_REBUILDING))
//
// Definitions for bits in DWORD returned by
// IDiskQuotaControl::GetQuotaLogFlags.
//
#define DISKQUOTA_LOGFLAG_USER_THRESHOLD 0x00000001
#define DISKQUOTA_LOGFLAG_USER_LIMIT 0x00000002
//
// Helper macros to interrogate a log flags DWORD.
//
#define DISKQUOTA_IS_LOGGED_USER_THRESHOLD(f) \
(0 != ((f) & DISKQUOTA_LOGFLAG_USER_THRESHOLD))
#define DISKQUOTA_IS_LOGGED_USER_LIMIT(f) \
(0 != ((f) & DISKQUOTA_LOGFLAG_USER_LIMIT))
//
// Helper macros to set/clear bits in a log flags DWORD.
//
#define DISKQUOTA_SET_LOG_USER_THRESHOLD(f,yn) \
((f &= ~DISKQUOTA_LOGFLAG_USER_THRESHOLD) |= ((yn) ? DISKQUOTA_LOGFLAG_USER_THRESHOLD : 0))
#define DISKQUOTA_SET_LOG_USER_LIMIT(f,yn) \
((f &= ~DISKQUOTA_LOGFLAG_USER_LIMIT) |= ((yn) ? DISKQUOTA_LOGFLAG_USER_LIMIT : 0))
//
// Per-user quota information.
//
typedef struct DiskQuotaUserInformation {
LONGLONG QuotaUsed;
LONGLONG QuotaThreshold;
LONGLONG QuotaLimit;
} DISKQUOTA_USER_INFORMATION, *PDISKQUOTA_USER_INFORMATION;
//
// Values for fNameResolution argument to:
//
// IDiskQuotaControl::AddUserSid
// IDiskQuotaControl::AddUserName
// IDiskQuotaControl::FindUserSid
// IDiskQuotaControl::CreateEnumUsers
//
#define DISKQUOTA_USERNAME_RESOLVE_NONE 0
#define DISKQUOTA_USERNAME_RESOLVE_SYNC 1
#define DISKQUOTA_USERNAME_RESOLVE_ASYNC 2
//
// Values for status returned by IDiskQuotaUser::GetAccountStatus.
//
#define DISKQUOTA_USER_ACCOUNT_RESOLVED 0
#define DISKQUOTA_USER_ACCOUNT_UNAVAILABLE 1
#define DISKQUOTA_USER_ACCOUNT_DELETED 2
#define DISKQUOTA_USER_ACCOUNT_INVALID 3
#define DISKQUOTA_USER_ACCOUNT_UNKNOWN 4
#define DISKQUOTA_USER_ACCOUNT_UNRESOLVED 5
//
// IDiskQuotaUser represents a single user quota record on a particular
// NTFS volume. Objects using this interface are instantiated
// through several IDiskQuotaControl methods.
//
#undef INTERFACE
#define INTERFACE IDiskQuotaUser
DECLARE_INTERFACE_(IDiskQuotaUser, IUnknown)
{
STDMETHOD(GetID)(THIS_
ULONG *pulID) PURE;
STDMETHOD(GetName)(THIS_
LPWSTR pszAccountContainer,
DWORD cchAccountContainer,
LPWSTR pszLogonName,
DWORD cchLogonName,
LPWSTR pszDisplayName,
DWORD cchDisplayName) PURE;
STDMETHOD(GetSidLength)(THIS_
LPDWORD pdwLength) PURE;
STDMETHOD(GetSid)(THIS_
LPBYTE pbSidBuffer,
DWORD cbSidBuffer) PURE;
STDMETHOD(GetQuotaThreshold)(THIS_
PLONGLONG pllThreshold) PURE;
STDMETHOD(GetQuotaThresholdText)(THIS_
LPWSTR pszText,
DWORD cchText) PURE;
STDMETHOD(GetQuotaLimit)(THIS_
PLONGLONG pllLimit) PURE;
STDMETHOD(GetQuotaLimitText)(THIS_
LPWSTR pszText,
DWORD cchText) PURE;
STDMETHOD(GetQuotaUsed)(THIS_
PLONGLONG pllUsed) PURE;
STDMETHOD(GetQuotaUsedText)(THIS_
LPWSTR pszText,
DWORD cchText) PURE;
STDMETHOD(GetQuotaInformation)(THIS_
LPVOID pbQuotaInfo,
DWORD cbQuotaInfo) PURE;
STDMETHOD(SetQuotaThreshold)(THIS_
LONGLONG llThreshold,
BOOL fWriteThrough) PURE;
STDMETHOD(SetQuotaLimit)(THIS_
LONGLONG llLimit,
BOOL fWriteThrough) PURE;
STDMETHOD(Invalidate)(THIS) PURE;
STDMETHOD(GetAccountStatus)(THIS_
LPDWORD pdwStatus) PURE;
};
typedef IDiskQuotaUser DISKQUOTA_USER, *PDISKQUOTA_USER;
//
// IEnumDiskQuotaUsers represents an enumerator created by
// IDiskQuotaControl for the purpose of enumerating individual user quota
// records on a particular volume. Each record is represented through
// the IDiskQuotaUser interface.
//
#undef INTERFACE
#define INTERFACE IEnumDiskQuotaUsers
DECLARE_INTERFACE_(IEnumDiskQuotaUsers, IUnknown)
{
STDMETHOD(Next)(THIS_
DWORD cUsers,
PDISKQUOTA_USER *rgUsers,
LPDWORD pcUsersFetched) PURE;
STDMETHOD(Skip)(THIS_
DWORD cUsers) PURE;
STDMETHOD(Reset)(THIS) PURE;
STDMETHOD(Clone)(THIS_
IEnumDiskQuotaUsers **ppEnum) PURE;
};
typedef IEnumDiskQuotaUsers ENUM_DISKQUOTA_USERS, *PENUM_DISKQUOTA_USERS;
//
// IDiskQuotaUserBatch represents a collection of IDiskQuotaUser
// pointers for the purpose of grouping updates to quota information.
//
#undef INTERFACE
#define INTERFACE IDiskQuotaUserBatch
DECLARE_INTERFACE_(IDiskQuotaUserBatch, IUnknown)
{
STDMETHOD(Add)(THIS_
PDISKQUOTA_USER pUser) PURE;
STDMETHOD(Remove)(THIS_
PDISKQUOTA_USER pUser) PURE;
STDMETHOD(RemoveAll)(THIS) PURE;
STDMETHOD(FlushToDisk)(THIS) PURE;
};
typedef IDiskQuotaUserBatch DISKQUOTA_USER_BATCH, *PDISKQUOTA_USER_BATCH;
//
// IDiskQuotaControl represents a disk volume, providing query and
// control of that volume's quota information.
//
#undef INTERFACE
#define INTERFACE IDiskQuotaControl
DECLARE_INTERFACE_(IDiskQuotaControl, IConnectionPointContainer)
{
STDMETHOD(Initialize)(THIS_
LPCWSTR pszPath,
BOOL bReadWrite) PURE;
STDMETHOD(SetQuotaState)(THIS_
DWORD dwState) PURE;
STDMETHOD(GetQuotaState)(THIS_
LPDWORD pdwState) PURE;
STDMETHOD(SetQuotaLogFlags)(THIS_
DWORD dwFlags) PURE;
STDMETHOD(GetQuotaLogFlags)(THIS_
LPDWORD pdwFlags) PURE;
STDMETHOD(SetDefaultQuotaThreshold)(THIS_
LONGLONG llThreshold) PURE;
STDMETHOD(GetDefaultQuotaThreshold)(THIS_
PLONGLONG pllThreshold) PURE;
STDMETHOD(GetDefaultQuotaThresholdText)(THIS_
LPWSTR pszText,
DWORD cchText) PURE;
STDMETHOD(SetDefaultQuotaLimit)(THIS_
LONGLONG llLimit) PURE;
STDMETHOD(GetDefaultQuotaLimit)(THIS_
PLONGLONG pllLimit) PURE;
STDMETHOD(GetDefaultQuotaLimitText)(THIS_
LPWSTR pszText,
DWORD cchText) PURE;
STDMETHOD(AddUserSid)(THIS_
PSID pUserSid,
DWORD fNameResolution,
PDISKQUOTA_USER *ppUser) PURE;
STDMETHOD(AddUserName)(THIS_
LPCWSTR pszLogonName,
DWORD fNameResolution,
PDISKQUOTA_USER *ppUser) PURE;
STDMETHOD(DeleteUser)(THIS_
PDISKQUOTA_USER pUser) PURE;
STDMETHOD(FindUserSid)(THIS_
PSID pUserSid,
DWORD fNameResolution,
PDISKQUOTA_USER *ppUser) PURE;
STDMETHOD(FindUserName)(THIS_
LPCWSTR pszLogonName,
PDISKQUOTA_USER *ppUser) PURE;
STDMETHOD(CreateEnumUsers)(THIS_
PSID *rgpUserSids,
DWORD cpSids,
DWORD fNameResolution,
PENUM_DISKQUOTA_USERS *ppEnum) PURE;
STDMETHOD(CreateUserBatch)(THIS_
PDISKQUOTA_USER_BATCH *ppBatch) PURE;
STDMETHOD(InvalidateSidNameCache)(THIS) PURE;
STDMETHOD(GiveUserNameResolutionPriority)(THIS_
PDISKQUOTA_USER pUser) PURE;
STDMETHOD(ShutdownNameResolution)(THIS_
VOID) PURE;
};
typedef IDiskQuotaControl DISKQUOTA_CONTROL, *PDISKQUOTA_CONTROL;
#undef INTERFACE
#define INTERFACE IDiskQuotaEvents
DECLARE_INTERFACE_(IDiskQuotaEvents, IUnknown)
{
STDMETHOD(OnUserNameChanged)(THIS_
PDISKQUOTA_USER pUser) PURE;
};
typedef IDiskQuotaEvents DISKQUOTA_EVENTS, *PDISKQUOTA_EVENTS;
#endif // __DSKQUOTA_H