//+--------------------------------------------------------------------------- // // Microsoft Net Library System // Copyright (C) Microsoft Corporation, 1996 - 1997. // // File: fsciexps.hxx // // Contents: Objects provided by the FileSystem CI client to // Olympus. These are : // // 1. Property Store. // 2. Property Store iterator. // 3. User mode security cache. // // History: 4-07-97 srikants Created // 4-07-97 KrishnaN Added property store declaration // //---------------------------------------------------------------------------- #pragma once //+--------------------------------------------------------------------------- // // Class: PPropertyStore // // Purpose: The property store. // // History: 4-07-97 KrishnaN Created // // Notes: This interface exposes a HPropRecord instead of the CI // specific CPropRecord. // //---------------------------------------------------------------------------- class CStorageVariant; class CFullPropSpec; typedef void (CALLBACK * T_UpdateDoc)(WORKID wid, BOOL fDelete, void const *pUserData); typedef HANDLE HPropRecord; // the sizes of CPropRecord and CCompositeRecord are smaller // than the values specified here. We just want to be sure // we allocate something larger than the actual size. unsigned const sizeof_CPropRecord = 100; unsigned const sizeof_CCompositePropRecord = 200; // // The following constants enable SetParameter and GetParameter to be generic // and at the same time allow for control of individual params. Currently // both the params should be accompanied by VT_UI4 datatype. // #define PSPARAM_PRIMARY_MAPPEDCACHESIZE 0 #define PSPARAM_PRIMARY_BACKUPSIZE 1 #define PSPARAM_SECONDARY_MAPPEDCACHESIZE 2 #define PSPARAM_SECONDARY_BACKUPSIZE 3 #define PRIMARY_STORE 0 #define SECONDARY_STORE 1 #define INVALID_STORE_LEVEL 0xFFFFFFFF class PPropertyStore { public: virtual ~PPropertyStore() {} // // This method internally fabricates a CiStorage from the pwszDirectory. // virtual SCODE FastInit( WCHAR const * pwszDirectory) = 0; virtual SCODE LongInit( BOOL & fWasDirty, ULONG & cInconsistencies, T_UpdateDoc pfnUpdateCallback, void const *pUserData ) = 0; virtual SCODE IsDirty( BOOL &fIsDirty ) const = 0; virtual SCODE Empty() = 0; // // Schema manipulation // virtual SCODE CanStore( PROPID pid, BOOL &fCanStore ) = 0; virtual SCODE Size( PROPID pid, unsigned * pusSize ) = 0; virtual SCODE Type( PROPID pid, PULONG pulType ) = 0; virtual SCODE BeginTransaction( PULONG_PTR pulReturn) = 0; virtual SCODE Setup( PROPID pid, ULONG vt, DWORD cbMaxLen, ULONG_PTR ulToken, BOOL fCanBeModified = TRUE, DWORD dwStoreLevel = PRIMARY_STORE) = 0; virtual SCODE EndTransaction( ULONG_PTR ulToken, BOOL fCommit, PROPID pidFixedPrimary, PROPID pidFixedSecondary ) = 0; // // Property storage/retrieval. // virtual SCODE WriteProperty( WORKID wid, PROPID pid, CStorageVariant const & var, BOOL &fExists) = 0; virtual SCODE WritePropertyInNewRecord( PROPID pid, CStorageVariant const & var, WORKID *pwid ) = 0; virtual SCODE ReadProperty( WORKID wid, PROPID pid, PROPVARIANT * pbData, unsigned * pcb, BOOL &fExists) = 0; virtual SCODE ReadProperty( WORKID wid, PROPID pid, PROPVARIANT & var, BYTE * pbExtra, unsigned * pcbExtra, BOOL &fExists) = 0; virtual SCODE ReadProperty( HPropRecord, PROPID pid, PROPVARIANT & var, BYTE * pbExtra, unsigned * pcbExtra, BOOL &fExists ) = 0; virtual SCODE ReadProperty( HPropRecord, PROPID pid, PROPVARIANT * pbData, unsigned * pcb, BOOL &fExists) = 0; virtual SCODE ReadProperty( WORKID wid, PROPID pid, PROPVARIANT & var, BOOL &fExists) = 0; virtual SCODE OpenRecord( WORKID wid, BYTE * pb, HPropRecord &hRec) = 0; virtual SCODE CloseRecord( HPropRecord hRec ) = 0; // // Special path/wid support // virtual SCODE MaxWorkId(WORKID &wid) = 0; virtual SCODE DeleteRecord( WORKID wid ) = 0; virtual SCODE CountRecordsInUse(ULONG &ulRecInUse) const = 0; virtual SCODE Shutdown() = 0; virtual SCODE Flush() = 0; // // Property Save/Load // virtual SCODE Save( WCHAR const * pwszDirectory, IProgressNotify * pProgressNotify, ICiEnumWorkids * pEnumWorkids, BOOL * pfAbort, IEnumString ** ppFileList) = 0; virtual SCODE Load( WCHAR const * pwszDestinationDirectory, // dest dir IEnumString * pFileList, // list of files to copy IProgressNotify * pProgressNotify, BOOL fCallerOwnsFiles, BOOL * pfAbort ) = 0; // // Enables parametrization of the property store // virtual SCODE SetParameter(VARIANT var, DWORD eParamType) = 0; virtual SCODE GetParameter(VARIANT &var, DWORD eParamType) = 0; // Miscellaneous virtual SCODE GetTotalSizeInKB(ULONG * pSize) = 0; // // Enables refcounting. Final Release causes delete. // virtual ULONG AddRef() = 0; virtual ULONG Release() = 0; }; //+--------------------------------------------------------------------------- // // Class: PPropertyStoreIter // // Purpose: An iterator for the property store. // // History: 4-07-97 srikants Created // // Notes: // //---------------------------------------------------------------------------- class PPropertyStore; class PPropertyStoreIter { public: virtual ULONG AddRef() = 0; virtual ULONG Release() = 0; virtual SCODE GetWorkId(WORKID &wid) = 0; virtual SCODE GetNextWorkId(WORKID &wid) = 0; }; typedef ULONG SDID; //+--------------------------------------------------------------------------- // // Class: PSecurityStore // // Purpose: A table for doing SecurityDescriptor to SDID mapping and // doing access checks based on the SDID. // // History: 4-07-97 srikants Created // //---------------------------------------------------------------------------- class PSecurityStore { public: virtual ~PSecurityStore() {} virtual ULONG AddRef() = 0; virtual ULONG Release() = 0; // Initialize data from the given directory location. virtual SCODE Init( WCHAR const * pwszDirectory ) = 0; // Load data from the files produced by "Save". The first parameter // is the target directory for loading. virtual SCODE Load( WCHAR const * pwszDestinationDirectory, // dest dir IEnumString * pFileList, // list of files to copy IProgressNotify * pProgressNotify, BOOL fCallerOwnsFiles, BOOL * pfAbort ) = 0; // Make a copy of the security store. This can potentially be shipped // to a different machine. virtual SCODE Save( WCHAR const * pwszSaveDir, BOOL * pfAbort, IEnumString ** ppFileList, IProgressNotify * pProgressEnum ) = 0; // Empty the contents of the security store. virtual SCODE Empty() = 0; // Look up the 4byte SDID of the given security descriptor. virtual SCODE LookupSDID( PSECURITY_DESCRIPTOR pSD, ULONG cbSD, SDID & sdid ) = 0; // Tests if the given token has access to the document with the given // SDID. virtual SCODE AccessCheck( SDID sdid, HANDLE hToken, ACCESS_MASK am, BOOL & fGranted ) = 0; // Obtains the security descriptor associated with the given SDID. virtual SCODE GetSecurityDescriptor( SDID sdid, PSECURITY_DESCRIPTOR pSD, ULONG cbSDIn, ULONG & cbSDOut ) = 0; virtual SCODE Shutdown() = 0; }; // // DLL exports for creating the various objects. // extern "C" { // Creates a property store. Needs ICiAdviseStatus SCODE CreatePropertyStore( ICiCAdviseStatus *pAdviseStatus, ULONG ulMaxPropertyStoreMappedCache, PPropertyStore **ppPropertyStore ); // Creates a property store iterator given a property store. SCODE CreatePropertyStoreIter( PPropertyStore * pPropStore, PPropertyStoreIter ** ppPropStoreIter ); // Creates a security store. SCODE CreateSecurityStore( ICiCAdviseStatus * pAdviseStatus, PSecurityStore ** ppSecurityStore ); } // extern "C" #define CREATE_PROPERTY_STORE_PROC_A "CreatePropertyStore" #define CREATE_PROPERTY_STORE_PROC_W L"CreatePropertyStore" #define CREATE_PROPERTY_STORE_ITER_PROC_A "CreatePropertyStoreIter" #define CREATE_PROPERTY_STORE_ITER_PROC_W L"CreatePropertyStoreIter" #define CREATE_SECURITY_STORE_PROC_A "CreateSecurityStore" #define CREATE_SECURITY_STORE_PROC_W L"CreateSecurityStore"