157 lines
4 KiB
C
157 lines
4 KiB
C
|
#ifndef _INC_DSKQUOTA_SIDNAME_H
|
||
|
#define _INC_DSKQUOTA_SIDNAME_H
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
/* File: sidname.h
|
||
|
|
||
|
Description: Declarations for SID/Name resolver. See sidname.cpp for
|
||
|
details of operation.
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
Date Description Programmer
|
||
|
-------- --------------------------------------------------- ----------
|
||
|
06/12/96 Initial creation. BrianAu
|
||
|
03/18/98 Replaced "domain", "name" and "full name" with BrianAu
|
||
|
"container", "logon name" and "display name" to
|
||
|
better match the actual contents. This was in
|
||
|
reponse to making the quota UI DS-aware. The
|
||
|
"logon name" is now a unique key as it contains
|
||
|
both account name and domain-like information.
|
||
|
i.e. "REDMOND\brianau" or "brianau@microsoft.com".
|
||
|
*/
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
#ifndef _INC_DSKQUOTA_H
|
||
|
# include "dskquota.h"
|
||
|
#endif
|
||
|
#ifndef _INC_DSKQUOTA_SIDCACHE_H
|
||
|
# include "sidcache.h"
|
||
|
#endif
|
||
|
#ifndef _INC_DSKQUOTA_USER_H
|
||
|
# include "user.h"
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// This is a PRIVATE interface. That's why it's here and not in dskquota.h
|
||
|
//
|
||
|
#undef INTERFACE
|
||
|
#define INTERFACE ISidNameResolver
|
||
|
|
||
|
DECLARE_INTERFACE_(ISidNameResolver, IUnknown)
|
||
|
{
|
||
|
//
|
||
|
// ISidNameResolver methods.
|
||
|
//
|
||
|
STDMETHOD(Initialize)(THIS) PURE;
|
||
|
STDMETHOD(FindUserName)(THIS_ PDISKQUOTA_USER) PURE;
|
||
|
STDMETHOD(FindUserNameAsync)(THIS_ PDISKQUOTA_USER) PURE;
|
||
|
STDMETHOD(Shutdown)(THIS_ BOOL) PURE;
|
||
|
STDMETHOD(PromoteUserToQueueHead)(THIS_ PDISKQUOTA_USER) PURE;
|
||
|
};
|
||
|
|
||
|
typedef ISidNameResolver SID_NAME_RESOLVER, *PSID_NAME_RESOLVER;
|
||
|
|
||
|
|
||
|
|
||
|
class DiskQuotaControl; // Fwd reference.
|
||
|
|
||
|
class SidNameResolver : public ISidNameResolver
|
||
|
{
|
||
|
private:
|
||
|
LONG m_cRef;
|
||
|
DiskQuotaControl& m_rQuotaController;
|
||
|
HANDLE m_hsemQueueNotEmpty;
|
||
|
HANDLE m_hMutex;
|
||
|
HANDLE m_hResolverThread;
|
||
|
HANDLE m_heventResolverThreadReady;
|
||
|
DWORD m_dwResolverThreadId;
|
||
|
CQueueAsArray<PDISKQUOTA_USER> m_UserQueue;
|
||
|
|
||
|
//
|
||
|
// Prevent copying.
|
||
|
//
|
||
|
SidNameResolver(const SidNameResolver& );
|
||
|
operator = (const SidNameResolver& );
|
||
|
|
||
|
HRESULT
|
||
|
ResolveSidToName(PDISKQUOTA_USER pUser);
|
||
|
|
||
|
static DWORD ThreadProc(LPVOID dwParam);
|
||
|
|
||
|
HRESULT
|
||
|
CreateResolverThread(
|
||
|
PHANDLE phThread,
|
||
|
LPDWORD pdwThreadId);
|
||
|
|
||
|
HRESULT
|
||
|
ThreadOnQueueNotEmpty(VOID);
|
||
|
|
||
|
HRESULT
|
||
|
ClearInputQueue(VOID);
|
||
|
|
||
|
HRESULT
|
||
|
FindCachedUserName(
|
||
|
PDISKQUOTA_USER);
|
||
|
|
||
|
HRESULT
|
||
|
GetUserSid(PDISKQUOTA_USER pUser, PSID *ppSid);
|
||
|
|
||
|
HRESULT
|
||
|
RemoveUserFromResolverQueue(PDISKQUOTA_USER *ppUser);
|
||
|
|
||
|
HRESULT
|
||
|
AddUserToResolverQueue(PDISKQUOTA_USER pUser);
|
||
|
|
||
|
void Lock(void)
|
||
|
{ WaitForSingleObject(m_hMutex, INFINITE); }
|
||
|
|
||
|
void ReleaseLock(void)
|
||
|
{ ReleaseMutex(m_hMutex); }
|
||
|
|
||
|
public:
|
||
|
SidNameResolver(DiskQuotaControl& rQuotaController);
|
||
|
~SidNameResolver(void);
|
||
|
|
||
|
//
|
||
|
// IUnknown methods.
|
||
|
//
|
||
|
STDMETHODIMP
|
||
|
QueryInterface(
|
||
|
REFIID,
|
||
|
LPVOID *);
|
||
|
|
||
|
STDMETHODIMP_(ULONG)
|
||
|
AddRef(
|
||
|
VOID);
|
||
|
|
||
|
STDMETHODIMP_(ULONG)
|
||
|
Release(
|
||
|
VOID);
|
||
|
|
||
|
//
|
||
|
// ISidNameResolver methods.
|
||
|
//
|
||
|
STDMETHODIMP
|
||
|
Initialize(
|
||
|
VOID);
|
||
|
|
||
|
STDMETHODIMP
|
||
|
FindUserName(
|
||
|
PDISKQUOTA_USER);
|
||
|
|
||
|
STDMETHODIMP
|
||
|
FindUserNameAsync(
|
||
|
PDISKQUOTA_USER);
|
||
|
|
||
|
STDMETHODIMP
|
||
|
Shutdown(
|
||
|
BOOL bWait);
|
||
|
|
||
|
STDMETHODIMP
|
||
|
PromoteUserToQueueHead(
|
||
|
PDISKQUOTA_USER);
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif // _INC_DSKQUOTA_SIDNAME_H
|
||
|
|