/*++ © 1998 Seagate Software, Inc. All rights reserved. Module Name: hsmcrit.cpp Abstract: This component represents the criteria that can be used to determine whether a given scanItem should have a policy applied to it. Author: Chuck Bardeen [cbardeen] 29-Oct-1996 Revision History: --*/ #include "resource.h" // main symbols #include "wsb.h" #ifndef _HSMCRIT_ #define _HSMCRIT_ // Abstract Classes /*++ Class Name: CHsmCriteria Class Description: An abstract class that represents the criteria that can be used to determine whether a given FsaScanItem should have a policy applied to it. These criteria are based upon properties of an FsaScanItem. --*/ class CHsmCriteria : public CWsbObject, public IHsmCriteria { // CComObjectRoot public: STDMETHOD(FinalConstruct)(void); // IPersistStream public: STDMETHOD(GetSizeMax)(ULARGE_INTEGER* pSize); STDMETHOD(Load)(IStream* pStream); STDMETHOD(Save)(IStream* pStream, BOOL clearDirty); // IWsbTestable STDMETHOD(Test)(USHORT *passed, USHORT* failed); // IHsmCriteria public: STDMETHOD(GetName)(OLECHAR** pName, ULONG bufferSize); STDMETHOD(IsIgnored)(void); STDMETHOD(IsNegated)(void); STDMETHOD(SetIsIgnored)(BOOL isIgnored); STDMETHOD(SetIsNegated)(BOOL isNegated); protected: ULONG m_nameId; BOOL m_isIgnored; BOOL m_isNegated; }; /*++ Class Name: CHsmRelativeCriteria Class Description: An abstract class that represents the criteria that compare the properties of the FsaScanItem to another value (or values) to determine whether the FsaScanItem matches. --*/ class CHsmRelativeCriteria : public CHsmCriteria, public IHsmRelativeCriteria { // CComObjectRoot public: STDMETHOD(FinalConstruct)(void); void FinalRelease(void); // IPersistStream public: STDMETHOD(GetSizeMax)(ULARGE_INTEGER* pSize); STDMETHOD(Load)(IStream* pStream); STDMETHOD(Save)(IStream* pStream, BOOL clearDirty); // IHsmRelativeCriteria public: STDMETHOD(ComparatorAsString)(OLECHAR** pComparator, ULONG bufferSize); STDMETHOD(ComparatorIsBinary)(void); STDMETHOD(GetArg1)(OLECHAR** pArg, ULONG bufferSize); STDMETHOD(GetArg2)(OLECHAR** pArg, ULONG bufferSize); STDMETHOD(GetComparator)(HSM_CRITERIACOMPARATOR* pComparator); STDMETHOD(SetComparator)(HSM_CRITERIACOMPARATOR comparator); STDMETHOD(SetArg1)(OLECHAR* arg); STDMETHOD(SetArg2)(OLECHAR* arg); protected: HSM_CRITERIACOMPARATOR m_comparator; OLECHAR* m_arg1; OLECHAR* m_arg2; }; // Concrete Classes : Inheriting from CHsmAction /*++ Class Name: CHsmCritAlways Class Description: A criteria that matches all FsaScanItems. --*/ class CHsmCritAlways : public CHsmCriteria, public CComCoClass { public: CHsmCritAlways() {} BEGIN_COM_MAP(CHsmCritAlways) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritAlways) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IWsbTestable STDMETHOD(Test)(USHORT *passed, USHORT* failed); // IHsmCriteria public: STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); }; /*++ Class Name: CHsmCritCompressed Class Description: A criteria that matches an FsaScanItems that is compressed. --*/ class CHsmCritCompressed : public CHsmCriteria, public CComCoClass { public: CHsmCritCompressed() {} BEGIN_COM_MAP(CHsmCritCompressed) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritCompressed) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); }; /*++ Class Name: CHsmCritLinked Class Description: A criteria that matches an FsaScanItem that is a symbolic link or mount point. --*/ class CHsmCritLinked : public CHsmCriteria, public CComCoClass { public: CHsmCritLinked() {} BEGIN_COM_MAP(CHsmCritLinked) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritLinked) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); }; /*++ Class Name: CHsmCritMbit Class Description: A criteria that matches an FsaScanItem whose mbit (modify bit) is set. --*/ class CHsmCritMbit : public CHsmCriteria, public CComCoClass { public: CHsmCritMbit() {} BEGIN_COM_MAP(CHsmCritMbit) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritMbit) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); }; /*++ Class Name: CHsmCritManageable Class Description: A criteria that matches an FsaScanItem that the Fsa thinks is capable of migrated. --*/ class CHsmCritManageable : public CHsmCriteria, public CComCoClass { public: CHsmCritManageable() {} BEGIN_COM_MAP(CHsmCritManageable) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritManageable) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); }; /*++ Class Name: CHsmCritMigrated Class Description: A criteria that matches an FsaScanItem that has been migrated. --*/ class CHsmCritMigrated : public CHsmCriteria, public CComCoClass { public: CHsmCritMigrated() {} BEGIN_COM_MAP(CHsmCritMigrated) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritMigrated) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); }; /*++ Class Name: CHsmCritPremigrated Class Description: A criteria that matches an FsaScanItem that has been premigrated. --*/ class CHsmCritPremigrated : public CHsmCriteria, public CComCoClass { public: CHsmCritPremigrated() {} BEGIN_COM_MAP(CHsmCritPremigrated) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritPremigrated) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); }; /*++ Class Name: CHsmCritAccessTime Class Description: A criteria that compares the configured time (either absolute or relative) to the FsaScanItem's last access time to determine if it matches. --*/ class CHsmCritAccessTime : public CHsmRelativeCriteria, public CComCoClass { public: CHsmCritAccessTime() {} BEGIN_COM_MAP(CHsmCritAccessTime) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY(IHsmRelativeCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritAccessTime) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(SetArg1)(OLECHAR* arg); STDMETHOD(SetArg2)(OLECHAR* arg); STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); protected: BOOL m_isRelative; FILETIME m_value1; FILETIME m_value2; }; /*++ Class Name: CHsmCritGroup Class Description: A criteria that compares the group specified to the group indicated being the owner of the FsaScanItem. --*/ class CHsmCritGroup : public CHsmRelativeCriteria, public CComCoClass { public: CHsmCritGroup() {} BEGIN_COM_MAP(CHsmCritGroup) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY(IHsmRelativeCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritGroup) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); }; /*++ Class Name: CHsmCritLogicalSize Class Description: A criteria that compares the logical size (uncompressed, not migrated, ...) of the FsaScanItem to the configured values. --*/ class CHsmCritLogicalSize : public CHsmRelativeCriteria, public CComCoClass { public: CHsmCritLogicalSize() {} BEGIN_COM_MAP(CHsmCritLogicalSize) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY(IHsmRelativeCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritLogicalSize) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(SetArg1)(OLECHAR* arg); STDMETHOD(SetArg2)(OLECHAR* arg); STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); protected: LONGLONG m_value1; LONGLONG m_value2; }; /*++ Class Name: CHsmCritModifyTime Class Description: A criteria that compares the configured time (either absolute or relative) to the FsaScanItem's last modification time to determine if it matches. --*/ // Class: CHsmCritModifyTime class CHsmCritModifyTime : public CHsmRelativeCriteria, public CComCoClass { public: CHsmCritModifyTime() {} BEGIN_COM_MAP(CHsmCritModifyTime) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY(IHsmRelativeCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritModifyTime) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(SetArg1)(OLECHAR* arg); STDMETHOD(SetArg2)(OLECHAR* arg); STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); protected: BOOL m_isRelative; FILETIME m_value1; FILETIME m_value2; }; /*++ Class Name: CHsmCritOwner Class Description: A criteria that compares the owner specified to the owner of the FsaScanItem. --*/ class CHsmCritOwner : public CHsmRelativeCriteria, public CComCoClass { public: CHsmCritOwner() {} BEGIN_COM_MAP(CHsmCritOwner) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY(IHsmRelativeCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritOwner) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); }; /*++ Class Name: CHsmCritPhysicalSize Class Description: A criteria that compares the physical size (compressed, migrated, ...) of the FsaScanItem to the configured values. --*/ class CHsmCritPhysicalSize : public CHsmRelativeCriteria, public CComCoClass { public: CHsmCritPhysicalSize() {} BEGIN_COM_MAP(CHsmCritPhysicalSize) COM_INTERFACE_ENTRY(IHsmCriteria) COM_INTERFACE_ENTRY(IHsmRelativeCriteria) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_CHsmCritPhysicalSize) // CComRootObject public: STDMETHOD(FinalConstruct)(void); // IPersist public: STDMETHOD(GetClassID)(LPCLSID pClsid); // IHsmCriteria public: STDMETHOD(SetArg1)(OLECHAR* arg); STDMETHOD(SetArg2)(OLECHAR* arg); STDMETHOD(ShouldDo)(IFsaScanItem* pScanItem, USHORT scale); STDMETHOD(Value)(IFsaScanItem* pScanItem, OLECHAR** pName, ULONG bufferSize); protected: LONGLONG m_value1; LONGLONG m_value2; }; #endif // _HSMCRIT_