// ===================================================================
// Title:       Core Device 2.8
// Filename:    Core28_Device.mof
// Version:     2.8
// Status:      Final
// Date:        Jan 26, 2004
// ===================================================================
// Copyright 1998-2003 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. 225
// 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.
// ===================================================================
// Description: The Core Model defines basic management concepts.
//              This file defines the concepts for LogicalDevices (the
//              logical abstractions and management of installed
//              hardware).
// 
//              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.8 Final
// CR1200 - ElementSoftwareIdentity
// CR1210 - Removal of experimental qualifiers for core.
// CR1223 - SysDev Omnibus CR - Minor MOF corrections.
// 
// Change Log for v2.8 Preliminary
// CR932  - Add power mode status to OperationalStatus.
//          Move the specific power mode states from availability
//          to a property between the PowerMgmt service and its ME.
//          Remove the overlapping properties from Logical Device.
// CR943  - Move error code data from LogicalDevice to
//          DeviceErrorCountData
// CR1002 - Move LogicalDevice.PowerOnHours and
//          LogicalDevice.TotalPowerOnHours to PowerManagementStatistics
// CR1019 - CIM Versioning for 2.8 Preliminary
// CR1045 - Add method for requesting a "EnabledState" change in
//          EnabledLogicalElement class / Deprecate or explain overlap
//          with LogicalDevice and Service properties and methods
// CR1092 - Move DeviceSoftwareIdentity to Core28_Device.mof from
// Device28_DeviceElements.
// 
// Change Log for v2.7 Final
// CR961 - Change references to EnabledStatus and RequestedStatus to
//         EnabledState and RequestedState in the LogicalDevice.
//            StatusInfo,
//            EnableDevice(),
//            OnlineDevice(),
//            QuiesceDevice()
// 
// Change Log for v2.7
// CR624 - Fixed several of the DMI mapping strings that were missing
//         the attribute number in LogicalDevice
// CR720 - Deprecate the use of LogicalDevice.PowerManagementSupported,
//         LogicalDevice.PowerManagementCapabilities, & LogicalDevice.
//         SetPowerState()
// CR761 - Add the Composition Qualifer to SystemDevice
// CR763 - Change subclassing of LogicalDevice from LogicalElement to
//         EnabledLogicalElement
//       - Deprecate LogicalDevice.StatusInfo
//       - Update description of LogicalDevice.EnableDevice() to
//         explain position relative to LogicalDevice.RequestedStatus
//       - Update description of LogicalDevice.OnlineDevice() and
//         QuiesceDevice to make reference to EnabledStatus
// ==================================================================

#pragma locale ("en_US")


// ===================================================================
// LogicalDevice
// ===================================================================
   [Abstract, Version ( "2.8.0" ), Description (
       "An abstraction or emulation of a hardware entity, that may or "
       "may not be Realized in physical hardware. Any characteristics "
       "of a LogicalDevice that are used to manage its operation or "
       "configuration are contained in, or associated with, the "
       "LogicalDevice object. Examples of the operational properties "
       "of a Printer would be paper sizes supported, or detected "
       "errors. Examples of the configuration properties of a Sensor "
       "Device would be threshold settings. Various configurations "
       "could exist for a LogicalDevice. These configurations could be "
       "contained in Setting objects and associated with the "
       "LogicalDevice.")]
class CIM_LogicalDevice : CIM_EnabledLogicalElement {

      [Key, Propagated ( "CIM_System.CreationClassName" ), 
       Description (
          "The scoping System's CreationClassName."), 
       MaxLen ( 256 )]
   string SystemCreationClassName;

      [Key, Propagated ( "CIM_System.Name" ), Description (
          "The scoping System's Name."), 
       MaxLen ( 256 )]
   string SystemName;

      [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, Description (
          "An address or other identifying information to uniquely "
          "name the LogicalDevice."), 
       MaxLen ( 64 )]
   string DeviceID;

      [Deprecated { "CIM_PowerManagementCapabilities" }, Description (
          "Boolean indicating that the Device can be power managed. "
          "The use of this property has been deprecated. Instead, the "
          "existence of an associated PowerManagementCapabilities "
          "class (associated using the ElementCapabilities "
          "relationhip) indicates that power management is supported.")]
   boolean PowerManagementSupported;

      [Deprecated { "CIM_PowerManagementCapabilities.PowerCapabilities" 
          }, Description (
          "An enumerated array describing the power management "
          "capabilities of the Device. The use of this property has "
          "been deprecated. Instead, the PowerCapabilites property in "
          "an associated PowerManagementCapabilities class should be "
          "used."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7" }, 
       Values { "Unknown", "Not Supported", "Disabled", "Enabled",
          "Power Saving Modes Entered Automatically",
          "Power State Settable", "Power Cycling Supported",
          "Timed Power On Supported" }]
   uint16 PowerManagementCapabilities[];

      [Description (
          "The primary availability and status of the Device. "
          "(Additional status information can be specified using the "
          "Additional Availability array property.) For example, the "
          "Availability property indicates that the Device is running "
          "and has full power (value=3), or is in a warning (4), test "
          "(5), degraded (10) or power save state (values 13-15 and "
          "17). Regarding the Power Save states, these are defined as "
          "follows: Value 13 (\"Power Save - Unknown\") indicates that "
          "the Device is known to be in a power save mode, but its "
          "exact status in this mode is unknown; 14 (\"Power Save - "
          "Low Power Mode\") indicates that the Device is in a power "
          "save state but still functioning, and may exhibit degraded "
          "performance; 15 (\"Power Save - Standby\") describes that "
          "the Device is not functioning but could be brought to full "
          "power 'quickly'; and value 17 (\"Power Save - Warning\") "
          "indicates that the Device is in a warning state, though "
          "also in a power save mode."), 
       ValueMap { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
          "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
          "21" }, 
       Values { "Other", "Unknown", "Running/Full Power", "Warning",
          "In Test", "Not Applicable", "Power Off", "Off Line",
          "Off Duty", "Degraded", "Not Installed", "Install Error",
          "Power Save - Unknown", "Power Save - Low Power Mode",
          "Power Save - Standby", "Power Cycle",
          "Power Save - Warning", "Paused", "Not Ready",
          "Not Configured", "Quiesced" }, 
       MappingStrings { "MIF.DMTF|Operational State|006.5",
          "MIB.IETF|HOST-RESOURCES-MIB.hrDeviceStatus",
          "MIF.DMTF|Host Device|001.5" }, 
       ModelCorrespondence { "CIM_LogicalDevice.AdditionalAvailability" 
          }]
   uint16 Availability;

      [Deprecated { "CIM_EnabledLogicalElement.EnabledState" }, 
       Description (
          "The StatusInfo property indicates whether the Logical "
          "Device is in an enabled (value = 3), disabled (value = 4) "
          "or some other (1) or unknown (2) state. If this property "
          "does not apply to the LogicalDevice, the value, 5 (\"Not "
          "Applicable\"), should be used. StatusInfo has been "
          "deprecated in lieu of a more clearly named property with "
          "additional enumerated values (EnabledState), that is "
          "inherited from ManagedSystemElement. \n"
          "If a Device is (\"Enabled\")(value=3), it has been powered "
          "up, and is configured and operational. The Device may or "
          "may not be functionally active, depending on whether its "
          "Availability (or AdditionalAvailability) indicate that it "
          "is (\"Running/Full Power\")(value=3) or (\"Off line\") "
          "(value=8). In an enabled but offline mode, a Device may be "
          "performing out-of-band requests, such as running "
          "Diagnostics. If (\"Disabled\") StatusInfo value=4), a "
          "Device can only be \"enabled\" or powered off. In a "
          "personal computer environment, (\"Disabled\") means that "
          "the Device's driver is not available in the stack. In other "
          "environments, a Device can be disabled by removing its "
          "configuration file. A disabled device is physically present "
          "in a System and consuming resources, but can not be "
          "communicated with until a load of a driver, a load of a "
          "configuration file or some other \"enabling\" activity has "
          "occurred."), 
       ValueMap { "1", "2", "3", "4", "5" }, 
       Values { "Other", "Unknown", "Enabled", "Disabled",
          "Not Applicable" }, 
       MappingStrings { "MIF.DMTF|Operational State|006.4" }]
   uint16 StatusInfo;

      [Deprecated { "CIM_DeviceErrorData.LastErrorCode" }, 
       Description (
          "LastErrorCode captures the last error code reported by the "
          "LogicalDevice.")]
   uint32 LastErrorCode;

      [Deprecated { "CIM_DeviceErrorData.ErrorDescription" }, 
       Description (
          "ErrorDescription is a free-form string supplying more "
          "information about the error recorded in LastErrorCode, and "
          "information on any corrective actions that may be taken.")]
   string ErrorDescription;

      [Deprecated { "CIM_ManagedSystemElement.OperationalStatus" }, 
       Description (
          "ErrorCleared is a boolean property indicating that the "
          "error reported in LastErrorCode is now cleared.")]
   boolean ErrorCleared;

      [Description (
          "OtherIdentifyingInfo captures additional data, beyond "
          "DeviceID information, that could be used to identify a "
          "LogicalDevice. One example would be to hold the Operating "
          "System's user friendly name for the Device in this "
          "property."), 
       MaxLen ( 256 ), ArrayType ( "Indexed" ), 
       ModelCorrespondence { 
          "CIM_LogicalDevice.IdentifyingDescriptions" }]
   string OtherIdentifyingInfo[];

      [Description (
          "The number of consecutive hours that this Device has been "
          "powered, since its last power cycle."), 
       Units ( "Hours" ), Counter]
   uint64 PowerOnHours;

      [Description (
          "The total number of hours that this Device has been "
          "powered."), 
       Units ( "Hours" ), Counter]
   uint64 TotalPowerOnHours;

      [Description (
          "An array of free-form strings providing explanations and "
          "details behind the entries in the OtherIdentifyingInfo "
          "array. Note, each entry of this array is related to the "
          "entry in OtherIdentifyingInfo that is located at the same "
          "index."), 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { "CIM_LogicalDevice.OtherIdentifyingInfo" }]
   string IdentifyingDescriptions[];

      [Description (
          "Additional availability and status of the Device, beyond "
          "that specified in the Availability property. The "
          "Availability property denotes the primary status and "
          "availability of the Device. In some cases, this will not be "
          "sufficient to denote the complete status of the Device. In "
          "those cases, the AdditionalAvailability property can be "
          "used to provide further information. For example, a "
          "Device's primary Availability may be \"Off line\" "
          "(value=8), but it may also be in a low power state "
          "(AdditonalAvailability value=14), or the Device could be "
          "running Diagnostics (AdditionalAvailability value=5, \"In "
          "Test\")."), 
       ValueMap { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
          "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
          "21" }, 
       Values { "Other", "Unknown", "Running/Full Power", "Warning",
          "In Test", "Not Applicable", "Power Off", "Off Line",
          "Off Duty", "Degraded", "Not Installed", "Install Error",
          "Power Save - Unknown", "Power Save - Low Power Mode",
          "Power Save - Standby", "Power Cycle",
          "Power Save - Warning", "Paused", "Not Ready",
          "Not Configured", "Quiesced" }, 
       ModelCorrespondence { "CIM_LogicalDevice.Availability" }]
   uint16 AdditionalAvailability[];

      [Deprecated { "No value" }, Description (
          "The MaxQuiesceTime property has been deprecated. When "
          "evaluating the use of Quiesce, it was determine that this "
          "single property is not adequate for describing when a "
          "device will automatically exit a quiescent state. In fact, "
          "the most likely scenario for a device to exit a quiescent "
          "state was determined to be based on the number of "
          "outstanding requests queued rather than on a maximum time. "
          "This will be re-evaluated and repositioned later. \n"
          "Maximum time in milliseconds, that a Device can run in a "
          "\"Quiesced\" state. A Device's state is defined in its "
          "Availability and AdditionalAvailability properties, where "
          "\"Quiesced\" is conveyed by the value 21. What occurs at "
          "the end of the time limit is device-specific. The Device "
          "may unquiesce, may offline or take other action. A value of "
          "0 indicates that a Device can remain quiesced indefinitely."), 
       Units ( "MilliSeconds" )]
   uint64 MaxQuiesceTime;

      [Deprecated { "CIM_PowerManagementService.SetPowerState" }, 
       Description (
          "Sets the power state of the Device. The use of this method "
          "has been deprecated. Instead, use the SetPowerState method "
          "in the associated PowerManagementService class.")]
   uint32 SetPowerState( 
         [IN, Description (
             "The power state to set."), 
          ValueMap { "1", "2", "3", "4", "5", "6" }, 
          Values { "Full Power", "Power Save - Low Power Mode",
             "Power Save - Standby", "Power Save - Other",
             "Power Cycle", "Power Off" }]
      uint16 PowerState, 
         [IN, Description (
             "Time indicates when the power state should be set, "
             "either as a regular date-time value or as an interval "
             "value (where the interval begins when the method "
             "invocation is received.")]
      datetime Time); 

      [Description (
          "Requests a reset of the LogicalDevice. The return value "
          "should be 0 if the request was successfully executed, 1 if "
          "the request is not supported and some other value if an "
          "error occurred. In a subclass, the set of possible return "
          "codes could be specified, using a ValueMap qualifier on the "
          "method. The strings to which the ValueMap contents are "
          "'translated' may also be specified in the subclass as a "
          "Values array qualifier.")]
   uint32 Reset(); 

      [Deprecated { "CIM_EnabledLogicalElement.RequestStateChange" }, 
       Description (
          "The EnableDevice method has been deprecated in lieu of the "
          "more general RequestStateChange method that directly "
          "overlaps with the functionality provided by this method. \n"
          "Requests that the LogicalDevice be enabled (\"Enabled\" "
          "input parameter = TRUE) or disabled (= FALSE). If "
          "successful, the Device's StatusInfo/EnabledState properties "
          "should reflect the desired state (enabled/disabled). Note "
          "that this method's function overlaps with the "
          "RequestedState property. RequestedState was added to the "
          "model to maintain a record (i.e., a persisted value) of the "
          "last state request. Invoking the EnableDevice method should "
          "set the RequestedState property appropriately. \n"
          "The return code should be 0 if the request was successfully "
          "executed, 1 if the request is not supported and some other "
          "value if an error occurred. In a subclass, the set of "
          "possible return codes could be specified, using a ValueMap "
          "qualifier on the method. The strings to which the ValueMap "
          "contents are 'translated' may also be specified in the "
          "subclass as a Values array qualifier.")]
   uint32 EnableDevice( 
         [IN, Description (
             "If TRUE enable the device, if FALSE disable the device.")]
      boolean Enabled); 

      [Deprecated { "CIM_EnabledLogicalElement.RequestStateChange" }, 
       Description (
          "The OnlineDevice method has been deprecated in lieu of the "
          "more general RequestStateChange method that directly "
          "overlaps with the functionality provided by this method. \n"
          "Requests that the LogicalDevice be brought online "
          "(\"Online\" input parameter = TRUE) or taken offline (= "
          "FALSE). \"Online\" indicates that the Device is ready to "
          "accept requests, and is operational and fully functioning. "
          "In this case, the Device's Availability property would be "
          "set to a value of 3 (\"Running/Full Power\"). \"Offline\" "
          "indicates that a Device is powered up and operational, but "
          "not processing functional requests. In an offline state, a "
          "Device may be capable of running diagnostics or generating "
          "operational alerts. For example, when the \"Offline\" "
          "button is pushed on a Printer, the Device is no longer "
          "available to process print jobs, but could be available for "
          "diagnostics or maintenance. \n"
          "If this method is successful, the Device's Availability and "
          "AdditionalAvailability properties should reflect the "
          "updated status. If a failure occurs trying to bring the "
          "Device online or offline, it should remain in its current "
          "state. IE, the request, if unsuccessful, should not leave "
          "the Device in an indeterminate state. When bringing a "
          "Device back \"Online\", from an \"Offline\" mode, the "
          "Device should be restored to its last \"Online\" state, if "
          "at all possible. Only a Device that has an "
          "EnabledState/StatusInfo of \"Enabled\" and has been "
          "configured can be brought online or taken offline. \n"
          "OnlineDevice should return 0 if successful, 1 if the "
          "request is not supported at all, 2 if the request is not "
          "supported due to the current state of the Device, and some "
          "other value if any other error occurred. In a subclass, the "
          "set of possible return codes could be specified, using a "
          "ValueMap qualifier on the method. The strings to which the "
          "ValueMap contents are 'translated' may also be specified in "
          "the subclass as a Values array qualifier. \n"
          "Note that this method's function overlaps with the "
          "RequestedState property. RequestedState was added to the "
          "model to maintain a record (i.e., a persisted value) of the "
          "last state request. Invoking the OnlineDevice method should "
          "set the RequestedState property appropriately.")]
   uint32 OnlineDevice( 
         [IN, Description (
             "If TRUE, take the device online, if FALSE, take the "
             "device OFFLINE.")]
      boolean Online); 

      [Deprecated { "CIM_EnabledLogicalElement.RequestStateChange" }, 
       Description (
          "The QuiesceDevice method has been deprecated in lieu of the "
          "more general RequestStateChange method that directly "
          "overlaps with the functionality provided by this method. \n"
          "Requests that the LogicalDevice cleanly cease all current "
          "activity (\"Quiesce\" input parameter = TRUE) or resume "
          "activity (= FALSE). For this method to quiesce a Device, "
          "that Device should have an Availability (or Additional "
          "Availability) of \"Running/Full Power\" (value=3) and an "
          "EnabledStatus/StatusInfo of \"Enabled\". For example, if "
          "quiesced, a Device may then be offlined for diagnostics, or "
          "disabled for power off and hot swap. For the method to "
          "\"unquiesce\" a Device, that Device should have an "
          "Availability (or AdditionalAvailability) of \"Quiesced\" "
          "(value=21) and an EnabledStatus/StatusInfo of \"Enabled\". "
          "In this case, the Device would be returned to an "
          "\"Enabled\" and \"Running/Full Power\" status. \n"
          "The method's return code should indicate the success or "
          "failure of the quiesce. It should return 0 if successful, 1 "
          "if the request is not supported at all, 2 if the request is "
          "not supported due to the current state of the Device, and "
          "some other value if any other error occurred. In a "
          "subclass, the set of possible return codes could be "
          "specified, using a ValueMap qualifier on the method. The "
          "strings to which the ValueMap contents are 'translated' may "
          "also be specified in the subclass as a Values array "
          "qualifier.")]
   uint32 QuiesceDevice( 
         [IN, Description (
             "If set to TRUE then cleanly cease all activity, if FALSE "
             "resume activity.")]
      boolean Quiesce); 

      [Description (
          "Requests that the Device capture its current configuration, "
          "setup and/or state information in a backing store. The goal "
          "would be to use this information at a later time (via the "
          "RestoreProperties method), to return a Device to its "
          "present \"condition\". This method may not be supported by "
          "all Devices. The method should return 0 if successful, 1 if "
          "the request is not supported, and some other value if any "
          "other error occurred. In a subclass, the set of possible "
          "return codes could be specified, using a ValueMap qualifier "
          "on the method. The strings to which the ValueMap contents "
          "are 'translated' may also be specified in the subclass as a "
          "Values array qualifier.")]
   uint32 SaveProperties(); 

      [Description (
          "Requests that the Device re-establish its configuration, "
          "setup and/or state information from a backing store. The "
          "intent is to capture this information at an earlier time "
          "(via the SaveProperties method), and use it to return a "
          "Device to this earlier \"condition\". This method may not "
          "be supported by all Devices. The method should return 0 if "
          "successful, 1 if the request is not supported, and some "
          "other value if any other error occurred. In a subclass, the "
          "set of possible return codes could be specified, using a "
          "ValueMap qualifier on the method. The strings to which the "
          "ValueMap contents are 'translated' may also be specified in "
          "the subclass as a Values array qualifier.")]
   uint32 RestoreProperties(); 
};


// ==================================================================
// Realizes
// ==================================================================
   [Association, Version ( "2.6.0" ), Description (
       "CIM_Realizes is the association that defines the mapping "
       "between LogicalDevices and the PhysicalElements that implement "
       "them.")]
class CIM_Realizes : CIM_Dependency {

      [Override ( "Antecedent" ), Description (
          "The physical component that implements the Device.")]
   CIM_PhysicalElement REF Antecedent;

      [Override ( "Dependent" ), Description (
          "The LogicalDevice.")]
   CIM_LogicalDevice REF Dependent;
};


// ==================================================================
// SystemDevice
// ==================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "LogicalDevices may be aggregated by a System. This "
       "relationship is made explicit by the SystemDevice association.")]
class CIM_SystemDevice : CIM_SystemComponent {

      [Aggregate, Override ( "GroupComponent" ), Min ( 1 ), Max ( 1 ), 
       Description (
          "The parent system in the Association.")]
   CIM_System REF GroupComponent;

      [Override ( "PartComponent" ), Weak, Description (
          "The LogicalDevice that is a component of a System.")]
   CIM_LogicalDevice REF PartComponent;
};


// ===================================================================
// DeviceServiceImplementation
// ===================================================================
   [Association, Version ( "2.6.0" ), Description (
       "An association between a Service and how it is implemented. "
       "The cardinality of this association is many-to-many. A Service "
       "may be provided by more than one Logical Device, operating in "
       "conjunction. And, any Device may provide more than one "
       "Service. When multiple Devices are associated with a single "
       "Service, it is assumed that these elements operate in "
       "conjunction to provide the Service. If different "
       "implementations of a Service exist, each of these "
       "implementations would result in individual instantiations of "
       "the Service object. These individual instantiations would then "
       "have associations to the unique implementations.")]
class CIM_DeviceServiceImplementation : CIM_Dependency {

      [Override ( "Antecedent" ), Description (
          "The LogicalDevice.")]
   CIM_LogicalDevice REF Antecedent;

      [Override ( "Dependent" ), Description (
          "The Service implemented using the Logical Device.")]
   CIM_Service REF Dependent;
};


// ===================================================================
// DeviceSAPImplementation
// ===================================================================
   [Association, Version ( "2.6.0" ), Description (
       "An association between a ServiceAccessPoint and how it is "
       "implemented. The cardinality of this association is "
       "many-to-many. A SAP may be provided by more than one "
       "LogicalDevice, operating in conjunction. And, any Device may "
       "provide more than one ServiceAccessPoint. When many "
       "LogicalDevices are associated with a single SAP, it is assumed "
       "that these elements operate in conjunction to provide the "
       "AccessPoint. If different implementations of a SAP exist, each "
       "of these implementations would result in individual "
       "instantiations of the ServiceAccessPoint object. These "
       "individual instantiations would then have associations to the "
       "unique implementations.")]
class CIM_DeviceSAPImplementation : CIM_Dependency {

      [Override ( "Antecedent" ), Description (
          "The LogicalDevice.")]
   CIM_LogicalDevice REF Antecedent;

      [Override ( "Dependent" ), Description (
          "The ServiceAccessPoint implemented using the LogicalDevice.")]
   CIM_ServiceAccessPoint REF Dependent;
};

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