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