//+------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation, 1992 - 1997 // // File: vrtenum.hxx // // Contents: Virtual roots enumerator // // History: 25-Jul-93 KyleP Created // //-------------------------------------------------------------------------- #pragma once #include #include #include //+------------------------------------------------------------------------- // // Class: CVRootEnum // // Purpose: Enumerate virtual root metadata // // History: 13-Apr-96 KyleP Created // //-------------------------------------------------------------------------- class CVRootEnum : public CGenericPropRetriever, ICiCScopeEnumerator { public: // // From IUnknown // virtual SCODE STDMETHODCALLTYPE QueryInterface( REFIID riid, void **ppvObject ); virtual ULONG STDMETHODCALLTYPE AddRef(); virtual ULONG STDMETHODCALLTYPE Release(); // // From CGenericPropRetriever // SCODE STDMETHODCALLTYPE BeginPropertyRetrieval( WORKID wid ); SCODE STDMETHODCALLTYPE IsInScope( BOOL *pfInScope); SCODE STDMETHODCALLTYPE EndPropertyRetrieval(); // // From ICiCScopeEnumerator // SCODE STDMETHODCALLTYPE Begin(); SCODE STDMETHODCALLTYPE CurrentDocument( WORKID *pWorkId); SCODE STDMETHODCALLTYPE NextDocument( WORKID *pWorkId ); SCODE STDMETHODCALLTYPE RatioFinished( ULONG *pulDenominator, ULONG *pulNumerator); SCODE STDMETHODCALLTYPE End(); CVRootEnum( PCatalog & cat, ICiQueryPropertyMapper *pQueryPropMapper, CSecurityCache & secCache, BOOL fUsePathAlias ); protected: virtual ~CVRootEnum(); WORKID NextObject(); // // Stat properties. // inline UNICODE_STRING const * GetName(); inline UNICODE_STRING const * GetShortName(); UNICODE_STRING const * GetPath(); UNICODE_STRING const * GetVirtualPath(); inline LONGLONG CreateTime(); inline LONGLONG ModifyTime(); inline LONGLONG AccessTime(); inline LONGLONG ObjectSize(); inline ULONG Attributes(); BOOL GetVRootType( ULONG & ulType ); inline void PurgeCachedInfo(); UNICODE_STRING _Name; // Filename UNICODE_STRING _Path; // Full path sans filename UNICODE_STRING _VPath; // Full path sans filename private: WORKID _widCurrent; // Wid on which the vroot enumerator // is currently positioned BOOL Refresh( BOOL fFast ); // Refresh stat properties unsigned _iBmk; // Bookmark into virtual roots BOOL _fFindLoaded:1; // True if finddata is loaded BOOL _fFastFindLoaded:1; // True if GetFileAttributesEx called ULONG _Type; // Root type. enum FastStat { fsCreate = 0x1, fsModify = 0x2, fsAccess = 0x4, fsSize = 0x8, fsAttrib = 0x10 }; ULONG _fFastStatLoaded; ULONG _fFastStatNeverLoad; WIN32_FIND_DATA _finddata; // Stat buffer for current wid UNICODE_STRING _ShortName; // Filename CLowerFunnyPath _lcaseFunnyPath; // Buffer for path XGrowable _xwcsVPath; // Buffer for virtual path }; inline void CVRootEnum::PurgeCachedInfo() { _fFindLoaded = FALSE; _fFastFindLoaded = FALSE; _fFastStatLoaded = 0; _fFastStatNeverLoad = 0; _Path.Length = 0xFFFF; _VPath.Length = 0xFFFF; } inline UNICODE_STRING const * CVRootEnum::GetName() { return( &_Name ); }