// Copyright (c) 2009 DMTF.  All rights reserved.
   [Version ( "2.22.0" ), 
    UMLPackagePath ( "CIM::Device::SCSI" ), 
    Description ( 
       "A class derived from Service that describes the ability to "
       "control access to shared devices." )]
class CIM_SharedDeviceManagementService : CIM_Service {


      [Description ( 
          "ShareDevice defines the ability to change the access of "
          "a System to a shared LogicalDevice. If this method "
          "completes successfully the value of CurrentAccess for "
          "the instance of CIM_SharingDependency which references "
          "the LogicalDevice will have the value of the "
          "RequestedAccess parameter. If 4096 (0x1000) is returned, "
          "then the task will take some time to complete, "
          "ConcreteJob will be created, and its reference returned "
          "in the output parameter Job." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
          "10", "11..4095", "4096", "4097..32767", "32768..65535" }, 
       Values { "Completed with No Error", "Not Supported", 
          "Unknown/Unspecified Error", 
          "Can NOT complete within Timeout Period", "Failed", 
          "Invalid Parameter", "Unsupported Access", 
          "Invalid Device", "Invalid System", 
          "Use of Timeout Parameter Not Supported", "Busy", 
          "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "DMTF Reserved", "Vendor Reserved" }]
   uint32 ShareDevice(
         [IN, Description ( 
             "The desired access of the System to the shared Logical Device."
              ), 
          ValueMap { "2", "3", "4", "5", "..", "32768..65535" }, 
          Values { "No Access", "Exclusive Access", 
             "Shared Read", "Shared Full", "DMTF Reserved", 
             "Vendor Reserved" }, 
          ModelCorrespondence { 
             "CIM_SharingDependency.CurrentAccess", 
             "CIM_DeviceSharingCapabilities.SupportedAccessModes" }]
      uint16 RequestedAccess, 
         [IN, Description ( 
             "The LogicalDevice to change access to." )]
      CIM_LogicalDevice REF Device, 
         [IN, Description ( 
             "The System whose access to the LogicalDevice the "
             "change is requested for." )]
      CIM_System REF System, 
         [IN, Description ( 
             "A timeout period that specifies the maximum amount "
             "of time that the client is willing to wait for "
             "access to the shared device to be granted before "
             "the request should be abandoned. This value does "
             "not directly correlate to a timeout for the method "
             "invocation. That is, its possible for a job to be "
             "started to process the request and the method to "
             "return within the timeout period only to have the "
             "operation aborted later when the timeout period "
             "expires. The TimeoutPeriod shall be specified in "
             "interval format. A value of 0 indicates that if "
             "the requested access can not be granted "
             "immediately the client does not wish to wait and "
             "the request should fail. A null parameter "
             "indicates that the client has no time requirements "
             "for the request to be granted and wishes to wait "
             "indefinitely for access to be granted. \n"
             "If this property does not contain 0 or null and "
             "the implementation doesn\'t support this "
             "parameter, a return code of \'Use Of Timeout "
             "Parameter Not Supported\' shall be returned." )]
      datetime TimeoutPeriod, 
         [IN, Description ( 
             "This parameter is used by a client to indicate "
             "that they wish the requested access to be granted "
             "even if it requires forcibly revoking access "
             "currently granted to another system. When the "
             "value of this parameter is true, and a valid "
             "TimeoutPeriod is specified, the implementation "
             "shall wait for the duration specified by "
             "TimeoutPeriod before forcibly modifying access. If "
             "the access requested can be granted without "
             "disruption prior to the TimeoutPeriod expiring, "
             "the implementation should complete the request and "
             "not wait for the expiration of the interval "
             "specified by TimeoutPeriod." )]
      boolean Force, 
         [IN ( false ), OUT, Description ( 
             "Reference to the job spawned if the operation "
             "continues after the method returns. (may be null "
             "if task completed)." )]
      CIM_ConcreteJob REF Job);

};