//////////////////////////////////////
//        Imports
//

import "oaidl.idl";


//////////////////////////////////////
//        Typedefs and enums
//

//
// FSRM object ID
//
typedef GUID FSRM_OBJECT_ID;


//
// Quota flags
//

typedef enum _FsrmQuotaFlags {

    // Persistent flags
    FsrmQuotaFlags_Enforce          = 0x00000100,
    FsrmQuotaFlags_Disable          = 0x00000200,

    // Quota status flags
    FsrmQuotaFlags_StatusIncomplete = 0x00010000,
    FsrmQuotaFlags_StatusRebuilding = 0x00020000

} FsrmQuotaFlags;


//
// File screen flags
//

typedef enum _FsrmFileScreenFlags {

    // Persistent flags
    FsrmFileScreenFlags_Enforce = 0x00000001

} FsrmFileScreenFlags;


//
// General Collection
//

typedef enum _FsrmCollectionState {

    FsrmCollectionState_Fetching    = 1,
    FsrmCollectionState_Committing  = 2,
    FsrmCollectionState_Complete    = 3,
    FsrmCollectionState_Cancelled   = 4

} FsrmCollectionState;

typedef enum _FsrmEnumOptions {

    FsrmEnumOptions_None                = 0x00000000,
    FsrmEnumOptions_Asynchronous        = 0x00000001,
    FsrmEnumOptions_CheckRecycleBin     = 0x00000002,
    FsrmEnumOptions_IncludeClusterNodes = 0x00000004

} FsrmEnumOptions;

typedef enum _FsrmCommitOptions {

    FsrmCommitOptions_None              = 0x00000000,
    FsrmCommitOptions_Asynchronous      = 0x00000001

} FsrmCommitOptions;

typedef enum _FsrmTemplateApplyOptions {

    FsrmTemplateApplyOptions_ApplyToDerivedMatching = 1,
    FsrmTemplateApplyOptions_ApplyToDerivedAll      = 2

} FsrmTemplateApplyOptions;


//
// General Action
//

typedef enum _FsrmActionType {

    FsrmActionType_Unknown  = 0,
    FsrmActionType_EventLog = 1,
    FsrmActionType_Email    = 2,
    FsrmActionType_Command  = 3,
    FsrmActionType_Report   = 4

} FsrmActionType;


//
// EventLog Action
//

typedef enum _FsrmEventType {

    FsrmEventType_Unknown       = 0,
    FsrmEventType_Information   = 1,
    FsrmEventType_Warning       = 2,
    FsrmEventType_Error         = 3

} FsrmEventType;


//
// Command Action
//

typedef enum _FsrmAccountType {

    FsrmAccountType_Unknown         = 0,
    FsrmAccountType_NetworkService  = 1,
    FsrmAccountType_LocalService    = 2,
    FsrmAccountType_LocalSystem     = 3,
    FsrmAccountType_InProc          = 4,
    FsrmAccountType_External        = 5

} FsrmAccountType;


//
// Storage Reports
//

typedef enum _FsrmReportType {

    FsrmReportType_Unknown                  = 0,
    FsrmReportType_LargeFiles               = 1,
    FsrmReportType_FilesByType              = 2,
    FsrmReportType_LeastRecentlyAccessed    = 3,
    FsrmReportType_MostRecentlyAccessed     = 4,
    FsrmReportType_QuotaUsage               = 5,
    FsrmReportType_FilesByOwner             = 6,
    FsrmReportType_ExportReport             = 7,
    FsrmReportType_DuplicateFiles           = 8,
    FsrmReportType_FileScreenAudit          = 9,
    FsrmReportType_FilesByProperty          = 10,
    FsrmReportType_AutomaticClassification  = 11,
    FsrmReportType_Expiration               = 12

} FsrmReportType;

typedef enum _FsrmReportFormat {

    FsrmReportFormat_Unknown    = 0,
    FsrmReportFormat_DHtml      = 1,
    FsrmReportFormat_Html       = 2,
    FsrmReportFormat_Txt        = 3,
    FsrmReportFormat_Csv        = 4,
    FsrmReportFormat_Xml        = 5

} FsrmReportFormat;

typedef enum _FsrmReportRunningStatus {

    FsrmReportRunningStatus_Unknown     = 0,
    FsrmReportRunningStatus_NotRunning  = 1,
    FsrmReportRunningStatus_Queued      = 2,
    FsrmReportRunningStatus_Running     = 3

} FsrmReportRunningStatus;

typedef enum _FsrmReportGenerationContext {

    FsrmReportGenerationContext_Undefined           = 1,
    FsrmReportGenerationContext_ScheduledReport     = 2,
    FsrmReportGenerationContext_InteractiveReport   = 3,
    FsrmReportGenerationContext_IncidentReport      = 4

} FsrmReportGenerationContext;

//
// Report filtering definitions
// ============================
//
//  Filter Name     Description             Valid Reports               Valid Value Types
//  --------------  ----------------------  --------------------------  ------------------------------------------
//  MinSize         Minimum size            Large Files                 uint64 or string representation
//
//  MinAgeDays      Minimum age in days     Least Recently Accessed     uint32 or string representation
//                                          File Screen Audit
//
//  MaxAgeDays      Maximum age in days     Most Recently Accessed      uint32 or string representation
//
//  MinQuotaUsage   Minimum % quota usage   Quota Usage                 uint32 or string representation
//
//  FileGroups      File group names        Files by Type               SAFEARRAY of strings (file group names)
//
//  Owners          Owners                  Files by Owner              SAFEARRAY of strings (names or SIDs)
//                                          File Screen Audit
//
//  NamePattern     File name pattern       Large Files                 string (DOS file name pattern)
//                                          Files by Type
//                                          Least Recently Accessed
//                                          Most Recently Accessed
//                                          Files by Owner
//                                          Export Report
//                                          Duplicate Files
//

typedef enum _FsrmReportFilter {

    FsrmReportFilter_MinSize        = 1,
    FsrmReportFilter_MinAgeDays     = 2,
    FsrmReportFilter_MaxAgeDays     = 3,
    FsrmReportFilter_MinQuotaUsage  = 4,
    FsrmReportFilter_FileGroups     = 5,
    FsrmReportFilter_Owners         = 6,
    FsrmReportFilter_NamePattern    = 7,
    FsrmReportFilter_Property       = 8

} FsrmReportFilter;

typedef enum _FsrmReportLimit {

    FsrmReportLimit_MaxFiles                    = 1,
    FsrmReportLimit_MaxFileGroups               = 2,
    FsrmReportLimit_MaxOwners                   = 3,
    FsrmReportLimit_MaxFilesPerFileGroup        = 4,
    FsrmReportLimit_MaxFilesPerOwner            = 5,
    FsrmReportLimit_MaxFilesPerDuplGroup        = 6,
    FsrmReportLimit_MaxDuplicateGroups          = 7,
    FsrmReportLimit_MaxQuotas                   = 8,
    FsrmReportLimit_MaxFileScreenEvents         = 9,
    FsrmReportLimit_MaxPropertyValues           = 10,
    FsrmReportLimit_MaxFilesPerPropertyValue    = 11

} FsrmReportLimit;


//
// Pipeline
//

typedef enum _FsrmPropertyDefinitionType {

    FsrmPropertyDefinitionType_Unknown          = 0,
    FsrmPropertyDefinitionType_OrderedList      = 1,
    FsrmPropertyDefinitionType_MultiChoiceList  = 2,
    FsrmPropertyDefinitionType_String           = 4,
    FsrmPropertyDefinitionType_MultiString      = 5,
    FsrmPropertyDefinitionType_Int              = 6,
    FsrmPropertyDefinitionType_Bool             = 7,
    FsrmPropertyDefinitionType_Date             = 8

} FsrmPropertyDefinitionType;

typedef enum _FsrmRuleType {

    FsrmRuleType_Unknown         = 0,
    FsrmRuleType_Classification  = 1,
    FsrmRuleType_Generic         = 2

} FsrmRuleType;

typedef enum _FsrmRuleFlags {

    FsrmRuleFlags_Disabled      = 0x00000100,
    FsrmRuleFlags_Invalid       = 0x00001000

} FsrmRuleFlags;

typedef enum _FsrmClassificationLoggingFlags {

    FsrmClassificationLoggingFlags_None                         = 0x00000000,
    FsrmClassificationLoggingFlags_ClassificationsInLogFile     = 0x00000001,
    FsrmClassificationLoggingFlags_ErrorsInLogFile              = 0x00000002,
    FsrmClassificationLoggingFlags_ClassificationsInSystemLog   = 0x00000004,
    FsrmClassificationLoggingFlags_ErrorsInSystemLog            = 0x00000008

} FsrmClassificationLoggingFlags;

typedef enum _FsrmExecutionOption {

    FsrmExecutionOption_Unknown                           = 0,
    FsrmExecutionOption_EvaluateUnset                     = 1,      // Apply as a default value.
    FsrmExecutionOption_ReEvaluate_ConsiderExistingValue  = 2,      // Apply value but consider default and existing values.
    FsrmExecutionOption_ReEvaluate_IgnoreExistingValue    = 3       // Apply value but ignore default and existing values.

} FsrmExecutionOption;

typedef enum _FsrmStorageModuleCaps {

    FsrmStorageModuleCaps_Unknown       = 0x00000000,
    FsrmStorageModuleCaps_CanGet        = 0x00000001,
    FsrmStorageModuleCaps_CanSet        = 0x00000002

} FsrmStorageModuleCaps;

typedef enum _FsrmStorageModuleType {

    FsrmStorageModuleType_Unknown   = 0,
    FsrmStorageModuleType_Cache     = 1,
    FsrmStorageModuleType_InFile    = 2,
    FsrmStorageModuleType_Database  = 3

} FsrmStorageModuleType;

typedef enum _FsrmPropertyBagFlags
{

    FsrmPropertyBagFlags_UpdatedByClassifier            = 0x00000001,   // The properties in the property bag were updated by a classifier.
    FsrmPropertyBagFlags_FailedLoadingProperties        = 0x00000002,   // The properties in the property bag may only be partially classified because a failure occurred while loading properties from storage.
    FsrmPropertyBagFlags_FailedSavingProperties         = 0x00000004,   // The properties in the property bag failed to be saved by the storage module with the highest precedence.
    FsrmPropertyBagFlags_FailedClassifyingProperties    = 0x00000008,   // The properties in the property bag may only be partially classified because a failure occurred while classifying properties.

} FsrmPropertyBagFlags;

typedef enum _FsrmPropertyFlags {

    FsrmPropertyFlags_Orphaned                      = 0x00000001,   // The property does not have a corresponding definition in FSRM.
    FsrmPropertyFlags_RetrievedFromCache            = 0x00000002,   // The property value came from the cache.
    FsrmPropertyFlags_RetrievedFromStorage          = 0x00000004,   // The property value came from a storage module (other than the cache).
    FsrmPropertyFlags_SetByClassifier               = 0x00000008,   // The property value came from a classifier.
    FsrmPropertyFlags_Deleted                       = 0x00000010,   // The property was deleted by a ClearFileProperty call.
    FsrmPropertyFlags_Reclassified                  = 0x00000020,   // The property value from storage was changed to a different value by a classifier.
    FsrmPropertyFlags_AggregationFailed             = 0x00000040,   // There were values from multiple sources but they could not be aggregated together.
    FsrmPropertyFlags_Existing                      = 0x00000080,   // The property already exists in storage.
    FsrmPropertyFlags_FailedLoadingProperties       = 0x00000100,   // The property may only be partially classified because a failure occurred while loading properties from storage.
    FsrmPropertyFlags_FailedClassifyingProperties   = 0x00000200,   // The property may only be partially classified because a failure occurred while classifying properties.

    FsrmPropertyFlags_PropertySourceMask            = FsrmPropertyFlags_RetrievedFromCache |
                                                      FsrmPropertyFlags_RetrievedFromStorage |
                                                      FsrmPropertyFlags_SetByClassifier

} FsrmPropertyFlags;

typedef enum _FsrmPipelineModuleType {

    FsrmPipelineModuleType_Unknown      = 0,
    FsrmPipelineModuleType_Storage      = 1,
    FsrmPipelineModuleType_Classifier   = 2,

} FsrmPipelineModuleType;

typedef enum _FsrmGetFilePropertyOptions {

    FsrmGetFilePropertyOptions_None             = 0x00000000,
    FsrmGetFilePropertyOptions_NoRuleEvaluation = 0x00000001

} FsrmGetFilePropertyOptions;

typedef enum _FsrmFileManagementType {

    FsrmFileManagementType_Unknown      = 0,
    FsrmFileManagementType_Expiration   = 1,
    FsrmFileManagementType_Custom       = 2

} FsrmFileManagementType;

typedef enum _FsrmFileManagementLoggingFlags {

    FsrmFileManagementLoggingFlags_None         = 0x00000000,
    FsrmFileManagementLoggingFlags_Error        = 0x00000001,
    FsrmFileManagementLoggingFlags_Information  = 0x00000002,
    FsrmFileManagementLoggingFlags_Audit        = 0x00000004

} FsrmFileManagementLoggingFlags;

typedef enum _FsrmPropertyConditionType {

    FsrmPropertyConditionType_Unknown        = 0,
    FsrmPropertyConditionType_Equal          = 1,
    FsrmPropertyConditionType_NotEqual       = 2,
    FsrmPropertyConditionType_GreaterThan    = 3,
    FsrmPropertyConditionType_LessThan       = 4,
    FsrmPropertyConditionType_Contain        = 5,
    FsrmPropertyConditionType_Exist          = 6,
    FsrmPropertyConditionType_NotExist       = 7,
    FsrmPropertyConditionType_StartWith      = 8,
    FsrmPropertyConditionType_EndWith        = 9,
    FsrmPropertyConditionType_ContainedIn    = 10,
    FsrmPropertyConditionType_PrefixOf       = 11,
    FsrmPropertyConditionType_SuffixOf       = 12

} FsrmPropertyConditionType;


//
//  Streaming interface constants
//

typedef enum _FsrmFileStreamingMode
{
    FsrmFileStreamingMode_Unknown   = 0x00000000, 
    FsrmFileStreamingMode_Read      = 0x00000001, // Gets a streaming interface for reading file content
    FsrmFileStreamingMode_Write     = 0x00000002, // Gets a streaming interface for writing file content
} FsrmFileStreamingMode;


typedef enum _FsrmFileStreamingInterfaceType
{
    FsrmFileStreamingInterfaceType_Unknown      = 0x00000000,   // Gets an ILockBytes interface
    FsrmFileStreamingInterfaceType_ILockBytes   = 0x00000001,   // Gets an ILockBytes interface
    FsrmFileStreamingInterfaceType_IStream      = 0x00000002,   // Gets an IStream interface
} FsrmFileStreamingInterfaceType;




