170 lines
5.2 KiB
C++
170 lines
5.2 KiB
C++
//+-------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1993 - 1995.
|
|
//
|
|
// File: citeratr.hxx
|
|
//
|
|
// Contents: iterator classes for ACLs and ACCESS_ENTRYs
|
|
//
|
|
// History: 8-94 Created DaveMont
|
|
//
|
|
//--------------------------------------------------------------------
|
|
#ifndef __CITERATOR__
|
|
#define __CITERATOR__
|
|
|
|
//============================================================================
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CIterator
|
|
//
|
|
// Synopsis: Base class for ACL and ACCESS_ENTRY iterators
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
class CIterator
|
|
{
|
|
public:
|
|
virtual ULONG NumberEntries();
|
|
virtual DWORD InitAccountAccess(CAccountAccess *caa,
|
|
LPWSTR system,
|
|
IS_CONTAINER fdir,
|
|
BOOL fSaveNamesAndSids);
|
|
};
|
|
|
|
//============================================================================
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CAclIterator
|
|
//
|
|
// Synopsis: class to iterate basic ACL
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
class CAclIterator : public CIterator
|
|
{
|
|
public:
|
|
CAclIterator();
|
|
|
|
void * operator new(size_t size);
|
|
void operator delete(void * p, size_t size);
|
|
void Init(PACL pacl);
|
|
inline ULONG NumberEntries();
|
|
inline void FirstAce();
|
|
inline BOOL MoreAces();
|
|
inline void NextAce();
|
|
DWORD InitAccountAccess(CAccountAccess *caa,
|
|
LPWSTR system,
|
|
IS_CONTAINER fdir,
|
|
BOOL fSaveNamesAndSids);
|
|
|
|
private:
|
|
PACL _pacl;
|
|
ULONG _acecount;
|
|
PACE_HEADER _pcurrentace;
|
|
};
|
|
|
|
//--------------------------------------------
|
|
ULONG CAclIterator::NumberEntries()
|
|
{
|
|
return(_pacl ? _pacl->AceCount : 0);
|
|
}
|
|
|
|
//--------------------------------------------
|
|
void CAclIterator::FirstAce()
|
|
{
|
|
_pcurrentace = (PACE_HEADER)((PBYTE)_pacl + sizeof(ACL));
|
|
_acecount = 0;
|
|
}
|
|
|
|
//--------------------------------------------
|
|
BOOL CAclIterator::MoreAces()
|
|
{
|
|
return( ((_acecount < _pacl->AceCount) ? TRUE : FALSE) );
|
|
}
|
|
|
|
//--------------------------------------------
|
|
void CAclIterator::NextAce()
|
|
{
|
|
_pcurrentace = (PACE_HEADER)((PBYTE)_pcurrentace + _pcurrentace->AceSize);
|
|
_acecount++;
|
|
}
|
|
|
|
//============================================================================
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CCompoundAclIterator
|
|
//
|
|
// Synopsis: Class to iterator Compound ACL
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
class CCompoundAclIterator : public CIterator
|
|
{
|
|
public:
|
|
CCompoundAclIterator(PACL pacl);
|
|
inline void FirstAce();
|
|
inline BOOL MoreAces();
|
|
inline void NextAce();
|
|
DWORD InitAccountAccess(CAccountAccess *caa,
|
|
LPWSTR system,
|
|
IS_CONTAINER fdir,
|
|
BOOL fSaveNamesAndSids);
|
|
};
|
|
|
|
//============================================================================
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CAesIterator
|
|
//
|
|
// Synopsis: Class to iterator ACCESS_ENTRYs
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
class CAesIterator : public CIterator
|
|
{
|
|
public:
|
|
CAesIterator();
|
|
void * operator new(size_t size);
|
|
void operator delete(void * p, size_t size);
|
|
void Init(ULONG ccount, PACCESS_ENTRY pae);
|
|
inline ULONG NumberEntries();
|
|
inline void FirstAe();
|
|
inline BOOL MoreAes();
|
|
inline void NextAe();
|
|
DWORD InitAccountAccess(CAccountAccess *caa,
|
|
LPWSTR system,
|
|
IS_CONTAINER fdir,
|
|
BOOL fSaveNamesAndSids);
|
|
private:
|
|
PACCESS_ENTRY _pae;
|
|
PACCESS_ENTRY _pcurrententry;
|
|
ULONG _curcount;
|
|
ULONG _totalcount;
|
|
|
|
};
|
|
|
|
//--------------------------------------------
|
|
ULONG CAesIterator::NumberEntries()
|
|
{
|
|
return(_totalcount);
|
|
}
|
|
//--------------------------------------------
|
|
void CAesIterator::FirstAe()
|
|
{
|
|
_curcount = 0;
|
|
_pcurrententry = _pae;
|
|
}
|
|
//--------------------------------------------
|
|
BOOL CAesIterator::MoreAes()
|
|
{
|
|
return( ((_curcount < _totalcount) ? TRUE : FALSE) );
|
|
}
|
|
|
|
//--------------------------------------------
|
|
void CAesIterator::NextAe()
|
|
{
|
|
_pcurrententry = (PACCESS_ENTRY)((PBYTE)_pcurrententry +
|
|
sizeof(ACCESS_ENTRY));
|
|
_curcount++;
|
|
}
|
|
|
|
#endif // __CITERATOR__
|
|
|