/* Copyright 1996 Microsoft */ #ifndef _ACLHIST_H_ #define _ACLHIST_H_ // Enum options enum { ACEO_ALTERNATEFORMS = ACEO_FIRSTUNUSED, // return alternate forms of the url }; class CACLHistory : public IEnumACString { public: ////////////////////////////////////////////////////// // Public Interfaces ////////////////////////////////////////////////////// // *** IUnknown *** virtual STDMETHODIMP_(ULONG) AddRef(void); virtual STDMETHODIMP_(ULONG) Release(void); virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); // *** IEnumString *** virtual STDMETHODIMP Next(ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched); virtual STDMETHODIMP Skip(ULONG celt); virtual STDMETHODIMP Reset(void); virtual STDMETHODIMP Clone(IEnumString **ppenum); // *** IEnumACString *** virtual STDMETHODIMP NextItem(LPOLESTR pszUrl, ULONG cchMax, ULONG* pulSortIndex); virtual STDMETHODIMP SetEnumOptions(DWORD dwOptions); virtual STDMETHODIMP GetEnumOptions(DWORD *pdwOptions); protected: // Constructor / Destructor (protected so we can't create on stack) CACLHistory(void); ~CACLHistory(void); // Instance creator friend HRESULT CACLHistory_CreateInstance(IUnknown *punkOuter, IUnknown **ppunk, LPCOBJECTINFO poi); // Private variables DWORD _cRef; // COM reference count IUrlHistoryStg* _puhs; // URL History storage IEnumSTATURL* _pesu; // URL enumerator LPOLESTR _pwszAlternate; // Alternate string FILETIME _ftAlternate; // Last visited time for _pwszAlternate HDSA _hdsaAlternateData; // Contains alternate mappings DWORD _dwOptions; // Options flag // Private functions HRESULT _Next(LPOLESTR* ppsz, ULONG cch, FILETIME* pftLastVisited); void _CreateAlternateData(void); void _CreateAlternateItem(LPCTSTR pszUrl); void _SetAlternateItem(LPCTSTR pszUrl); void _AddAlternateDataItem(LPCTSTR pszProtocol, LPCTSTR pszDomain, BOOL fMoveSlashes); void _ReadAndSortHistory(void); static int _FreeAlternateDataItem(LPVOID p, LPVOID d); }; #endif // _ACLHIST_H_