//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1997. // // File: statprop.hxx // // Contents: CStatPropertyStorage // //---------------------------------------------------------------------------- #pragma once //+--------------------------------------------------------------------------- // // Class: CStatPropertyStorage // // Purpose: IPropertyStorage derivative that provides read-only access to // the stat properties of a document. // //---------------------------------------------------------------------------- class CStatPropertyStorage : public IPropertyStorage { public: // // Constructor and Destructor // CStatPropertyStorage( THIS_ HANDLE FileHandle, unsigned cPathLength = MAX_PATH ); // // IUnknown methods. // STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID *ppiuk ); STDMETHOD_(ULONG, AddRef) (THIS); STDMETHOD_(ULONG, Release) (THIS); // // IPropertyStorage methods. // STDMETHOD(ReadMultiple) ( THIS_ ULONG cpspec, const PROPSPEC __RPC_FAR rgpspec[ ], PROPVARIANT __RPC_FAR rgpropvar[ ] ); STDMETHOD(WriteMultiple) ( THIS_ ULONG cpspec, const PROPSPEC __RPC_FAR rgpspec[ ], const PROPVARIANT __RPC_FAR rgpropvar[ ], PROPID propidNameFirst ) { return E_NOTIMPL; } STDMETHOD(DeleteMultiple) ( THIS_ ULONG cpspec, const PROPSPEC __RPC_FAR rgpspec[ ] ) { return E_NOTIMPL; } STDMETHOD(ReadPropertyNames) ( THIS_ ULONG cpropid, const PROPID __RPC_FAR rgpropid[ ], LPOLESTR __RPC_FAR rglpwstrName[ ] ) { return E_NOTIMPL; } STDMETHOD(WritePropertyNames) ( THIS_ ULONG cpropid, const PROPID __RPC_FAR rgpropid[ ], const LPOLESTR __RPC_FAR rglpwstrName[ ] ) { return E_NOTIMPL; } STDMETHOD(DeletePropertyNames) ( THIS_ ULONG cpropid, const PROPID __RPC_FAR rgpropid[ ] ) { return E_NOTIMPL; } STDMETHOD(Commit) ( THIS_ DWORD grfCommitFlags ) { return E_NOTIMPL; } STDMETHOD(Revert) ( THIS ) { return E_NOTIMPL; } STDMETHOD(Enum) ( THIS_ IEnumSTATPROPSTG __RPC_FAR *__RPC_FAR *ppenum ); STDMETHOD(SetTimes) ( THIS_ const FILETIME __RPC_FAR *pctime, const FILETIME __RPC_FAR *patime, const FILETIME __RPC_FAR *pmtime ) { return E_NOTIMPL; } STDMETHOD(SetClass) ( THIS_ REFCLSID clsid ) { return E_NOTIMPL; } STDMETHOD(Stat) ( THIS_ STATPROPSETSTG __RPC_FAR *pstatpsstg) { return E_NOTIMPL; } protected: // // Hidden destructor so that only we can delete the instance // based on IUnknown control // virtual ~CStatPropertyStorage() { }; private: // // Buffer containing Basic Info // FILE_ALL_INFORMATION & GetInfo() { return * (FILE_ALL_INFORMATION *) _xBuf.Get(); //return _infobuf; } BOOL IsNTFS() { return (0 != GetInfo().BasicInformation.ChangeTime.QuadPart); } XGrowable _xBuf; // // IUnknown reference count. // LONG _RefCount; // // File name pointer into above buffer // LPWSTR _FileName; }; //+--------------------------------------------------------------------------- // // Class: CStatPropertyEnum // // Purpose: IEnumSTATPROPSTG enumerator // //---------------------------------------------------------------------------- class CStatPropertyEnum : public IEnumSTATPROPSTG { public: // // Constructor and Destructor // CStatPropertyEnum( BOOL fNTFS ) : _RefCount( 1 ), _Index( fNTFS ? 0 : 1 ) {}; // // IUnknown methods. // STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID *ppiuk ); STDMETHOD_(ULONG, AddRef) (THIS); STDMETHOD_(ULONG, Release) (THIS); // // IEnumSTATPROPSTG methods. // STDMETHOD(Next) ( THIS_ ULONG celt, STATPROPSTG __RPC_FAR *rgelt, ULONG __RPC_FAR *pceltFetched ); STDMETHOD(Skip) ( THIS_ ULONG celt ) { _Index += celt; return S_OK; } STDMETHOD(Reset) ( THIS ) { _Index = 0; return S_OK; } STDMETHOD(Clone) ( IEnumSTATPROPSTG __RPC_FAR *__RPC_FAR *ppenum ) { return E_NOTIMPL; } protected: // // Hidden destructor so that only we can delete the instance // based on IUnknown control // virtual ~CStatPropertyEnum() { } private: // // IUnknown reference count. // LONG _RefCount; // // Index in state table of property retrieval. // LONG _Index; };