Windows-Server-2003/inetsrv/query/fsci/dll/metapenm.hxx

201 lines
4.7 KiB
C++

//+-------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation, 1992 - 1997
//
// File: metapenm.hxx
//
// Contents: Enumerator for metadata properties
//
// History: 12-Dec-96 SitaramR Created
//
//--------------------------------------------------------------------------
#pragma once
#include <propret.hxx>
#include <catalog.hxx>
#include <ciintf.h>
class PCatalog;
//+-------------------------------------------------------------------------
//
// Class: CMetaPropEnum
//
// Purpose: Enumerate metadata properties
//
// History: 13-Apr-96 KyleP Created
//
//--------------------------------------------------------------------------
class CMetaPropEnum : public CGenericPropRetriever, ICiCScopeEnumerator
{
INLINE_UNWIND( CMetaPropEnum );
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 CheckSecurity( ACCESS_MASK am,
BOOL *pfGranted);
SCODE STDMETHODCALLTYPE IsInScope( BOOL *pfInScope);
//
// 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();
//
// Local methods
//
CMetaPropEnum( PCatalog & cat,
ICiQueryPropertyMapper *pQueryPropMapper,
CSecurityCache & secCache,
BOOL fUsePathAlias );
protected:
virtual ~CMetaPropEnum();
WORKID NextObject();
//
// Stat properties.
//
inline UNICODE_STRING const * GetName();
inline UNICODE_STRING const * GetPath();
inline UNICODE_STRING const * GetShortName();
inline UNICODE_STRING const * GetVirtualPath();
inline LONGLONG CreateTime();
inline LONGLONG ModifyTime();
inline LONGLONG AccessTime();
inline LONGLONG ObjectSize();
inline ULONG Attributes();
inline ULONG StorageType();
inline DWORD StorageLevel();
inline BOOL IsModifiable();
BOOL GetPropGuid( GUID & guid );
PROPID GetPropPropid();
UNICODE_STRING const * GetPropName();
UNICODE_STRING _Name; // Property name (or propid)
UNICODE_STRING _Path; // GUID
private:
enum { ccStringizedGuid = 36 };
WORKID _widCurrent; // Wid on which the meta prop enumerator
// is currently positioned
unsigned _iBmk; // Bookmark into properties
WCHAR _awcGuid[ccStringizedGuid + 1]; // 'Path' aka GUID
WCHAR _awcPropId[11]; // 'Name' aka PropId
CFullPropSpec _psCurrent; // Propspec
unsigned _cbCurrent; // Size in cache
ULONG _typeCurrent; // Type in cache
DWORD _storeLevelCurrent; // Propstore level (prim or sec) in cache
BOOL _fModifiableCurrent; // Can meta data be modified after initial setting?
};
inline UNICODE_STRING const * CMetaPropEnum::GetName()
{
return( &_Name );
}
inline UNICODE_STRING const * CMetaPropEnum::GetPath()
{
return( &_Path );
}
inline UNICODE_STRING const * CMetaPropEnum::GetShortName()
{
return( &_Name );
}
inline UNICODE_STRING const * CMetaPropEnum::GetVirtualPath()
{
return 0;
}
inline LONGLONG CMetaPropEnum::CreateTime()
{
return 0xFFFFFFFFFFFFFFFF;
}
inline LONGLONG CMetaPropEnum::ModifyTime()
{
return 0xFFFFFFFFFFFFFFFF;
}
inline LONGLONG CMetaPropEnum::AccessTime()
{
return 0xFFFFFFFFFFFFFFFF;
}
inline LONGLONG CMetaPropEnum::ObjectSize()
{
return _cbCurrent;
}
inline ULONG CMetaPropEnum::Attributes()
{
return 0xFFFFFFFF;
}
inline ULONG CMetaPropEnum::StorageType()
{
if ( 0 == _cbCurrent )
return 0xFFFFFFFF;
else
return _typeCurrent;
}
inline DWORD CMetaPropEnum::StorageLevel()
{
if ( 0 == _cbCurrent )
return INVALID_STORE_LEVEL;
else
return _storeLevelCurrent;
}
inline BOOL CMetaPropEnum::IsModifiable()
{
if ( 0 == _cbCurrent )
return FALSE;
else
return _fModifiableCurrent;
}