// ===================================================================
// Title:  System File Elements
// $State: Exp $
// $Date: 2004/08/15 05:55:42 $
// $Source: /cvsroot/wbemservices/open/mof/dmtf/2.9/System_FileElements.mof,v $
// $Revision: 1.1 $
// ===================================================================
//#pragma inLine ("Includes/copyright.inc")
// Copyright 1998-2004 Distributed Management Task Force, Inc. (DMTF).
// All rights reserved.
// DMTF is a not-for-profit association of industry members dedicated
// to promoting enterprise and systems management and interoperability.
// DMTF specifications and documents may be reproduced for uses
// consistent with this purpose by members and non-members,
// provided that correct attribution is given.
// As DMTF specifications may be revised from time to time,
// the particular version and release date should always be noted.
// 
// Implementation of certain elements of this standard or proposed
// standard may be subject to third party patent rights, including
// provisional patent rights (herein "patent rights"). DMTF makes
// no representations to users of the standard as to the existence
// of such rights, and is not responsible to recognize, disclose, or
// identify any or all such third party patent right, owners or
// claimants, nor for any incomplete or inaccurate identification or
// disclosure of such rights, owners or claimants. DMTF shall have no
// liability to any party, in any manner or circumstance, under any
// legal theory whatsoever, for failure to recognize, disclose, or
// identify any such third party patent rights, or for such party's
// reliance on the standard or incorporation thereof in its product,
// protocols or testing procedures. DMTF shall have no liability to
// any party implementing such standard, whether such implementation
// is foreseeable or not, nor to any patent owner or claimant, and shall
// have no liability or responsibility for costs or losses incurred if
// a standard is withdrawn or modified after publication, and shall be
// indemnified and held harmless by any party implementing the
// standard from any and all claims of infringement by a patent owner
// for such implementations.
// 
// For information about patents held by third-parties which have
// notified the DMTF that, in their opinion, such patent may relate to
// or impact implementations of DMTF standards, visit
// http://www.dmtf.org/about/policies/disclosures.php.
//#pragma inLine
// ===================================================================
// Description: The System Model defines system related management
//              concepts. This file defines the specific concepts to
//              manage file systems.
// 
//              The object classes below are listed in an order that
//              avoids forward references. Required objects, defined
//              by other working groups, are omitted.
// ==================================================================
// Change Log for v2.9 Preliminary Company Review
// CR1446 - Deprecate FileSystemSettingData.
// 
// Change Log for v2.9 Preliminary
// CR1325 - Definitions needed to support methods to create or modify
//          a FileSystem using a FileSystemConfigurationService.
// CR1326 - Definitions needed to support methods to create or modify
//          an ExportedFileShare using a FileExportService.
// CR1327 - Definitions needed to support methods to create or modify
//          an ImportedFileShare using a FileImportService.
// 
// Change Log for v2.8 Final
// CR1204 - Removal of Experimental Qualifier  for Preliminary to Final
// CR1177 - Share to use InstanceID as key vs. propagated keys.
// 
// Change Log for v2.8 Preliminary
// CR1056 - Database Storage:
//     -- modify ResidesOnExtent
//     -- add PersistenceType and NumberOfFiles to FileSystem
//     -- add FileSystemCapabilities and FileSystemSettingData
// CR883 - Add IsFixedSize and ResizeIncrement properties
//         to CIM_LogicalFile
// CR1128  - Addition of HostedDependency
// 
// Change Log for v2.7 Final
// CR969 - Remove Share, NFSShare, CIFSShare, SharedElement,
//         ImportedShare, and HostedShare so they can remain
//         experimental in 2.8.
// 
// Change Log for v2.7
// CR598 - Add Share, NFSShare, CIFSShare, SharedElement,
//         ImportedShare, and HostedShare
// CR644 - Modify Share, NFSShare, CIFSShare, and ImportedShare
//       - Add FileShare
// CR748 - Promote HostedFileSystem.GroupComponent from ComputerSystem
//         to System.  Fix the class description and the propagated
//         key descriptions in FileSystem.
// CR757 - Change the subclassing of FileSystem from LogicalElement
//         to EnabledLogicalElement
// CR767 - Add the Compostion qualifer to DirectoryContainsFile,
//         FileStorage, and HostedFileSystem
// ==================================================================

#pragma locale ("en_US")


// ===================================================================
// FileSystem
// ===================================================================
   [Version ( "2.8.1000" ), Description (
       "A file or dataset store local to a System (such as a "
       "ComputerSystem or an ApplicationSystem) or remotely mounted "
       "from a file server.")]
class CIM_FileSystem : CIM_EnabledLogicalElement {

      [Key, Propagated ( "CIM_System.CreationClassName" ), 
       Description (
          "The scoping System's CreationClassName. Note that this "
          "class was originally defined in the scope of a "
          "ComputerSystem, and was later allowed to be scoped by any "
          "System (for example, a computer or application system). "
          "Unfortunately, the property name, CSCreationClassName, "
          "could not be changed (for example, to SystemCreationClass "
          "Name) without deprecating the class. This change was not "
          "deemed critical to the semantics and therefore did not "
          "merit deprecation. So, the property name remains."), 
       MaxLen ( 256 )]
   string CSCreationClassName;

      [Key, Propagated ( "CIM_System.Name" ), Description (
          "The scoping System's Name. Note that this class was "
          "originally defined in the scope of a ComputerSystem, and "
          "was later allowed to be scoped by any System (for example, "
          "a computer or application system). Unfortunately, the "
          "property name, CSName, could not be changed (for example, "
          "to SystemName) without deprecating the class. This change "
          "was not deemed critical to the semantics and therefore did "
          "not merit deprecation. So, the property name remains."), 
       MaxLen ( 256 )]
   string CSName;

      [Key, Description (
          "CreationClassName indicates the name of the class or the "
          "subclass used in the creation of an instance. When used "
          "with the other key properties of this class, this property "
          "allows all instances of this class and its subclasses to be "
          "uniquely identified."), 
       MaxLen ( 256 )]
   string CreationClassName;

      [Key, Override ( "Name" ), Description (
          "The inherited Name serves as key of a FileSystem instance "
          "within a ComputerSystem."), 
       MaxLen ( 256 )]
   string Name;

      [Description (
          "Path name or other information defining the root of the "
          "FileSystem."), 
       MappingStrings { "MIB.IETF|HOST-RESOURCES-MIB.hrFSMountPoint",
          "MIF.DMTF|Host File System|001.2" }]
   string Root;

      [Description (
          "FileSystems can read/write data in blocks which are defined "
          "independently of the underlying StorageExtents. This "
          "property captures the FileSystem's block size for data "
          "storage and retrieval."), 
       Units ( "Bytes" )]
   uint64 BlockSize;

      [Description (
          "The FileSystemSize property stores the total size of the "
          "File System in bytes. If unknown, enter 0."), 
       Units ( "Bytes" ), 
       MappingStrings { "MIF.DMTF|Host File System|001.13" }]
   uint64 FileSystemSize;

      [Description (
          "AvailableSpace indicates the total amount of free space for "
          "the FileSystem, in bytes. If unknown, enter 0."), 
       Units ( "Bytes" ), Gauge, 
       MappingStrings { "MIF.DMTF|Host File System|001.14",
          "MIF.DMTF|Partition|002.4" }]
   uint64 AvailableSpace;

      [Description (
          "Indicates that the FileSystem is designated as read only."), 
       MappingStrings { "MIB.IETF|HOST-RESOURCES-MIB.hrFSAccess",
          "MIF.DMTF|Host File System|001.5" }]
   boolean ReadOnly;

      [Description (
          "A free form string indicating the algorithm or tool used to "
          "encrypt the FileSystem. If it is not possible or not "
          "desired to describe the encryption scheme (perhaps for "
          "security reasons), recommend using the following words: "
          "\"Unknown\" to represent that it is not known whether the "
          "FileSystem is encrypted or not, \"Encrypted\" to represent "
          "that the File System is encrypted but either its encryption "
          "scheme is not known or not disclosed, and \"Not Encrypted\" "
          "to represent that the FileSystem is not encrypted."), 
       MappingStrings { "MIF.DMTF|Partition|002.8" }]
   string EncryptionMethod;

      [Description (
          "A free form string indicating the algorithm or tool used to "
          "compress the FileSystem. If it is not possible or not "
          "desired to describe the compression scheme (perhaps because "
          "it is not known), recommend using the following words: "
          "\"Unknown\" to represent that it is not known whether the "
          "FileSystem is compressed or not, \"Compressed\" to "
          "represent that the File System is compressed but either its "
          "compression scheme is not known or not disclosed, and \"Not "
          "Compressed\" to represent that the FileSystem is not "
          "compressed."), 
       MappingStrings { "MIF.DMTF|Partition|002.7" }]
   string CompressionMethod;

      [Description (
          "Indicates that case sensitive file names are supported.")]
   boolean CaseSensitive;

      [Description (
          "Indicates that the case of file names are preserved.")]
   boolean CasePreserved;

      [Description (
          "Array defining the character sets or encoding supported by "
          "the FileSystem. For example, the values, \"ASCII\" (2) or "
          "\"ISO2022\" (4), may be specified."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8" }, 
       Values { "Unknown", "Other", "ASCII", "Unicode", "ISO2022",
          "ISO8859", "Extended UNIX Code", "UTF-8", "UCS-2" }]
   uint16 CodeSet[];

      [Description (
          "Integer indicating the maximum length of a file name within "
          "the FileSystem. 0 indicates that there is no limit on file "
          "name length.")]
   uint32 MaxFileNameLength;

      [Description (
          "The minimum file allocation size (an integral number of "
          "blocks), imposed by the FileSystem. (The size of a block is "
          "specified in the BlockSize property for the FileSystem.) "
          "Minimum allocation size is the smallest amount of storage "
          "allocated to a LogicalFile by the FileSystem. This is not a "
          "mandatory minimum allocation for all FileSystems. Under "
          "stress conditions, some FileSystems may allocate storage in "
          "amounts smaller than the ClusterSize.")]
   uint32 ClusterSize;

      [Description (
          "String describing the type of FileSystem and therefore, its "
          "conventions. For example, \"NTFS\" or \"S5\" may be listed "
          "as well as any additional information on the FileSystem's "
          "implementation. Since various flavors of FileSystems (like "
          "S5) exist, this property is defined as a string."), 
       MappingStrings { "MIF.DMTF|Partition|002.6",
          "MIF.DMTF|Host File System|001.4" }]
   string FileSystemType;

      [Description (
          "An enumerated value representing the FileSystem's "
          "perception of its own persistence characteristics. This "
          "property would typically be set at the time the FileSystem "
          "is instantiated and would not be changed by external "
          "actions. A value of \"Persistent\" indicates that the "
          "FileSystem is persistent, will be preserved through an "
          "orderly shutdown and should be protected. A value of "
          "\"Temporary\" indicates that the FileSystem is "
          "non-persistent, should not be protected and may not survive "
          "a shutdown. A value of \"External\" indicates that the "
          "FileSystem is controlled outside of the scope of the "
          "operating environment and may need to be protected by "
          "specialized means. A value of \"Other\" is provided to "
          "allow for additional persistence types, to be described in "
          "the OtherPersistenceType attribute, and is expected to be "
          "rarely, if ever, used. A value of \"Unknown\" indicates "
          "that the persistence of the FileSystem can not be "
          "determined."), 
       ValueMap { "0", "1", "2", "3", "4" }, 
       Values { "Unknown", "Other", "Persistent", "Temporary",
          "External" }, 
       ModelCorrespondence { "CIM_FileSystem.OtherPersistenceType" }]
   uint16 PersistenceType;

      [Description (
          "A string describing the persistence characteristics when "
          "PersistenceType is \"Other\"."), 
       ModelCorrespondence { "CIM_FileSystem.PersistenceType" }]
   string OtherPersistenceType;

      [Description (
          "The number of files contained in the FileSystem.")]
   uint64 NumberOfFiles;

      [Experimental, Description (
          "Indicates whether the File size is fixed at creation time "
          "(value = 1) - the file size is fixed, (value = 2) - the "
          "file is not a fixed size. The default (value = 0) indicates "
          "that this information is not specified. If the File size is "
          "not fixed, the ResizeIncrement property should specify the "
          "growth increment, in bytes."), 
       ValueMap { "0", "1", "2" }, 
       Values { "Not Specified", "Fixed Size", "Not Fixed Size" }, 
       ModelCorrespondence { "CIM_FileSystem.ResizeIncrement" }]
   uint16 IsFixedSize = 0;

      [Experimental, Description (
          "The increment size of a resizable File in bytes. If the "
          "File is a fixed size, or the resize increment is not "
          "specified, the value of this property must be 0."), 
       Units ( "Bytes" ), 
       ModelCorrespondence { "CIM_FileSystem.IsFixedSize" }]
   uint64 ResizeIncrement = 0;
};


// ===================================================================
// LocalFileSystem
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "A class derived from FileSystem that represents the file store "
       "controlled by a ComputerSystem through local means (e.g., "
       "direct device driver access). In this case, the file store is "
       "managed directly by the ComputerSystem without the need for "
       "another computer to act as a file server. This definition does "
       "not breakdown in the case of a Clustered File System. In this "
       "scenario, the FileSystem is a LocalFileSystem, weak to the "
       "Cluster.")]
class CIM_LocalFileSystem : CIM_FileSystem {
};


// =====================================================================
// RemoteFileSystem
// =====================================================================
   [Deprecated { "CIM_FileShare" }, Version ( "2.8.1000" ), 
    Description (
       "A class derived from FileSystem that represents access of the "
       "FileSystem via a network-related service. In this case, the "
       "file store is hosted by a computer, acting as a file server. "
       "For example, the file store for an NFS FileSystem is typically "
       "NOT on a ComputerSystem's locally controlled media, nor is it "
       "directly accessed through a device driver. Subclasses of "
       "RemoteFileSystem contain client-side configuration information "
       "related to the access of the FileSystem. \n"
       "This has been deprecated by CIM_FileShare, which works with "
       "the hosted service model. The HostedShare association will "
       "specify how the remote entity is imported and the "
       "ImportedFileShareSetting class provides the resources needed "
       "for the share to function.")]
class CIM_RemoteFileSystem : CIM_FileSystem {
};

// ===================================================================
// NFS (NetworkFileSystem)
// ===================================================================
   [Deprecated { "CIM_FileShare" }, Version ( "2.6.0" ), Description (
       "A class derived from RemoteFileSystem representing that the "
       "FileSystem is mounted, using the NFS protocol, from a "
       "ComputerSystem. The properties of the NFS object deal with the "
       "operational aspects of the mount and represent the client-side "
       "configuration for NFS access. The FileSystemType (inherited "
       "from FileSystem) should be set to indicate the type of this "
       "FileSystem as it appears to the client. \n"
       "This has been deprecated by CIM_FileShare, which works with "
       "the hosted service model. The HostedShare association will "
       "specify how the remote entity is imported and the "
       "ImportedFileShareSetting class provides the resources needed "
       "for the share to function. The properties of "
       "ImportedFileShareSetting deprecate specific properties of this "
       "class. All properties except \"Interrupt\" have been "
       "deprecated - it is not clear what or how this property should "
       "be deprecated.")]
class CIM_NFS : CIM_RemoteFileSystem {

      [Deprecated { "CIM_ImportedFileShareSetting.ImportFailurePolicy" 
          }, Description (
          "If set to true: Once the FileSystem is mounted, NFS "
          "requests are retried until the hosting System responds. \n"
          "If set to false: Once the FileSystem is mounted, an error "
          "is returned if the hosting System does not respond.")]
   boolean HardMount;

      [Deprecated { "CIM_ImportedFileShareSetting.RequestRetryPolicy" }, 
       Description (
          "If set to true: Retries are performed in the foreground. \n"
          "If set to false: If the first mount attempt fails, retries "
          "are performed in the background.")]
   boolean ForegroundMount;

      [Deprecated { "No value" }, Description (
          "If set to true: Interrupts are permitted for hard mounts. \n"
          "If set to false: Interrupts are ignored for hard mounts.")]
   boolean Interrupt;

      [Deprecated { "CIM_ImportedFileShareSetting.ImportRetriesMax" }, 
       Description (
          "Maximum number of mount failure retries allowed.")]
   uint16 MountFailureRetries;

      [Deprecated { 
          "CIM_ImportedFileShareSetting.TransmissionRetriesMax" }, 
       Description (
          "Maximum number of NFS retransmissions allowed.")]
   uint16 RetransmissionAttempts;

      [Deprecated { 
          "CIM_ImportedFileShareSetting.RetransmissionTimeoutMin" }, 
       Description (
          "NFS timeout in tenths of a second."), 
       Units ( "Tenths of Seconds" )]
   uint32 RetransmissionTimeout;

      [Deprecated { "CIM_ImportedFileShareSetting.ReadBufferSizeMin" }, 
       Description (
          "Read buffer size in bytes."), 
       Units ( "Bytes" )]
   uint64 ReadBufferSize;

      [Deprecated { "CIM_ImportedFileShareSetting.WriteBufferSizeMin" }, 
       Description (
          "Write buffer size in bytes."), 
       Units ( "Bytes" )]
   uint64 WriteBufferSize;

      [Deprecated { "CIM_ImportedFileShareSetting.AccessPoints" }, 
       Description (
          "The remote ComputerSystem's (ie, the NFS File 'Server's) "
          "UDP port number.")]
   uint32 ServerCommunicationPort;

      [Deprecated { 
          "CIM_ImportedFileShareSetting.AttributeCachingObjects" }, 
       Description (
          "If set to true: Control attribute caching is enabled. \n"
          "If set to false: Control attribute caching is disabled.")]
   boolean AttributeCaching;

      [Deprecated { 
          "CIM_ImportedFileShareSetting.AttributeCachingTimeMin" }, 
       Description (
          "Minimum number of seconds that cached attributes are held "
          "after file modification."), 
       Units ( "Seconds" )]
   uint16 AttributeCachingForRegularFilesMin;

      [Deprecated { 
          "CIM_ImportedFileShareSetting.AttributeCachingTimeMax" }, 
       Description (
          "Maximum number of seconds that cached attributes are held "
          "after file modification."), 
       Units ( "Seconds" )]
   uint16 AttributeCachingForRegularFilesMax;

      [Deprecated { 
          "CIM_ImportedFileShareSetting.AttributeCachingTimeMin" }, 
       Description (
          "Minimum number of seconds that cached attributes are held "
          "after directory update."), 
       Units ( "Seconds" )]
   uint16 AttributeCachingForDirectoriesMin;

      [Deprecated { 
          "CIM_ImportedFileShareSetting.AttributeCachingTimeMax" }, 
       Description (
          "Maximum number of seconds that cached attributes are held "
          "after directory update."), 
       Units ( "Seconds" )]
   uint16 AttributeCachingForDirectoriesMax;
};

// ===================================================================
// FileSystemSettingData
// ===================================================================
   [Deprecated { "CIM_FileSystemSetting", 
                 "CIM_FileSystemCapabilities" },
    Version ( "2.8.1000" ), Description (
       "This class allows a client to specify the desired persistence "
       "of a FileSystem. This information is tied to the FileSystem "
       "using the ElementSettingData association. \n"
       "This class is being deprecated because the replacing classes "
       "FileSystemSetting and FileSystemCapabilities will provide "
       "support for persistence and recoverability.")]
class CIM_FileSystemSettingData : CIM_ScopedSettingData {

      [Deprecated { "CIM_FileSystemSetting.PersistenceTypes" }, Write, 
       Description (
          "An enumerated value representing the intended persistence "
          "characteristics of the FileSystem. A value of "
          "\"Persistent\" indicates that the FileSystem should be "
          "persistent, should be preserved through an orderly shutdown "
          "and should be protected. A value of \"Temporary\" indicates "
          "that the FileSystem should be non-persistent, should not be "
          "protected and may not survive a shutdown. A value of "
          "\"External\" indicates that the FileSystem should be "
          "controlled outside of the operating environment and may "
          "need to be protected by specialized means. A value of "
          "\"Other\" is provided to allow for additional persistence "
          "types, to be described in the OtherPersistenceType "
          "attribute, and is expected to be rarely, if ever, used."), 
       ValueMap { "1", "2", "3", "4" }, 
       Values { "Other", "Persistent", "Temporary", "External" }, 
       ModelCorrespondence { 
          "CIM_FileSystemSettingData.OtherPersistenceType",
          "CIM_FileSystem.PersistenceType" }]
   uint16 PersistenceType;

      [Deprecated { "CIM_FileSystemSetting.OtherPersistenceTypes" },
       Write, Description (
          "A string describing the persistence characteristics when "
          "PersistenceType is \"Other\"."), 
       ModelCorrespondence { 
          "CIM_FileSystemSettingData.PersistenceType",
          "CIM_FileSystem.OtherPersistenceType" }]
   string OtherPersistenceType;
};

// ===================================================================
// LogicalFile
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "A LogicalFile is a named collection of data or executable "
       "code, or represents a LogicalDevice or Directory. It is "
       "located within the context of a FileSystem, on a Storage "
       "Extent.")]
class CIM_LogicalFile : CIM_LogicalElement {

      [Key, Propagated ( "CIM_FileSystem.CSCreationClassName" ), 
       Description (
          "The scoping ComputerSystem's CreationClassName."), 
       MaxLen ( 256 )]
   string CSCreationClassName;

      [Key, Propagated ( "CIM_FileSystem.CSName" ), Description (
          "The scoping ComputerSystem's Name."), 
       MaxLen ( 256 )]
   string CSName;

      [Key, Propagated ( "CIM_FileSystem.CreationClassName" ), 
       Description (
          "The scoping FileSystem's CreationClassName."), 
       MaxLen ( 256 )]
   string FSCreationClassName;

      [Key, Propagated ( "CIM_FileSystem.Name" ), Description (
          "The scoping FileSystem's Name."), 
       MaxLen ( 256 )]
   string FSName;

      [Key, Description (
          "CreationClassName indicates the name of the class or the "
          "subclass used in the creation of an instance. When used "
          "with the other key properties of this class, this property "
          "allows all instances of this class and its subclasses to be "
          "uniquely identified."), 
       MaxLen ( 256 )]
   string CreationClassName;

      [Key, Override ( "Name" ), Description (
          "The inherited Name serves as part of the key of a "
          "LogicalFile instance within a FileSystem. A unique "
          "identifier (such as a full path name) is required as a Name "
          "value. Since Files are weak to their FileSystem (and not to "
          "a Directory which would provide a more granular naming "
          "algorithm), care must be taken to make LogicalFile's Name "
          "unique for a given Creation ClassName and FileSystem. A "
          "full path name is one way to do this."), 
       MaxLen ( 1024 )]
   string Name;

      [Description (
          "Size of the File in bytes."), 
       Units ( "Bytes" ), Gauge]
   uint64 FileSize;

      [Description (
          "File's creation date.")]
   datetime CreationDate;

      [Description (
          "Time that the File was last modified.")]
   datetime LastModified;

      [Description (
          "Time that the File was last accessed.")]
   datetime LastAccessed;

      [Description (
          "Boolean indicating that the File can be read.")]
   boolean Readable;

      [Description (
          "Boolean indicating that the File can be written.")]
   boolean Writeable;

      [Description (
          "Indicates the file is executable.")]
   boolean Executable;

      [Description (
          "A free form string indicating the algorithm or tool used to "
          "compress the LogicalFile. If it is not possible or not "
          "desired to describe the compression scheme (perhaps because "
          "it is not known), recommend using the following words: "
          "\"Unknown\" to represent that it is not known whether the "
          "LogicalFile is compressed or not, \"Compressed\" to "
          "represent that the File is compressed but either its "
          "compression scheme is not known or not disclosed, and \"Not "
          "Compressed\" to represent that the LogicalFile is not "
          "compressed.")]
   string CompressionMethod;

      [Description (
          "A free form string indicating the algorithm or tool used to "
          "encrypt the LogicalFile. If it is not possible or not "
          "desired to describe the encryption scheme (perhaps for "
          "security reasons), recommend using the following words: "
          "\"Unknown\" to represent that it is not known whether the "
          "LogicalFile is encrypted or not, \"Encrypted\" to represent "
          "that the File is encrypted but either its encryption scheme "
          "is not known or not disclosed, and \"Not Encrypted\" to "
          "represent that the LogicalFile is not encrypted.")]
   string EncryptionMethod;

      [Description (
          "Integer indicating the number of 'file opens' that are "
          "currently active against the File."), 
       Counter]
   uint64 InUseCount;
};


// ===================================================================
// DataFile
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "DataFile is a type of LogicalFile that is a named collection "
       "of data or executable code.")]
class CIM_DataFile : CIM_LogicalFile {
};


// ===================================================================
// Directory
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "Directory is a type of File that logically groups Files "
       "'contained' in it, and provides path information for the "
       "grouped Files.")]
class CIM_Directory : CIM_LogicalFile {
};


// ===================================================================
// DeviceFile
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "DeviceFile is a special type of LogicalFile that represents a "
       "Device. This convention is useful for some operating systems "
       "that manage devices using a byte stream I/O model. The Logical "
       "Device that is associated with this file is specified using "
       "the DeviceAccessedByFile relationship.")]
class CIM_DeviceFile : CIM_LogicalFile {
};


// ===================================================================
// FIFOPipeFile
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "FIFOPipeFile is a special type of LogicalFile that represents "
       "an interprocess FIFO (sometimes referred to as a \"named "
       "pipe\"). Operating systems use this convention to manage "
       "interprocess communication through processes reading and "
       "writing the FIFO. The FIFO can be accessed by unrelated "
       "processes, in contrast to the more well-known command line "
       "redirection mechanism (e.g. UNIX's 'ps -eaf | grep foo', also "
       "known as an \"unnamed pipe\"). An exemplary operating system "
       "implementation (using the FIFO concept) is the UNIX S_IFIFO "
       "file type.")]
class CIM_FIFOPipeFile : CIM_LogicalFile {
};


// ===================================================================
// SymbolicLink
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "This class is a special type of LogicalFile that represents a "
       "Symbolic Link. This convention is useful for some operating "
       "systems that want to represent a single file in multiple "
       "places or a single file that is represented via multiple "
       "names.")]
class CIM_SymbolicLink : CIM_LogicalFile {

      [Required, Description (
          "The target file of the symbolic link.")]
   string TargetFile;
};


// ===================================================================
// DeviceAccessedByFile
// ===================================================================
   [Association, Version ( "2.6.0" ), Description (
       "Specifies the LogicalDevice that is associated with, and "
       "accessed using the referenced DeviceFile.")]
class CIM_DeviceAccessedByFile : CIM_Dependency {

      [Override ( "Antecedent" ), Description (
          "The DeviceFile.")]
   CIM_DeviceFile REF Antecedent;

      [Override ( "Dependent" ), Max ( 1 ), Description (
          "The Device that is accessed using the DeviceFile.")]
   CIM_LogicalDevice REF Dependent;
};


// ===================================================================
// DirectoryContainsFile
// ===================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "Specifies the hierarchical arrangement of LogicalFiles in a "
       "Directory.")]
class CIM_DirectoryContainsFile : CIM_Component {

      [Aggregate, Override ( "GroupComponent" ), Max ( 1 ), 
       Description (
          "The Directory.")]
   CIM_Directory REF GroupComponent;

      [Override ( "PartComponent" ), Description (
          "The LogicalFile 'contained within' the Directory.")]
   CIM_LogicalFile REF PartComponent;
};


// ===================================================================
// Mount
// ===================================================================
   [Association, Version ( "2.6.0" ), Description (
       "An association between a FileSystem and a Directory which "
       "indicates that the Directory is being attached to the "
       "FileSystem. The semantics of this relationship require that "
       "the mounted Directory be contained by a FileSystem (via the "
       "FileStorage association) that is different from the FileSystem "
       "referenced as the Dependent. The Directory's containing "
       "FileSystem could be either local or remote. For example, a "
       "LocalFileSystem on a Solaris ComputerSystem can mount a "
       "Directory from the FileSystem accessed via the machine's CDROM "
       "drive, i.e., another LocalFile System. On the other hand, in a "
       "'remote' case, the Directory is first exported by its "
       "FileSystem, which is hosted on another ComputerSystem acting "
       "(for example) as a file server. In order to distinguish these "
       "two types of Mount, it is recommended that a CIM_Export "
       "association always be defined for the remotely "
       "accessed/mounted Directories.")]
class CIM_Mount : CIM_Dependency {

      [Override ( "Antecedent" ), Max ( 1 ), Description (
          "The Directory mounted.")]
   CIM_Directory REF Antecedent;

      [Override ( "Dependent" ), Description (
          "The FileSystem the Directory is mounted on.")]
   CIM_FileSystem REF Dependent;
};


// ===================================================================
// Export
// ===================================================================
   [Association, Version ( "2.6.0" ), Description (
       "An association between a LocalFileSystem and its Directories "
       "indicating that the specified Directories are available for "
       "mount. When exporting an entire FileSystem, the Directory "
       "should reference the topmost directory of the FileSystem.")]
class CIM_Export {

      [Key, Max ( 1 ), Description (
          "The LocalFileSystem.")]
   CIM_LocalFileSystem REF LocalFS;

      [Key, Description (
          "The Directory exported for mount.")]
   CIM_Directory REF Directory;

      [Description (
          "Name under which the Directory is exported.")]
   string ExportedDirectoryName;
};


// ===================================================================
// HostedFileSystem
// ===================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "A link between the System (such as a Computer or Application "
       "System) and the FileSystem that is a part of it.")]
class CIM_HostedFileSystem : CIM_SystemComponent {

      [Aggregate, Override ( "GroupComponent" ), Min ( 1 ), Max ( 1 ), 
       Description (
          "The System that hosts the FileSystem.")]
   CIM_System REF GroupComponent;

      [Override ( "PartComponent" ), Weak, Description (
          "The FileSystem that is part of the System and hosted on it.")]
   CIM_FileSystem REF PartComponent;
};


// ===================================================================
// FileStorage
// ===================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "A link between the FileSystem and the LogicalFile(s) addressed "
       "through this FileSystem.")]
class CIM_FileStorage : CIM_Component {

      [Aggregate, Override ( "GroupComponent" ), Min ( 1 ), Max ( 1 ), 
       Description (
          "The FileSystem.")]
   CIM_FileSystem REF GroupComponent;

      [Override ( "PartComponent" ), Weak, Description (
          "The LogicalFile stored in the context of the FileSystem.")]
   CIM_LogicalFile REF PartComponent;
};

// ===================================================================
// ResidesOnExtent
// ===================================================================
   [Association, Version ( "2.8.0" ), Description (
       "An association between a LogicalElement and the StorageExtent "
       "where it is located. Typically, a FileSystem ResidesOn a "
       "LogicalDisk. However, it is possible for a logical file or "
       "other internal data store to reside directly on a "
       "StorageExtent or appropriate subclass.")]
class CIM_ResidesOnExtent : CIM_Dependency {

      [Override ( "Antecedent" ), Description (
          "The StorageExtent.")]
   CIM_StorageExtent REF Antecedent;

      [Override ( "Dependent" ), Description (
          "The LogicalElement that is located on the StorageExtent.")]
   CIM_LogicalElement REF Dependent;
};


// ===================================================================
// Share
// ===================================================================
   [Experimental, Abstract, Version ( "2.8.1000" ), Description (
       "A Share is representative of an object presented for use (or "
       "shared) across systems. Instances of CIM_Share are associated "
       "with the shared object on the 'server'-side via the "
       "CIM_SharedElement association. Shares are mounted on the "
       "'client'-side (usually into another namespace) via the "
       "CIM_Import Share association. CIM_Share is Abstract to force "
       "subclassing to define the semantics of sharing.")]
class CIM_Share : CIM_EnabledLogicalElement {

      [Key, Description (
          "Within the scope of the instantiating Namespace, InstanceID "
          "opaquely and uniquely identifies an instance of this class. "
          "In order to ensure uniqueness within the NameSpace, the "
          "value of InstanceID SHOULD be constructed using the "
          "following 'preferred' algorithm: \n"
          "<OrgID>:<LocalID> \n"
          "Where <OrgID> and <LocalID> are separated by a colon ':', "
          "and where <OrgID> MUST include a copyrighted, trademarked "
          "or otherwise unique name that is owned by the business "
          "entity creating/defining the InstanceID, or is a registered "
          "ID that is assigned to the business entity by a recognized "
          "global authority. (This is similar to the <Schema "
          "Name>_<Class Name> structure of Schema class names.) In "
          "addition, to ensure uniqueness <OrgID> MUST NOT contain a "
          "colon (':'). When using this algorithm, the first colon to "
          "appear in InstanceID MUST appear between <OrgID> and "
          "<LocalID>. \n"
          "\n"
          "<LocalID> is chosen by the business entity and SHOULD not "
          "be re-used to identify different underlying (real-world) "
          "elements. If the above 'preferred' algorithm is not used, "
          "the defining entity MUST assure that the resultant "
          "InstanceID is not re-used across any InstanceIDs produced "
          "by this or other providers for this instance's NameSpace.")]
   string InstanceID;

};


// ===================================================================
// FileShare
// ===================================================================
   [Experimental, Abstract, Version ( "2.8.1000" ), Description (
       "A FileShare is representative of a LogicalFile presented for "
       "use (or shared) across systems. Instances of FileShare are "
       "associated with the shared object on the 'server'-side via the "
       "CIM_SharedElement association. Shares are attached on the "
       "'client'-side (usually into another namespace) via the "
       "CIM_ImportedShare association. FileShare is Abstract to force "
       "subclassing to define the semantics of the file-sharing "
       "protocol. FileShare when used for importing deprecates "
       "RemoteFileSystem.")]
class CIM_FileShare : CIM_Share {

      [Description (
          "Indicates whether a directory or file is presented for use "
          "(or shared) across systems. A value of true represents a "
          "directory. A value of false represents a file.")]
   boolean SharingDirectory;
};


// ===================================================================
// NFSShare
// ===================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "An NFSShare represents a Directory associated via "
       "CIM_SharedElement that is made accessible to other systems. On "
       "the client-side, the NFSShare is associated with its mount "
       "point via CIM_ImportedShare.")]
class CIM_NFSShare : CIM_FileShare {

      [Override ( "Name" ), Description (
          "The Name property, inherited from Share, defines the shared "
          "name by which the shared object is exported. For NFS, this "
          "will typically be the pathname of the exported directory, "
          "using forward slashes '/' to precede directory names in the "
          "path.")]
   string Name;
};


// ===================================================================
// CIFSShare
// ===================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "A CIFSShare represents a File, Directory, or Print Queue that "
       "is made accessible to other systems. If a File or Directory, "
       "it is associated via CIM_SharedElement. And on the "
       "client-side, the CIFSShare representing the File or Directory "
       "is associated with its mount point via CIM_ImportedShare. "
       "Other subclasses of LogicalIdentity would make the "
       "associations for other types of CIFSShare.")]
class CIM_CIFSShare : CIM_FileShare {

      [Override ( "Name" ), Description (
          "The Name property, inherited from Share, defines the shared "
          "name by which the shared object is exported. For CIFS, this "
          "will typically be a single-level, user-friendly, "
          "system-unique name.")]
   string Name;
};


// ===================================================================
// SharedElement
// ===================================================================
   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "SharedElement associates the Share to a LogicalElement that is "
       "being exported.")]
class CIM_SharedElement : CIM_LogicalIdentity {

      [Override ( "SystemElement" ), Max ( 1 ), Description (
          "The LogicalElement (or derived subclass) that is exported "
          "as a Share. In the context of file sharing, the "
          "LogicalElement will be a LogicalFile (or Directory derived "
          "from LogicalFile).")]
   CIM_LogicalElement REF SystemElement;

      [Override ( "SameElement" ), Description (
          "The Share that exposes the LogicalElement as an exported "
          "object. In the context of file sharing, the Share will be a "
          "FileShare (or a derived class).")]
   CIM_Share REF SameElement;
};

// ===================================================================
// AttachedElement
// ===================================================================
   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "An association between two LogicalElements indicating that the "
       "SameElement is being attached to the SystemElement.")]
class CIM_AttachedElement : CIM_LogicalIdentity {

      [Override ( "SystemElement" ), Description (
          "The LogicalElement that the SameElement will be attached to "
          "and will provide access to the SameElement.")]
   CIM_LogicalElement REF SystemElement;

      [Override ( "SameElement" ), Max ( 1 ), Description (
          "The LogicalElement that is being made available using the "
          "SystemElement as a surrogate.")]
   CIM_LogicalElement REF SameElement;
};

// ===================================================================
// MountedElement
// ===================================================================
   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "An association derived from AttachedElement for use in "
       "attaching a FileSystem to a LogicalFile (or Directory). The "
       "semantics of this relationship require that the SystemElement "
       "LogicalFile be contained by a FileSystem (via the FileStorage "
       "association) that is different from the FileSystem referenced "
       "as the SameElement. The LogicalFile's containing FileSystem "
       "could be either local or remote. For example, a "
       "LocalFileSystem on a Solaris ComputerSystem can mount on its "
       "LogicalFile a FileSystem accessed via the machine's CDROM "
       "drive, i.e., another LocalFileSystem. On the other hand, in a "
       "'remote' case, the LogicalFile must be surfaced in the "
       "namespace of the local host appropriately.")]
class CIM_MountedElement : CIM_AttachedElement {

      [Override ( "SystemElement" ), Description (
          "The LogicalFile that the SameElement (a FileSystem) will be "
          "attached to and that will provide access to the "
          "SameElement.")]
   CIM_LogicalElement REF SystemElement;

      [Override ( "SameElement" ), Max ( 1 ), Description (
          "The FileSystem that is being made available using the "
          "SystemElement as a surrogate.")]
   CIM_LogicalElement REF SameElement;
};

// ===================================================================
// ImportedShare
// ===================================================================
   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "An association derived from MountedElement for attaching an "
       "imported FileShare to a LogicalFile (or Directory). The "
       "semantics of this relationship require that the SameElement be "
       "an imported FileShare.")]
class CIM_ImportedShare : CIM_MountedElement {

      [Override ( "SystemElement" ), Description (
          "The LogicalFile that the SameElement (a FileShare) will be "
          "attached to and that will provide access to the "
          "SameElement.")]
   CIM_LogicalElement REF SystemElement;

      [Override ( "SameElement" ), Max ( 1 ), Description (
          "The FileShare that is being made available using the "
          "SystemElement (a LogicalFile) as a surrogate.")]
   CIM_LogicalElement REF SameElement;
};

// ===================================================================
// ImportedShareRoot
// ===================================================================
   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "ImportedShareRoot provides additional information for the "
       "ImportedShare association. It requires that the Dependent be a "
       "FileShare and that the Antecedent be a LogicalFile.")]
class CIM_ImportedShareRoot : CIM_Dependency {

      [Override ( "Antecedent" ), Description (
          "The Directory that is the container for the LogicalElement "
          "that has a FileShare attached to it with ImportedShare."), 
       ModelCorrespondence { "CIM_ImportedShare.SystemElement" }]
   CIM_LogicalElement REF Antecedent;

      [Override ( "Dependent" ), Max ( 1 ), Description (
          "The FileShare that is attached to a Directory with "
          "ImportedShare."), 
       ModelCorrespondence { "CIM_ImportedShare.SameElement" }]
   CIM_LogicalElement REF Dependent;
};

// ==================================================================
// HostedShare
// ==================================================================
   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "CIM_HostedShare is an association between a Share and the "
       "System on which the functionality resides. The cardinality of "
       "this association is many-to-many but a FileShare must have at "
       "least 1 host system, either exporting or importing it. (A "
       "System may host many Shares and a Share may be hosted by more "
       "than one System, but a Share must have at least one "
       "HostedShare). \n"
       "Heuristic: For export, a Share is hosted on the System where "
       "the LogicalElement that is exported by the Share is located "
       "(via SharedElement, derived from LogicalIdentity). For import, "
       "a Share is hosted on the System where the LogicalFile (or "
       "other namespace element) that provides the mount-point for the "
       "share is located (via ImportedShare, derived from "
       "LogicalIdentity).")]
class CIM_HostedShare : CIM_HostedDependency {

      [Override ( "Antecedent" ), Min ( 1 ), Description (
          "The hosting System.")]
   CIM_System REF Antecedent;

      [Override ( "Dependent" ), Description (
          "The Share hosted on the System.")]
   CIM_Share REF Dependent;

      [Description (
          "A string that uniquely identifies the remote element "
          "(expected to be an ExportedFileShare) that the Dependent "
          "Share represents if this is an imported Share. This is an "
          "opaque, unique identifier that provides an unambiguous name "
          "for the remote share -- we expect that it will be a WWN but "
          "any other interoperable format (e.g., a URI) would also "
          "work.")]
   string RemoteShareWWN;
};

// ===================================================================
// SharedElementRoot
// ===================================================================
   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "SharedElementRoot associates the Share to a LogicalElement "
       "that is the container for an exported element. The exported "
       "element will be identified by a relative path rooted at this "
       "element.")]
class CIM_SharedElementRoot : CIM_Dependency {

      [Override ( "Antecedent" ), Max ( 1 ), Description (
          "The LogicalElement that is the container for an exported "
          "element that is being shared. In the context of sharing "
          "file elements, Antecedent could be a FileSystem, or an "
          "imported FileShare, or a LogicalFile.")]
   CIM_LogicalElement REF Antecedent;

      [Override ( "Dependent" ), Description (
          "The Share that references the Antecedent as the root "
          "element that provides the shared element. In the context of "
          "sharing file elements, Dependent would be an exported "
          "FileShare.")]
   CIM_Share REF Dependent;
};

// ===================================================================
// end of file
// ===================================================================
