//+------------------------------------------------------------------- // // 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__