//**************************************************************************
//*
//* Copyright (c) 2000 Microsoft Corporation
//*
//* File: ClusWMI.mof
//*
//**************************************************************************

#pragma namespace("\\\\.\\ROOT")

instance of __NameSpace
{
    Name = "MSCluster" ;
};

#pragma namespace ("\\\\.\\Root\\MSCluster")

instance of __Win32Provider as $InstanceProv
{
    Name = "MS_CLUSTER_PROVIDER" ;
    CLSID = "{598065EA-EDC9-4b2c-913B-5104D04D098A}" ;
    ImpersonationLevel = 1 ;
    PerUserInitialization = TRUE ;    // This insures that we get the most accurate information.
    Hostingmodel="NetworkServicehost";
};

instance of __Win32Provider as $EventProv
{
    Name  = "Cluster Event Provider" ;
    CLSID = "{92863246-4EDE-4eff-B606-79C1971DB230}" ;
    ImpersonationLevel = 1 ;
    PerUserInitialization = TRUE ;    // This insures that we get the most accurate information.
    Hostingmodel="NetworkServicehost";
};

instance of __Win32Provider as $ClassProv
{
    Name = "MS_CLUSTER_CLASS_PROVIDER" ;
    CLSID = "{6A52C339-DCB0-4682-8B1B-02DE2C436A6D}" ;
    ImpersonationLevel = 1 ;
    PerUserInitialization = TRUE ;    // This insures that we get the most accurate information.
    Hostingmodel="NetworkServicehost";
};

// ==================================================================
//    CIM_ManagedSystemElement
// ==================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        Description (
        "CIM_ManagedSystemElement is the base class for the System Element "
        "hierarchy. Membership Criteria: Any distinguishable component of a "
        "System is a candidate for inclusion in this class. Examples: software "
        "components, such as files; and devices, such as disk drives and "
        "controllers, and physical components such as chips and cards."
        ),
        UUID ("{C9D86C80-ED46-4377-8360-FC9B8A9F0C64}")
        ]
class CIM_ManagedSystemElement
{
        [MaxLen (64) ,
        Description (
        "The Caption property is a short textual description (one-line string) "
        "of the object."
        ) ]
    string Caption ;

        [Description (
        "The Description property provides a textual description of the object."
        ) ]
    string Description ;

        [Description (
        "A datetime value indicating when the object was installed. A lack of a "
        "value does not indicate that the object is not installed."
        ) ,
        MappingStrings { "MIF.DMTF|ComponentID|001.5" }
        ]
    datetime InstallDate ;

        [MaxLen (256) ,
        Description (
        "The Name property defines the label by which the object is known. When "
        "subclassed, the Name property can be overridden to be a Key property."
        ) ]
    string Name ;

        [MaxLen (10) ,
        Description (
        "A string indicating the current status of the object. Various "
        "operational and non-operational statuses are defined. Operational "
        "statuses are \"OK\", \"Degraded\", \"Stressed\" and \"Pred Fail\". "
        "\"Stressed\" indicates that the Element is functioning, but needs "
        "attention. Examples of \"Stressed\" states are overload, overheated, "
        "etc. The condition \"Pred Fail\" (failure predicted) indicates that an "
        "Element is functioning properly but predicting a failure in the near "
        "future. An example is a SMART-enabled hard drive. Non-operational "
        "statuses can also be specified. These are \"Error\", \"NonRecover\", "
        "\"Starting\", \"Stopping\" and \"Service\". \"NonRecover\" indicates "
        "that a non-recoverable error has occurred. \"Service\" describes an "
        "Element being configured, maintained or cleaned, or otherwise "
        "administered. This status could apply during mirror-resilvering of a "
        "disk, reload of a user permissions list, or other administrative task. "
        "Not all such work is on-line, yet the Element is neither \"OK\" nor in "
        "one of the other states."
        ) ,
        ValueMap {
        "OK", "Error", "Degraded", "Unknown", "Pred Fail", "Starting",
        "Stopping", "Service", "Stressed", "NonRecover"
        } ]
    string Status ;

}; //*** class CIM_ManagedSystemElement

// ==================================================================
//    CIM_LogicalElement
// ==================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        Description (
        "CIM_LogicalElement is a base class for all the components of a System "
        "that represent abstract system components, such as Files, Processes, or "
        "system capabilities in the form of Logical Devices."
        ),
        UUID ("{F6D42C79-DC86-4847-80A7-36CA4A5E36C8}")
        ]
class CIM_LogicalElement : CIM_ManagedSystemElement
{
}; //*** class CIM_LogicalElement

// ==================================================================
//    CIM_System
// ==================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        Description (
        "A CIM_System is a LogicalElement that aggregates an enumerable set of "
        "Managed System Elements. The aggregation operates as a functional whole."
        " Within any particular subclass of System, there is a well-defined list "
        "of Managed System Element classes whose instances must be aggregated."
        ),
        UUID ("{A4D42690-0286-4369-B95C-7169809CC3EC}")
        ]
class CIM_System : CIM_LogicalElement
{
        [CIM_KEY ,
        MaxLen (256) ,
        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."
        ) ]
    string CreationClassName ;

        [Key ,
        MaxLen (256) ,
        Override ("Name") ,
        Description (
        "The inherited Name serves as key of a System instance in an enterprise "
        "environment."
        ) ]
    string Name ;

        [MaxLen (64) ,
        Description (
        "The System object and its derivatives are Top Level Objects of CIM. "
        "They provide the scope for numerous components. Having unique System "
        "keys is required. A heuristic can be defined in individual System "
        "subclasses to attempt to always generate the same System Name Key. The "
        "NameFormat property identifies how the System name was generated, using "
        "the subclass' heuristic."
        ) ]
    string NameFormat ;

        [MaxLen (256) ,
        Description (
        "A string that provides information on how the primary system owner can "
        "be reached (e.g. phone number, email address, ...)."
        ) ,
        MappingStrings { "MIF.DMTF|General Information|001.3" }
        ]
    string PrimaryOwnerContact ;

        [MaxLen (64) ,
        Description ("The name of the primary system owner.") ,
        MappingStrings { "MIF.DMTF|General Information|001.4" }
        ]
    string PrimaryOwnerName ;

        [Description (
        "An array (bag) of strings that specify the roles this System plays in "
        "the IT-environment. Subclasses of System may override this property to "
        "define explicit Roles values. Alternately, a Working Group may describe "
        "the heuristics, conventions and guidelines for specifying Roles. For "
        "example, for an instance of a networking system, the Roles property "
        "might contain the string, 'Switch' or 'Bridge'."
        ) ]
    string Roles[] ;

}; //*** class CIM_System

// ===================================================================
//    CIM_ComputerSystem
// ===================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        Description (
        "A class derived from System that is a special collection of "
        "ManagedSystemElements. This collection provides compute capabilities "
        "and serves as aggregation point to associate one or more of the "
        "following elements: FileSystem, OperatingSystem, Processor and Memory ("
        "Volatile and/or NonVolatile Storage)."
        ),
        UUID ("{DB2EBD10-5113-44a1-96E6-52A4FB4210E1}")
        ]
class CIM_ComputerSystem : CIM_System
{
        [Override ("NameFormat") ,
        Description (
        "The ComputerSystem object and its derivatives are Top Level Objects of "
        "CIM. They provide the scope for numerous components. Having unique "
        "System keys is required. A heuristic is defined to create the "
        "ComputerSystem Name to attempt to always generate the same Name, "
        "independent of discovery protocol. This prevents inventory and "
        "management problems where the same asset or entity is discovered "
        "multiple times, but can not be resolved to a single object. Use of the "
        "heuristic is optional, but recommended.\n\nThe NameFormat property "
        "identifies how the ComputerSystem Name is generated, using a heuristic. "
        "The heuristic is outlined, in detail, in the CIM V2 System Model spec. "
        "It assumes that the documented rules are traversed in order, to "
        "determine and assign a Name. The NameFormat Values list defines the "
        "precedence order for assigning the ComputerSystem Name. Several rules "
        "do map to the same Value.\n\nNote that the ComputerSystem Name "
        "calculated using the heuristic is the System's key value. Other names "
        "can be assigned and used for the ComputerSystem, that better suit a "
        "business, using Aliases."
        ) ,
        ValueMap {
        "Other", "IP", "Dial", "HID", "NWA", "HWA", "X25", "ISDN", "IPX",
        "DCC", "ICD", "E.164", "SNA", "OID/OSI"
        } ]
    string NameFormat ;

        [MaxLen (256) ,
        ArrayType ("Indexed") ,
        Description (
        "OtherIdentifyingInfo captures additional data, beyond System Name "
        "information, that could be used to identify a ComputerSystem. One "
        "example would be to hold the Fibre Channel World-Wide Name (WWN) of a "
        "node. Note that if only the Fibre Channel name is available and is "
        "unique (able to be used as the System key), then this property would be "
        "NULL and the WWN would become the System key, its data placed in the "
        "Name property."
        ) ,
        ModelCorrespondence { "CIM_ComputerSystem.IdentifyingDescriptions" }
        ]
    string OtherIdentifyingInfo[] ;

        [ArrayType ("Indexed") ,
        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."
        ) ,
        ModelCorrespondence { "CIM_ComputerSystem.OtherIdentifyingInfo" }
        ]
    string IdentifyingDescriptions[] ;

        [Description (
        "Enumeration indicating whether the ComputerSystem is a special-purpose "
        "System (ie, dedicated to a particular use), versus being 'general "
        "purpose'. For example, one could specify that the System is dedicated "
        "to \"Print\" (value=11) or acts as a \"Hub\" (value=8)."
        ) ,
        Values {
        "Not Dedicated", "Unknown", "Other", "Storage", "Router", "Switch",
        "Layer 3 Switch", "Central Office Switch", "Hub", "Access Server",
        "Firewall", "Print", "I/O", "Web Caching"
        } ]
    uint16 Dedicated[] ;

}; //*** class CIM_ComputerSystem

// =============================================================================
//    CIM_UnitaryComputerSystem
// =============================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        Description (
        "A class derived from ComputerSystem that represents a Desktop, "
        "Mobile, NetPC, Server or other type of a single node Computer "
        "System."
        ),
        UUID ("{903487A9-1E55-4489-9389-4CEE0AE6B236}")
        ]
class CIM_UnitaryComputerSystem : CIM_ComputerSystem
{
        [Description (
        "This object contains the data needed to find either the "
        "initial load device (its key) or the boot service to "
        "request the operating system to start up. In addition, "
        "the load parameters (ie, a pathname and parameters) "
        "may also be specified."
        ) ]
    string InitialLoadInfo[];

        [Description (
        "This object contains the data identifying either the "
        "initial load device (its key) or the boot service that "
        "requested the last operating system load. In addition, "
        "the load parameters (ie, a pathname and parameters) "
        "may also be specified."
        ) ,
        MappingStrings {
        "MIB.IETF|HOST-RESOURCES-MIB.hrSystemInitialLoadDevice",
        "MIB.IETF|HOST-RESOURCES-MIB.hrSystemInitialLoadParameters"
        } ]
    string LastLoadInfo;

        [Description (
        "If enabled (value = 4), the UnitaryComputerSystem can be "
        "reset via hardware (e.g. the power and reset buttons). If "
        "disabled (value = 3), hardware reset is not allowed. In "
        "addition to Enabled and Disabled, other Values for the "
        "property are also defined - \"Not Implemented\" (5), "
        "\"Other\" (1) and \"Unknown\" (2)."
        ) ,
        ValueMap { "1", "2", "3", "4", "5" } ,
        Values {
        "Other", "Unknown", "Disabled", "Enabled", "Not Implemented"
        } ,
        MappingStrings { "MIF.DMTF|System Hardware Security|001.4" }
        ]
    uint16 ResetCapability;

        [Description (
        "Boolean indicating that the ComputerSystem, with its "
        "running OperatingSystem, supports power management. This "
        "boolean does not indicate that power management features are "
        "currently enabled, or if enabled, what features are "
        "supported. Refer to the PowerManagementCapabilities array "
        "for this information. If this boolean is false, the integer "
        "value 1 for the string, \"Not Supported\", should be the "
        "only entry in the PowerManagementCapabilities array."
        ) ]
    boolean PowerManagementSupported;

        [Description (
        "Indicates the specific power-related capabilities of a "
        "ComputerSystem and its associated running OperatingSystem. "
        "The values, 0=\"Unknown\", 1=\"Not Supported\", and "
        "2=\"Disabled\" are self-explanatory. "
        "The value, 3=\"Enabled\" indicates that the power management "
        "features are currently enabled but the exact feature set "
        "is unknown or the information is unavailable. "
        "\"Power Saving Modes Entered Automatically\" (4) describes "
        "that a system can change its power state based on usage or "
        "other criteria. \"Power State Settable\" (5) indicates that "
        "the SetPowerState method is supported. \"Power Cycling "
        "Supported\" (6) indicates that the SetPowerState method "
        "can be invoked with the PowerState input variable set to 5 ("
        "\"Power Cycle\"). \"Timed Power On Supported\" (7) indicates "
        "that the SetPowerState method can be invoked with the Power"
        "State input variable set to 5 (\"Power Cycle\") and the Time "
        "parameter set to a specific date and time, or interval, "
        "for power-on."
        ) ,
        Values {
        "Unknown", "Not Supported", "Disabled", "Enabled",
        "Power Saving Modes Entered Automatically",
        "Power State Settable", "Power Cycling Supported",
        "Timed Power On Supported"
        } ,
        MappingStrings { "MIF.DMTF|System Power Controls|001.2" }
        ]
    uint16 PowerManagementCapabilities[];

        [Description (
        "Indicates the current power state of the ComputerSystem and "
        "its associated OperatingSystem. Regarding the Power Save "
        "states, these are defined as follows: Value 4 (\"Power Save "
        "- Unknown\") indicates that the System is known to be in a "
        "power save mode, but its exact status in this mode is "
        "unknown; 2 (\"Power Save - Low Power Mode\") indicates that "
        "the System is in a power save state but still functioning, "
        "and may exhibit degraded performance; 3 (\"Power Save - "
        "Standby\") describes that the System is not functioning but "
        "could be brought to full power 'quickly'; and value 7 "
        "(\"Power Save - Warning\") indicates that the Computer"
        "System is in a warning state, though also in a power save "
        "mode."
        ) ,
        Values {
        "Unknown", "Full Power", "Power Save - Low Power Mode",
        "Power Save - Standby", "Power Save - Unknown", "Power Cycle",
        "Power Off", "Power Save - Warning"
        } ]
    uint16 PowerState ;

    //***********
    //* Methods *
    //***********

        [Description (
        "SetPowerState defines the desired power state of a "
        "ComputerSystem and its running OperatingSystem, and when "
        "the system should be put into that state. The PowerState "
        "parameter is specified as one of the valid integer values "
        "defined for the property, PowerState. The Time "
        "parameter (for all state changes but 5, \"Power Cycle\") "
        "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). "
        "When the PowerState parameter is equal to 5, \"Power Cycle\", "
        "the Time parameter indicates when the system should power on "
        "again. Power off is immediate. SetPowerState should "
        "return 0 if successful, 1 if the specified State and Time "
        "request is not supported, and some other value if any "
        "other error occurred."
        ) ]
    uint32 SetPowerState(
        [IN] uint16 PowerState,
        [IN] datetime Time
        );

}; //*** class CIM_UnitaryComputerSystem

// ===================================================================
//    CIM_LogicalDevice
// ===================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        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."
        ),
        UUID ("{79995733-3548-4102-98F0-8A2D65CCE350}")
        ]
class CIM_LogicalDevice : CIM_LogicalElement
{
        [Propagated ("CIM_System.CreationClassName") ,
        CIM_KEY,
        MaxLen (256) ,
        Description ("The scoping System's CreationClassName.")
        ]
    string SystemCreationClassName ;

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

        [CIM_KEY,
        MaxLen (256) ,
        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."
        ) ]
    string CreationClassName ;

        [Key,
        MaxLen (64) ,
        Description (
        "An address or other identifying information to uniquely name the "
        "LogicalDevice."
        ) ]
    string DeviceID ;

        [Description (
        "Boolean indicating that the Device can be power managed - ie, put into "
        "a power save state. This boolean does not indicate that power "
        "management features are currently enabled, or if enabled, what features "
        "are supported. Refer to the PowerManagementCapabilities array for this "
        "information. If this boolean is false, the integer value 1, for the "
        "string, \"Not Supported\", should be the only entry in the "
        "PowerManagementCapabilities array."
        ) ]
    boolean PowerManagementSupported ;

        [Description (
        "Indicates the specific power-related capabilities of a LogicalDevice. "
        "The array values, 0=\"Unknown\", 1=\"Not Supported\" and 2=\"Disabled\" "
        "are self-explanatory. The value, 3=\"Enabled\" indicates that the power "
        "management features are currently enabled but the exact feature set is "
        "unknown or the information is unavailable. \"Power Saving Modes Entered "
        "Automatically\" (4) describes that a Device can change its power state "
        "based on usage or other criteria. \"Power State Settable\" (5) "
        "indicates that the SetPowerState method is supported. \"Power Cycling "
        "Supported\" (6) indicates that the SetPowerState method can be invoked "
        "with the PowerState input variable set to 5 (\"Power Cycle\"). \"Timed "
        "Power On Supported\" (7) indicates that the SetPowerState method can be "
        "invoked with the PowerState input variable set to 5 (\"Power Cycle\") "
        "and the Time parameter set to a specific date and time, or interval, "
        "for power-on."
        ) ,
        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 availability and status of the Device.  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"
        } ,
        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"
        } ,
        MappingStrings {
        "MIF.DMTF|Operational State|004.5",
        "MIB.IETF|HOST-RESOURCES-MIB.hrDeviceStatus",
        "MIF.DMTF|Host Device|001.5"
        } ]
    uint16 Availability ;

        [Description (
        "StatusInfo is a string indicating whether the LogicalDevice 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."
        ) ,
        ValueMap { "1", "2", "3", "4", "5" } ,
        Values {
        "Other", "Unknown", "Enabled", "Disabled", "Not Applicable"
        } ,
        MappingStrings { "MIF.DMTF|Operational State|004.3" }
        ]
    uint16 StatusInfo ;

        [Description (
        "LastErrorCode captures the last error code reported by the "
        "LogicalDevice."
        ) ]
    uint32 LastErrorCode ;

        [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 ;

        [Description (
        "ErrorCleared is a boolean property indicating that the error reported "
        "in LastErrorCode is now cleared."
        ) ]
    boolean ErrorCleared ;

        [MaxLen (256) ,
        ArrayType ("Indexed") ,
        Description (
        "OtherIdentifyingInfo captures additional data, beyond DeviceID "
        "information, that could be used to identify a LogicalDevice. One "
        "example would be to hold the OperatingSystem's user friendly name for "
        "the Device in this property."
        ) ,
        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 ;

        [ArrayType ("Indexed") ,
        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."
        ) ,
        ModelCorrespondence { "CIM_LogicalDevice.OtherIdentifyingInfo" }
        ]
    string IdentifyingDescriptions[] ;

    //***********
    //* Methods *
    //***********

        [Description (
        "SetPowerState defines the desired power state for a LogicalDevice and "
        "when a Device should be put into that state. The desired power state is "
        "specified by setting the PowerState parameter to one of the following "
        "integer values: 1=\"Full Power\", 2=\"Power Save - Low Power Mode\", "
        "3=\"Power Save - Standby\", 4=\"Power Save - Other\", 5=\"Power Cycle\" "
        "or 6=\"Power Off\". The Time parameter (for all state changes but 5, "
        "\"Power Cycle\") 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). When the "
        "PowerState parameter is equal to 5, \"Power Cycle\", the Time parameter "
        "indicates when the Device should power on again. Power off is immediate."
        " SetPowerState should return 0 if successful, 1 if the specified "
        "PowerState and Time 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 SetPowerState(
                    [IN,
                    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]
                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() ;

        [Description (
        "Requests that the LogicalDevice be enabled (\"Enabled\" input parameter "
        "= TRUE) or disabled (= FALSE). If successful, the Device's StatusInfo "
        "property should also reflect the desired state (enabled/disabled). 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] boolean Enabled ) ;

}; //*** class CIM_LogicalDevice

// ==================================================================
//    CIM_Service
// ==================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        Description (
        "A CIM_Service is a Logical Element that contains the information "
        "necessary to represent and manage the functionality provided by a "
        "Device and/or SoftwareFeature. A Service is a general-purpose object "
        "to configure and manage the implementation of functionality.  It is "
        "not the functionality itself."
        ),
        UUID ("{FCFE8148-E035-4bf9-88ED-494793B152BC}")
        ]
class CIM_Service : CIM_LogicalElement
{
        [CIM_KEY,
        MaxLen (256) ,
        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."
        ) ]
    string CreationClassName ;

        [Override ("Name") ,
        Key,
        MaxLen (256) ,
        Description (
        "The Name property uniquely identifies the Service and provides an "
        "indication of the functionality that is managed. This functionality is "
        "described in more detail in the object's Description property."
        ) ]
    string Name ;

        [MaxLen (10) ,
        Description (
        "StartMode is a string value indicating whether the Service is "
        "automatically started by a System, Operating System, etc. or only "
        "started upon request."
        ) ,
        ValueMap { "Automatic", "Manual" }
        ]
    string StartMode ;

        [Description (
        "Started is a boolean indicating whether the Service has been started ("
        "TRUE), or stopped (FALSE)."
        ) ]
    boolean Started ;

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

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

    //***********
    //* Methods *
    //***********

        [Description (
        "The StartService method places the Service in the started state. It "
        "returns an integer value of 0 if the Service was successfully started, "
        "1 if the request is not supported and any other number to indicate an "
        "error. 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 StartService() ;

        [Description (
        "The StopService method places the Service in the stopped state. It "
        "returns an integer value of 0 if the Service was successfully stopped, "
        "1 if the request is not supported and any other number to indicate an "
        "error. 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 StopService() ;

}; //*** class CIM_Service

// ===================================================================
//    CIM_ClusteringService
// ===================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        UUID ("{CA0A869F-8876-4be7-AADF-A427F7733415}") : ToInstance
        ]
class CIM_ClusteringService : CIM_Service
{
    //***********
    //* Methods *
    //***********

    uint32 AddNode( [IN] CIM_ComputerSystem Ref CS ) ;
    uint32 EvictNode( [IN] CIM_ComputerSystem Ref CS ) ;

}; //*** class CIM_ClusteringService

// ==================================================================
//    CIM_Dependency
// ==================================================================
        [Association ,
        Abstract ,
        Locale (0x409) : ToInstance ,
        Description (
        "CIM_Dependency is a generic association used to establish dependency "
        "relationships between objects."
        ),
        UUID ("{26BB4D6A-0473-494e-A864-5CAEEB9AB330}")
        ]
class CIM_Dependency
{
        [Key ,
        Description (
        "Antecedent represents the independent object in this association."
        ) ]
    CIM_ManagedSystemElement REF Antecedent ;

        [Key ,
        Description (
        "Dependent represents the object dependent on the Antecedent."
        ) ]
    CIM_ManagedSystemElement REF Dependent ;

}; //*** class CIM_Dependency

// ==================================================================
//    CIM_HostedService
// ==================================================================
        [Abstract ,
        Association ,
        Locale (0x409) : ToInstance ,
        Description (
        "CIM_HostedService is an association between a Service and the System on "
        "which the functionality resides.  The cardinality of this association "
        "is 1-to-many.  A System may host many Services. Services are weak with "
        "respect to their hosting System. Heuristic:  A Service is hosted on the "
        "System where the LogicalDevices or SoftwareFeatures that implement the "
        "Service are located.  The model does not represent Services hosted "
        "across multiple systems.  This is modeled as an ApplicationSystem that "
        "acts as an aggregation point for Services, that are each located on a "
        "single host."
        ),
        UUID ("{F59C2609-0CCC-487a-B583-184FE6FC2F53}")
        ]
class CIM_HostedService : CIM_Dependency
{
        [Override ("Antecedent") ,
        Max (1) ,
        Min (1) ,
        Description ("The hosting System.")
        ]
    CIM_System REF Antecedent ;

        [Override ("Dependent") ,
        Weak,
        Description ("The Service hosted on the System.")
        ]
    CIM_Service REF Dependent ;

}; //*** class CIM_HostedService

// ==================================================================
//    CIM_Component
// ==================================================================
        [Association ,
        Abstract ,
        Locale (0x409) : ToInstance ,
        Aggregation ,
        Description (
        "CIM_Component is a generic association used to establish 'part of' "
        "relationships between Managed System Elements. For example, the "
        "SystemComponent association defines parts of a System."
        ),
        UUID ("{7C6B02AF-B639-4ca5-9A92-E5710AB090AC}")
        ]
class CIM_Component
{
        [Aggregate ,
        Key ,
        Description ("The parent element in the association.")
        ]
    CIM_ManagedSystemElement REF GroupComponent ;

        [Key ,
        Description ("The child element in the association.")
        ]
    CIM_ManagedSystemElement REF PartComponent ;

}; //*** class CIM_Component

// ==================================================================
//    CIM_SystemComponent
// ==================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        Association ,
        Aggregation ,
        Description (
        "CIM_SystemComponent is a specialization of the CIM_Component "
        "association that establishes 'part of' relationships between a System "
        "and the Managed System Elements of which it is composed."
        ),
        UUID ("{D4DF8D45-2057-4f5f-AAF0-BC4452F48F1F}")
        ]
class CIM_SystemComponent : CIM_Component
{
        [Override ("GroupComponent") ,
        Aggregate ,
        Description ("The parent System in the Association.")
        ]
    CIM_System REF GroupComponent ;

        [Override ("PartComponent") ,
        Description ("The child element that is a component of a System.")
        ]
    CIM_ManagedSystemElement REF PartComponent ;

}; //*** class CIM_SystemComponent

// ==================================================================
//    CIM_SystemDevice
// ==================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        Association ,
        Aggregation ,
        Description (
        "LogicalDevices may be aggregated by a System.  This relationship is "
        "made explicit by the SystemDevice association."
        ),
        UUID ("{D6CB4144-71F3-46b3-AE99-C0AD9A930CD1}")
        ]
class CIM_SystemDevice : CIM_SystemComponent
{
        [Override ("GroupComponent") ,
        Aggregate,
        Max (1) ,
        Min (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 ;

}; //*** class CIM_SystemDevice

// ===================================================================
//    CIM_ComponentCS
// ===================================================================
        [Association ,
        Aggregation ,
        Locale (0x409) ,
        Description (
        "A ComputerSystem can aggregate another ComputerSystem. This association "
        "can be used to model MPP Systems with workstation frontends, an I2O "
        "subsystem embedded in a UnitaryComputerSystem, or a System that splits "
        "functionality between two processors, potentially running different "
        "OperatingSystems. For example, if a CISC Processor and its associated "
        "OperatingSystem, are used for user interface and file support, and a "
        "RISC Processor and its OS are used for complex mathematical operations, "
        "this could be modeled as two ComputerSystems where one aggregates the "
        "other. In some cases, this could be modeled as a Cluster. The "
        "difference is the focus of the relationship. ComponentCS represents "
        "that unique and distinct ComputerSystems are aggregated by a higher "
        "level CS object. However, each of the component CSs are still "
        "distinguishable entities and are only viewed as such. Alternately, with "
        "a Cluster, the ComputerSystems that participate in it are "
        "inconsequential, when viewed through the 'Cluster System'.\n\nWhen "
        "instantiating or subclassing the ComponentCS relationship, care should "
        "be taken that the component ComputerSystem meets the definitional "
        "requirements of a ComputerSystem - ie, a functional whole that provides "
        "compute capabilities and aggregates System Devices, an OperatingSystem, "
        "etc."
        ),
        UUID ("{AB653DD2-EA29-4dcc-9F10-8C809A50A646}")
        ]
class CIM_ComponentCS : CIM_SystemComponent
{
        [Override ("GroupComponent") ,
        Aggregate ,
        Description (
        "The ComputerSystem that contains and/or aggregates other Systems."
        ) ]
    CIM_ComputerSystem REF GroupComponent ;

        [Override ("PartComponent") ,
        Description ("The contained (Sub)ComputerSystem.")
        ]
    CIM_ComputerSystem REF PartComponent ;

}; //*** class CIM_ComponentCS

// ===================================================================
//    CIM_Cluster
// ===================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        Description (
        "A class derived from ComputerSystem that 'is made up of' two or more "
        "ComputerSystems which operate together as an atomic, functional whole "
        "to increase the performance, resources and/or RAS (Reliability, "
        "Availability and Serviceability) of the component ComputerSystems, "
        "related to some aspects of these ComputerSystems."
        ),
        UUID ("{35239F78-E086-44a2-B506-140D0D1F7DBA}")
        ]
class CIM_Cluster : CIM_ComputerSystem
{
        [Description (
        "Interconnect is a free form string that describes the interconnection "
        "mechanism for the Cluster."
        ) ]
    string Interconnect ;

        [Description (
        "InterconnectAddress indicates the address of the Cluster System, which "
        "is dependent on the interconnection scheme. If no address is available "
        "or applicable, a null string should be used."
        ) ]
    string InterconnectAddress ;

        [Description (
        "The cluster types. This specifies whether the cluster is for failover ("
        "value=2), performance (3), etc. The values which can be specified are "
        "not mutually exclusive. Thus, Types is an array."
        ) ,
        Values {
        "Unknown" , "Other", "Failover", "Performance", "Distributed OS",
        "Node Grouping", "SysPlex"
        } ]
    uint16 Types[] ;

        [Description (
        "Indicates the maximum number of nodes that may participate in the "
        "Cluster.  If unlimited, enter 0."
        ) ]
    uint32 MaxNumberOfNodes ;

        [Description (
        "Indicates the state of the Cluster.  The cluster can be defined to be "
        "on-line (value=2), off-line (3), in a degraded mode of operation (4) or "
        "unavailable (5)."
        ) ,
        Values {
        "Unknown", "Other", "On-line", "Off-line", "Degraded", "Unavailable"
        } ]
    uint16 ClusterState ;

}; //*** class CIM_Cluster

// ===================================================================
//    CIM_ParticipatingCS
// ===================================================================
        [Abstract ,
        Association ,
        Locale (0x409) : ToInstance ,
        Description (
        "A Cluster is composed of two or more ComputerSystems, operating "
        "together. A ComputerSystem may participate in multiple Clusters. "
        "\n\nWhen first establishing or bringing up a Cluster, only one "
        "ComputerSystem may be defined as participating in it. Therfore, the "
        "cardinality of the association for the ComputerSystem reference is "
        "Min(1)."
        ),
        UUID ("{8A5CD126-FD8B-4eb2-AEDF-5DC22B6DE989}")
        ]
class CIM_ParticipatingCS : CIM_Dependency
{
        [Override ("Antecedent") ,
        Description (
        "The ComputerSystem which participates in the Cluster."
        ) ,
        Min (1)
        ]
    CIM_ComputerSystem REF Antecedent ;

        [Override ("Dependent") ,
        Description ("The Cluster.")
        ]
    CIM_Cluster REF Dependent ;

        [Description (
        "StateOfNode indicates the condition of the participating ComputerSystem "
        "in the Cluster.  For example, one value is \"Joining\" (2)."
        ) ,
        Values {
        "Unknown", "Other", "Joining", "Paused", "Available",
        "Unavailable", "Degraded"
        } ]
    uint16 StateOfNode ;

        [Description (
        "RoleOfNode indicates whether the Cluster nodes are peers (value = 2), "
        "connected in a master-slave/primary-secondary relationship (values = 3 "
        "for primary, 4 for secondary), available in a standby configuration (5) "
        "or of some other (1) or unknown (0) relationship. In a System/390 "
        "environment, the nodes are identified as \"Base Plex\" (value=6) or "
        "\"Enhanced Plex\" (value=7)."
        ) ,
        Values {
        "Unknown", "Other", "Peer", "Primary", "Secondary", "Standby",
        "Base Plex", "Enhanced Plex"
        } ]
    uint16 RoleOfNode ;

}; //*** class CIM_ParticipatingCS

//************************************************************************
//* Microsoft Cluster Service Schema
//************************************************************************

// ===================================================================
//    MSCluster_Property
// ===================================================================
        [Abstract : ToSubClass,
        Locale (0x409) : ToInstance ,
        Description(
        "Superclass for properties of cluster objects."
        ),
        UUID ("{4D5365E3-A8F2-4167-8565-7A588D1F4FA5}")
        ]
class MSCluster_Property
{
}; //*** class MSCluster_Property

// ===================================================================
//    MSCluster_LogicalElement
// ===================================================================
        [Abstract ,
        Locale (0x409) : ToInstance ,
        Description (
        "Superclass for cluster objects that provide "
        "the FLAGS and CHARACTERISTICS attributes"
        ),
        UUID ("{9EB9A2F9-0751-4dcf-AB59-F8341D0F60B2}")
        ]
class MSCluster_LogicalElement : CIM_LogicalElement
{
        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    uint32 Flags ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    uint32 Characteristics ;

}; //*** class MSCluster_LogicalElement

// ===================================================================
//    MSCluster_Cluster
// ===================================================================
        [Dynamic ,
        Locale (0x409) ,
        Provider ("MS_CLUSTER_PROVIDER"),
        UUID ("{9EB9A2F9-0751-4dcf-AB59-F8341D0F60B2}")
        ]
class MSCluster_Cluster : CIM_Cluster
{
        [Read : ToSubClass ,
        Description (
        "The Name property specifies the name of the cluster."
        ) ]
    string Name ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The Description property stores administrative comments "
        "about the cluster."
        ) ]
    string Description ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description ("The location of maintenance file.")
        ]
    string MaintenanceFile ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The AdminExtensions property provides the class identifiers "
        "(CLSIDs) for the Cluster Administrator extension DLLs that are "
        "associated with the cluster."
        ) ]
    string AdminExtensions[] ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    string GroupAdminExtensions[] ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    string NodeAdminExtensions[] ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    string ResourceAdminExtensions[] ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    string ResourceTypeAdminExtensions[] ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    string NetworkAdminExtensions[] ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    string NetworkInterfaceAdminExtensions[] ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The SecurityDescriptor property stores Windows 2000-compatible "
        "security descriptor information."
        ) ]
    uint8 Security[] ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description ("The size of quorum log file.")
        ]
    uint32 QuorumLogFileSize ;

        [Read : ToSubClass ,
        Write:ToSubClass ,
        Arraytype ("Ordered") ,
        Description (
        "Prioritized array of networks. "
        "The first in the array has the highest priority"
        ) ]
    string NetworkPriorities[] ;

    uint32 DefaultNetworkRole ;
    uint32 EnableEventLogReplication ;
    uint8  Security_Descriptor[] ;

    //***********
    //* Methods *
    //***********

        [Implemented]
    void Rename( [IN] string newName ) ;

        [Implemented]
    void SetQuorumResource( [IN] MSCluster_Resource REF Resource ) ;

}; //*** class MSCluster_Cluster

// ===================================================================
//    MSCluster_ResourceGroup
// ===================================================================
        [Dynamic ,
        Locale (0x409) ,
        Provider ("MS_CLUSTER_PROVIDER"),
        UUID ("{DDE3A30E-55F7-4c31-B6CF-E360D12C5253}")
        ]
class MSCluster_ResourceGroup : MSCluster_LogicalElement
{
        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The Description property provides comments about the group."
        ) ]
    string Description;

        [Key ,
        Read : ToSubClass ,
        Description ("The Name property specifies the name of the group.")
        ]
    string Name = NULL ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The AutoFailbackType property specifies whether the group "
        "should automatically be failed back to the node identified "
        "as its preferred owner when that node comes back online "
        "following a failover."
        ),
        Values {
        "ClusterGroupPreventFailback", "ClusterGroupAllowFailback"
        } ]
    uint32 AutoFailbackType ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The FailbackWindowEnd property provides the latest time that "
        "the group can be moved back to the node identified as its "
        "preferred node."
        ) ,
        Min (-1) ,
        Max (23) ,
        Units ("hours")
        ]
    sint32 FailbackWindowEnd ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The FailbackWindowStart property provides the earliest time "
        "(that is, local time as kept by the cluster) that the group "
        "can be moved back to the node identified as its preferred node."
        ),
        Min (-1) ,
        Max (23) ,
        Units ("hours")
        ]
    sint32 FailbackWindowStart ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The FailoverPeriod property specifies a number of hours during "
        "which a maximum number of failover attempts, specified by "
        "FailoverThreshold, can occur."
        ) ,
        Min (1) ,
        Max (1193),
        Units ("hours")
        ]
    uint32 FailoverPeriod ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The FailoverThreshold property specifies the maximum number of "
        "failover attempts that can be made on a group within a time "
        "interval defined by FailoverPeriod."
        ) ]
    uint32 FailoverThreshold ;

        [Read : ToSubClass ,
        Description (
        "The PersistentState property specifies whether a group should "
        "be left offline or brought online when the Cluster Service "
        "starts."
        ) ]
    boolean PersistentState ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        ArrayType ("Ordered") ,
        Description (
        "Array of handles to nodes, in order by preference, with the "
        "first node being the most preferred and the last node the "
        "least preferred."
        ) ]
    string PreferredNodeList[] ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The LoadBalState property is reserved for future use "
        "and is not used by Windows Clustering at this time."
        ) ]
    uint32 LoadBalState;

    //***********
    //* Methods *
    //***********

        [Implemented]
    void BringOnline() ;

        [Implemented]
    void TakeOffline();

        [Implemented ,
        Description ("To move the group to different node.")
        ]
    void MoveToNewNode( [IN] string NodeName ) ;

        [Implemented ,
        Description ("To rename the group.")
        ]
    void Rename( [IN] string newName ) ;

        [Implemented ,
        Static ,
        Description ("Create a new group")
        ]
    void CreateGroup( [IN] string GroupName ) ;

}; //*** class MSCluster_ResourceGroup

// ===================================================================
//    MSCluster_Networks
// ===================================================================
        [Dynamic ,
        Locale (0x409) ,
        Provider ("MS_CLUSTER_PROVIDER"),
        UUID ("{F541DA2A-174C-4000-9066-B755095C7E7A}")
        ]
class MSCluster_Networks : MSCluster_LogicalElement
{
        [Key ,
        Read : ToSubClass ,
        Description ("The Name property provides the name of the network.")
        ]
    string Name ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The Description property provides comments about the network."
        ) ]
    string Description ;

        [Read : ToSubClass ,
        Description (
        "The Address property provides the address for the entire network "
        "or subnet."
        ) ]
    string Address ;

        [Read : ToSubClass ,
        Description (
        "The AddressMask property provides the mask that distinguishes the "
        "network and host portions of an address."
        ) ]
    string AddressMask ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The Role property provides the role of the network in the cluster."
        ),
        Values {
        "ClusterNetworkRoleNone", "ClusterNetworkRoleClientAccess",
        "ClusterNetworkRoleInternalUse", "ClusterNetworkRoleInternalAndClient"
        } ]
    uint32 Role ;

    uint32 State ;

    //***********
    //* Methods *
    //***********

        [Description ("To rename the network."),
        Implemented
        ]
    void Rename( [IN] string newName );

}; //*** class MSCluster_Networks

// ===================================================================
//    MSCluster_Node
// ===================================================================
        [Dynamic ,
        Locale (0x409) ,
        Provider ("MS_CLUSTER_PROVIDER"),
        UUID ("{C306EBED-0654-4360-AA70-DE912C5FC364}")
        ]
class MSCluster_Node : CIM_UnitaryComputerSystem
{
        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The Description property provides comments about the node."
        ) ]
    string Description ;

        [Read : ToSubClass ,
        Description (
        "The NodeHighestVersion property specifies the highest possible "
        "version of Clustering Service with which the node can join or "
        "communicate."
        ) ]
    uint32 NodeHighestVersion ;

        [Read : ToSubClass ,
        Description (
        "The NodeLowestVersion property specifies the lowest possible "
        "version of Clustering Service with which the node can join or "
        "communicate."
        ) ]
    uint32 NodeLowestVersion ;

        [Read : ToSubClass ,
        Description (
        "The MajorVersion property specifies the integer component of "
        "the Windows NT/Window 2000 version installed on the node."
        ) ]
    uint32 MajorVersion ;

        [Read : ToSubClass,
        Description (
        "The MinorVersion property specifies the decimal component of "
        "the Windows NT/Window 2000 version installed on the node."
        ) ]
    uint32 MinorVersion ;

        [Read : ToSubClass ,
        Description (
        "The BuildNumber property specifies the build number of "
        "Microsoft® Windows NT®/Windows® 2000 installed on a node."
        ) ]
    uint32 BuildNumber ;

        [Read : ToSubClass ,
        Description (
        "The CSDVersion property specifies the number of the most recent "
        "service pack installed on the node (if any)."
        ) ]
    uint32 CSDVersion ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The EnableEventLogReplication property controls whether the "
        "Windows NT/Windows 2000 Event Log is replicated."
        ) ]
    uint32 EnableEventLogReplication ;

        [Read : ToSubClass ,
        Description ("The current state of a node.")
        ]
    uint32 State ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    uint32 Flags ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    uint32 Characteristics ;

}; //*** class MSCluster_Node

// ===================================================================
//    MSCluster_Service
// ===================================================================
        [Dynamic ,
        Locale (0x409) ,
        Provider ("MS_CLUSTER_PROVIDER"),
        UUID ("{8F9030D0-9149-4113-9ADD-6F2101285E5D}")
        ]
class MSCluster_Service : CIM_ClusteringService
{
        [Read : ToSubClass ,
        Description (
        "The NodeHighestVersion property specifies the highest possible "
        "version of Clustering Service with which the node hosting this "
        "service can join or communicate."
        ) ]
    uint32 NodeHighestVersion ;

        [Read : ToSubClass ,
        Description (
        "The NodeLowestVersion property specifies the lowest possible "
        "version of Clustering Service with which the node hosting this "
        "service can join or communicate."
        ) ]
    uint32 NodeLowestVersion ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The EnableEventLogReplication property controls whether the "
        "Windows NT/Windows 2000 Event Log is replicated."
        ) ]
    uint32 EnableEventLogReplication ;

        [Read : ToSubClass ,
        Description ("The current state of the node hosting this service.")
        ]
    uint32 State ;

    //***********
    //* Methods *
    //***********

        [Implemented]
    void Pause() ;

        [Implemented]
    void Resume() ;

}; //*** class MSCluster_Service

// ===================================================================
//    MSCluster_Resource
// ===================================================================
        [Dynamic ,
        Locale (0x409) ,
        Provider ("MS_CLUSTER_PROVIDER"),
        UUID ("{C2862F9C-34DE-4b16-9EE3-099D078E9F59}")
        ]
class MSCluster_Resource : MSCluster_LogicalElement
{
        [Key ,
        Read : ToSubClass ,
        Description (
        "The Name property provides the name of the Resource."
        ) ]
    string Name ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The Description property provides comments about the Resource."
        ) ]
    string Description ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The DebugPrefix property specifies the path to the debugger "
        "used to debug the resource."
        ) ]
    string DebugPrefix ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The IsAlivePollInterval property provides the recommended "
        "interval in milliseconds at which the Cluster Service should "
        "poll the resource to determine if it is operational. If it "
        "sets it to 0xFFFFFFFF, the Cluster Service uses the "
        "IsAlivePollInterval property for the resource type associated "
        "with the resource."
        ),
        Units ("Milliseconds")
        ]
    uint32 IsAlivePollInterval ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The LooksAlivePollInterval property provides the recommended "
        "interval in milliseconds at which the Cluster Service should "
        "poll the resource to determine if it appears operational. If it "
        "sets it to 0xFFFFFFFF, the Cluster Service uses the "
        "LooksAlivePollInterval property for the resource type "
        "associated with the resource."
        ),
        Units ("Milliseconds")
        ]
    uint32 LooksAlivePollInterval ;

    uint32 LoadBalAnalysisInterval ;
    uint32 LoadBalMinMemoryUnits;
    uint32 LoadBalMinProcessorUnits;
    uint32 LoadBalSampleInterval ;
    uint32 LoadBalStartupInterval;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "If a resource cannot be brought online or taken offline in "
        "the number of milliseconds specified by the PendingTimeout "
        "property, the resource is forcibly terminated."
        ) ]
    uint32 PendingTimeout ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The PersistentState property specifies whether the resource "
        "should be brought online or left offline when the Cluster "
        "Service is started."
        ) ]
    boolean PersistentState ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The RestartAction property describes the action to be taken "
        "by the Cluster Service if the resource fails."
        ),
        Values {
        "ClusterResourceDontRestart", "ClusterResourceRestartNoNotify",
        "ClusterResourceRestartNotify"
        } ]
    uint32 RestartAction ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The RestartPeriod property defines an interval of time, in "
        "milliseconds, during which a specified number of restart "
        "attempts can be made on a nonresponsive resource."
        ) ]
    uint32 RestartPeriod ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The RestartThreshold property specifies the maximum number "
        "of restart attempts that can be made on a resource within an "
        "interval defined by the RestartPeriod property before the "
        "Cluster Service initiates the action specified by the "
        "RestartAction property."
        ) ]
    uint32 RestartThreshold ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The RetryPeriodOnFailure property specifies the interval of "
        "time (in milliseconds) that a resource should remain in a "
        "failed state before the Cluster service attempts to restart it."
        ) ]
    uint32 RetryPeriodOnFailure ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The SeparateMonitor property indicates whether the resource "
        "requires its own Resource Monitor."
        ) ]
    boolean SeparateMonitor ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The Type property specifies the display name for the resource's "
        "type."
        ) ]
    string  Type ;

        [Read : ToSubClass ,
        Description ("The current state of the resource.")
        ]
    uint32 State ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    uint32 ResourceClass ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    uint32 Subclass ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "List of references to nodes that can be the owner of this resource."
        ) ]
    MSCluster_Node REF PossibleOwners[] ;

    MSCluster_Property PrivateProperties;

        [Read : ToSubClass ,
        Description (
        "List of crypto checkpoints for this resource."
        ) ]
    string CryptoCheckpoints[] ;
        [Read : ToSubClass ,
        Description (
        "List of registry checkpoints for this resource."
        ) ]
    string RegistryCheckpoints[] ;

        [Read : ToSubClass,
        Description("The resource can be selected as the quorum resource for the cluster") ]
    boolean QuorumCapable;

        [Read : ToSubClass,
        Description("The resource can be selected as the quorum resource "
                  "in clusters configured using the -localquorum switch.") ]
    boolean LocalQuorumCapable;
    
        [Read : ToSubClass,
        Description("The resource cannot be deleted unless all nodes are active.") ]
    boolean DeleteRequiresAllNodes;
    
        [Read : ToSubClass,
        Description("Indicates that the resource is essential to the cluster and cannot be deleted.") ]
    boolean CoreResource;

    //***********
    //* Methods *
    //***********

        [Implemented ,
        Static ,
        Description (" Create a new resource ") : ToSubClass
        ]
    void CreateResource(
                [IN, Description ("The group name to receive the resource.") ]
            MSCluster_ResourceGroup REF Group ,
                [IN, Description ("The name to assign to the resource.") ]
            string ResourceName ,
                [IN, Description ("The type of resource to create.") ]
            string ResourceType ,
                [IN,
                Description (
                "TRUE if the resource needs a separate resource monitor."
                ) ]
            boolean SeparateMonitor = FALSE
            ) ;

        [Implemented : ToSubClass ,
        Description (
        "Move the resource to a different group."
        ) : ToSubClass ]
    void MoveToNewGroup(
                [IN, Description ("The group name to receive the resource.") ]
            MSCluster_ResourceGroup REF Group
            ) ;

        [Implemented : ToSubClass ,
        Description (
        "Create a dependency relationship between two resources.") : ToSubClass
        ]
    void AddDependency(
                [IN, Description ("The resource that this resource should depend on.") ]
            MSCluster_Resource REF Resource
            ) ;

        [Implemented : ToSubClass ,
        Description (
        "Remove a dependency relationship between two resources."
        ) ]
    void RemoveDependency(
            [IN,
            Description (
            "The resource that this resource should no longer depend on."
            ) ]
        MSCluster_Resource REF Resource
        ) ;

        [Description ("Take the resource online") : ToSubClass ,
        Implemented : ToSubClass
        ]
    void BringOnline() ;

        [Description ("Take the resource offline") : ToSubClass ,
        Implemented : ToSubClass
        ]
    void TakeOffline() ;

        [Description ("Rename the resource.") : ToSubClass ,
        Implemented : ToSubClass
        ]
    void Rename( [IN] string newName ) ;

        [Description (
        "Force this resource to become unavailable to simulate failure. "
        "Used by applications to test their failover configurations."
        ) : ToSubClass ,
        Implemented : ToSubClass
        ]
    void FailResource() ;

        [Description ("Add a registry checkpoint to this resource."
        ) : ToSubClass ,
        Implemented : ToSubClass
        ]
    void AddRegistryCheckpoint( [IN] string CheckpointName ) ;

        [Description ("Add a registry checkpoint to this resource."
        ) : ToSubClass ,
        Implemented : ToSubClass
        ]
    void RemoveRegistryCheckpoint( [IN] string CheckpointName ) ;
        [Description ("Add an encrypted  checkpoint to this resource."
        ) : ToSubClass ,
        Implemented : ToSubClass
        ]
    void AddCryptoCheckpoint( [IN] string CheckpointName ) ;

        [Description ("Add an encrypted checkpoint to this resource."
        ) : ToSubClass ,
        Implemented : ToSubClass
        ]
    void RemoveCryptoCheckpoint( [IN] string CheckpointName ) ;


}; //*** class MSCluster_Resource

// ===================================================================
//    MSCluster_ResourceType
// ===================================================================
        [Dynamic ,
        Locale (0x409) ,
        Provider ("MS_CLUSTER_PROVIDER"),
        UUID ("{2F2EF49D-37DD-47c2-8328-6586142B8C99}")
        ]
class MSCluster_ResourceType : MSCluster_LogicalElement
{
        [Key ,
        Read : ToSubClass ,
        Description (
        "The Name property provides the name of the ResourceType."
        ) ]
    string Name ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The DisplayName property is a friendly name for the ResourceType"
        "presented in the UI."
        ) ]
    string DisplayName ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The Description property provides comments about the ResourceType."
        ) ]
    string Description ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The AdminExtensions property provides the class identifiers (CLSIDs) "
        "for the Cluster Administrator extension DLLs that are associated with "
        "the resource type."
        ) ]
    string AdminExtensions[] ;

        [Read : ToSubClass ,
        Description (
        "The DllName property provides the name of the dynamic-link library (DLL)"
        " for the resource type."
        ) ]
    string DllName ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The IsAlivePollInterval property provides the recommended interval in "
        "milliseconds at which the Cluster Service should poll the resource to "
        "determine if it is operational."
        ) ]
    uint32 IsAlivePollInterval ;

        [Read : ToSubClass ,
        Write : ToSubClass ,
        Description (
        "The LooksAlivePollInterval property provides the recommended interval "
        "in milliseconds at which the Cluster Service should poll the resource "
        "to determine if it appears operational."
        ) ]
    uint32 LooksAlivePollInterval ;

        [Read : ToSubClass,
        Description("The resource can be selected as the quorum resource for the cluster") ]
    boolean QuorumCapable;

        [Read : ToSubClass,
        Description("The resource can be selected as the quorum resource "
                  "in clusters configured using the -localquorum switch.") ]
    boolean LocalQuorumCapable;
    
        [Read : ToSubClass,
        Description("The resource cannot be deleted unless all nodes are active.") ]
    boolean DeleteRequiresAllNodes;    
    
}; //*** class MSCluster_ResourceType

// ===================================================================
//    MSCluster_NetworkInterface
// ===================================================================
        [Dynamic ,
        Locale (0x409) ,
        Provider ("MS_CLUSTER_PROVIDER"),
        UUID ("{3DE393F8-8FD5-4426-901D-8EE017003A61}")
        ]
class MSCluster_NetworkInterface : CIM_LogicalDevice
{
        [Read : ToSubClass ,
        Description (
        "The Name property provides the Clustering Service-generated "
        "name for the network interface."
        ) ]
    string Name ;

        [Read : ToSubClass , Write: ToSubClass, Description (
        "The Description property provides comments about the network "
        "interface."
        ) ]
    string Description ;

        [Read : ToSubClass ,
        Description (
        "The Adapter property provides the name that is used to uniquely "
        "identify the network interface in the cluster."
        ) ]
    string Adapter ;

        [Read : ToSubClass ,
        Description (
        "The Address property provides the primary network address that "
        "the node uses for the network interface."
        ) ]
    string Address ;

        [Read : ToSubClass ,
        Description (
        "The Network property provides the name of the network to which "
        "the networkinterface is connected."
        ) ]
    string Network ;

        [Read : ToSubClass ,
        Description ("The current state of the network interface")
        ]
    uint32 State ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    uint32 Flags ;

        [Read : ToSubClass ,
        Write : ToSubClass
        ]
    uint32 Characteristics ;

}; //*** class MSCluster_NetworkInterface

// ===================================================================
//    MSCluster_ClusterToGroup
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER"),
        Locale (0x409) ,
        UUID ("{191A06A0-4B96-4914-ABD6-6F7E5F73A191}")
        ]
class MSCluster_ClusterToGroup : CIM_Component
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The cluster.") : ToSubClass
        ]
    MSCluster_Cluster REF GroupComponent ;

        [Override ("PartComponent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The group managed by cluster.") : ToSubClass
        ]
    MSCluster_ResourceGroup REF PartComponent ;

}; //*** class MSCluster_ClusterToGroup

// ===================================================================
//    MSCluster_ClusterToResource
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER") ,
        Description ("Cluster consists of resources." ) : ToSubClass ,
        Locale (0x409) ,
        UUID ("{89AC25D0-9706-481e-98E0-7DCD7AD8BDD4}")
        ]
class MSCluster_ClusterToResource : CIM_Component
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The cluster." ) : ToSubClass
        ]
    MSCluster_Cluster REF GroupComponent ;

        [Override ("PartComponent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The resource managed by the cluster.") : ToSubClass
        ]
    MSCluster_Resource REF PartComponent ;

}; //*** class MSCluster_ClusterToResource

// ===================================================================
//    MSCluster_ClusterToResourceType
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER") ,
        Description (
        "Type of resource that supported by the cluster."
        ) : ToSubClass ,
        Locale (0x409) ,
        UUID ("{1059D8CA-76CF-46dc-A14B-B7BB546270AD}")
        ]
class MSCluster_ClusterToResourceType : CIM_Component
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The cluster." ) : ToSubClass
        ]
    MSCluster_Cluster REF GroupComponent ;

        [Override ("PartComponent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The resourceType supported by cluster.") : ToSubClass
        ]
    MSCluster_ResourceType REF PartComponent ;

}; //*** class MSCluster_ClusterToResourceType

// ===================================================================
//    MSCluster_ClusterToNetworks
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER") ,
        Description ("Cluster uses networks for communication." ) : ToSubClass ,
        Locale (0x409) ,
        UUID ("{F3CAB1DD-2F7D-484b-AD54-54187C0A8351}")
        ]
class MSCluster_ClusterToNetworks : CIM_Component
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The cluster." ) : ToSubClass
        ]
    MSCluster_Cluster REF GroupComponent ;

        [Override ("PartComponent"): ToSubClass ,
        Read : ToSubClass ,
        Description ("The networks used cluster for communication.") : ToSubClass
        ]
    MSCluster_Networks REF PartComponent ;

}; //*** class MSCluster_ClusterToNetworks

// ===================================================================
//    MSCluster_ClusterToNetworkInterface
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER") ,
        Description (
        "Cluster has many network interfaces installed on nodes it manages."
        ) : ToSubClass ,
        Locale (0x409) ,
        UUID ("{CB737284-A6D8-4d46-92F0-20992869A84E}")
        ]
class MSCluster_ClusterToNetworkInterface : CIM_Component
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The cluster.") : ToSubClass
        ]
    MSCluster_Cluster REF GroupComponent ;

        [Override ("PartComponent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The networks interfaces.") : ToSubClass
        ]
    MSCluster_NetworkInterface REF PartComponent ;

}; //*** class MSCluster_ClusterToNetworkInterface

// ===================================================================
//    MSCluster_NetworkToNetworksInterface
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER") ,
        Description (
        "Network interfaces connected to a network."
        ) : ToSubClass ,
        Locale (0x409) ,
        UUID ("{099B1BE4-D4BD-4b56-9815-AA90234B03C6}")
        ]
class MSCluster_NetworkToNetworksInterface : CIM_Component
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The network.") : ToSubClass
        ]
    MSCluster_Networks REF GroupComponent ;

        [Override ("PartComponent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The networks interfaces.") : ToSubClass
        ]
    MSCluster_NetworkInterface REF PartComponent ;

}; //*** class MSCluster_NetworkToNetworksInterface

// ===================================================================
//    MSCluster_NodeActiveGroup
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER") ,
        Description ("Groups active on a node.") : ToSubClass ,
        Locale (0x409) ,
        UUID ("{AE76778B-B9C4-4765-9E61-7A3DC17F919C}")
        ]
class MSCluster_NodeActiveGroup : CIM_Component
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Description ("The node.") : ToSubClass
        ]
    MSCluster_Node REF GroupComponent ;

        [Override ("PartComponent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The group that is active on the node.") : ToSubClass
        ]
    MSCluster_ResourceGroup REF PartComponent ;

}; //*** class MSCluster_NodeActiveGroup

// ===================================================================
//    MSCluster_NodeActiveResource
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER") ,
        Description ("Resources active on a node.") : ToSubClass ,
        Locale (0x409) ,
        UUID ("{4D440386-1CC3-4dca-AFB2-DB74A60A3891}")
        ]
class MSCluster_NodeActiveResource : CIM_Component
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The node.") : ToSubClass
        ]
    MSCluster_Node REF GroupComponent ;

        [Override ("PartComponent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The resource that is active on the node.") : ToSubClass
        ]
    MSCluster_Resource REF PartComponent ;

}; //*** class MSCluster_NodeActiveResource

// ===================================================================
//    MSCluster_NodeToNetworkInterface
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER") ,
        Description ("Network interfaces connected to a node.") : ToSubClass ,
        Locale (0x409) ,
        UUID ("{82459303-B1E9-4ddf-970F-25B17AD2A01B}")
        ]
class MSCluster_NodeToNetworkInterface : CIM_SystemDevice
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The node.") : ToSubClass
        ]
    MSCluster_Node REF GroupComponent ;

        [Override ("PartComponent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The group that is active on the node.") : ToSubClass
        ]
    MSCluster_NetworkInterface REF PartComponent ;

}; //*** class MSCluster_NodeToNetworkInterface

// ===================================================================
//    MSCluster_ResourceGroupToResource
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER") ,
        Description ("Resources in a group.") : ToSubClass ,
        Locale (0x409) ,
        UUID ("{38DD5882-2610-4ba1-B24E-1CD955B7A6BF}")
        ]
class MSCluster_ResourceGroupToResource : CIM_Component
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The group.") : ToSubClass
        ]
   MSCluster_ResourceGroup REF GroupComponent ;

        [Override ("PartComponent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The resources within the group.") : ToSubClass
        ]
    MSCluster_Resource REF PartComponent ;

}; //*** class MSCluster_ResourceGroupToResource

// ===================================================================
//    MSCluster_ResourceResourceType
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER") ,
        Description ("Resources of a particular type.") : ToSubClass ,
        Locale (0x409) ,
        UUID ("{94F4F3DB-C193-42f1-B6AE-1C74817CD894}")
        ]
class MSCluster_ResourceResourceType : CIM_Component
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The resource.") : ToSubClass
        ]
    MSCluster_Resource REF GroupComponent ;

        [Override ("PartComponent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The resource type.") : ToSubClass
        ]
    MSCluster_ResourceType REF PartComponent ;

}; //*** class MSCluster_ResourceResourceType

// ===================================================================
//    MSCluster_ClusterToQuorumResource
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER") ,
        Description ("A cluster has a quorum resource.") : ToSubClass ,
        Locale (0x409) ,
        UUID ("{FF92D220-3079-44d9-A32B-BEB000E05F77}")
        ]
class MSCluster_ClusterToQuorumResource : CIM_Component
{
        [Override ("GroupComponent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The cluster.") : ToSubClass
        ]
    MSCluster_Cluster REF GroupComponent ;
        [Override ("PartComponent") : ToSubClass,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The quorum resource.") : ToSubClass
        ]
    MSCluster_Resource REF PartComponent ;

}; //*** class MSCluster_ClusterToQuorumResource

// ===================================================================
//    MSCluster_ResourceDepResource
// ===================================================================
        [Dynamic , Provider ("MS_CLUSTER_PROVIDER") ,
        Description ("Dependencies of a resource.") : ToSubClass ,
        Locale (0x409) ,
        UUID ("{C09C3AB9-E97C-46d8-921F-4B3EA2A7C457}")
        ]
class MSCluster_ResourceDepResource : CIM_Dependency
{
        [Override ("Antecedent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The Resouce.") : ToSubClass
        ]
    MSCluster_Resource REF Antecedent ;

        [Override ("Dependent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The resource to be depended on.") : ToSubClass
        ]
    MSCluster_Resource REF Dependent ;

}; //*** class MSCluster_ResourceDepResource

// ===================================================================
//    MSCluster_ClusterToNode
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER"),
        Locale (0x409) ,
        UUID ("{1DA51F43-8562-4093-9C3A-D9CBB35CF6D2}")
        ]
class MSCluster_ClusterToNode : CIM_ParticipatingCS
{
        [Override ("Antecedent") : ToSubClass ,
        Read : ToSubClass ,
        Min (1) : ToSubClass ,
        Max (1) : ToSubClass ,
        Description ("The cluster." ) : ToSubClass
        ]
    MSCluster_Cluster REF Antecedent ;

        [Override ("Dependent"): ToSubClass ,
        Read : ToSubClass ,
        Description ("Node managed by cluster.") : ToSubClass
        ]
    MSCluster_Node REF Dependent ;

}; //*** class MSCluster_ClusterToNode

// ===================================================================
//    MSCluster_HostedService
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER"),
        Locale (0x409) ,
        UUID ("{B3C77CEF-67E7-4112-A757-CB072D44EBA3}")
        ]
class MSCluster_HostedService : CIM_HostedService
{
        [Override ("Antecedent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The node hosting the service.") : ToSubClass
        ]
    MSCluster_Node REF Antecedent ;

        [Override ("Dependent") : ToSubClass ,
        Read : ToSubClass ,
        Description ("The hosted service.") : ToSubClass
        ]
    MSCluster_Service REF Dependent ;

}; //*** class MSCluster_HostedService

// ===================================================================
//    MSCluster_Event
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER"),
        Locale (0x409) ,
        UUID ("{01D7A9DE-B876-4bb6-ABDB-26B67C52D221}")
        ]
class MSCluster_Event : __ExtrinsicEvent
{
        [Description (
        "Major event category. Reserved for future use."
        ) : ToInstance ToSubClass
        ]
    uint32 EventTypeMajor ;

        [Description ("Subtype within major category.  For EventTypeMajor=0, "
        "This contains the Cluster Event mask value as returned by "
        "GetClusterNotify."
        ) : ToInstance ToSubClass
        ]
    uint32 EventTypeMinor ;

        [Description (
        "Name of object to which this event applies."
        ) : ToInstance ToSubClass
        ]
    string EventObjectName ;

        [Description (
        "Type of object to which this event applies."
        ) : ToInstance ToSubClass
        ]
    uint32 EventObjectType ;

        [Description(
        "WMI Path of object to which this event applies."
        ) : ToInstance ToSubClass
        ]
    string EventObjectPath ;

}; //*** class MSCluster_Event

// ===================================================================
//    MSCluster_EventObjectAdd
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER"),
        Locale (0x409) ,
        UUID ("{EDECEF0B-A3C7-4edd-BD75-1CF37F5547B8}")
        ]
class MSCluster_EventObjectAdd : MSCluster_Event
{
        [Description (
        "RESERVED FOR FUTURE USE: XML-encoded property names and values "
        "for added or changed properties"
        ) : ToInstance ToSubClass
        ]
    string EventProperty ;

}; //*** class MSCluster_EventObjectAdd

// ===================================================================
//    MSCluster_EventObjectRemove
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER"),
        Locale (0x409) ,
        UUID ("{F12EA54A-75FE-43c9-ACE4-5745D1CA0552}")
        ]
class MSCluster_EventObjectRemove : MSCluster_Event
{
}; //*** class MSCluster_EventObjectRemove

// ===================================================================
//    MSCluster_EventPropertyChange
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER"),
        Locale (0x409) ,
        UUID ("{4CB6135C-E55D-46fe-8AE4-51E24AF901BD}")
        ]
class MSCluster_EventPropertyChange : MSCluster_Event
{
        [Description (
        "RESERVED FOR FUTURE USE: XML-encoded property names and values "
        "for added or changed properties"
        ) : ToInstance ToSubClass
        ]
    string EventProperty ;

}; //*** class MSCluster_EventPropertyChange

// ===================================================================
//    MSCluster_EventStateChange
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER"),
        Locale (0x409) ,
        UUID ("{F68489E2-0301-4594-B25D-613637ECBA1A}")
        ]
class MSCluster_EventStateChange : MSCluster_Event
{
        [Description (
        "Current state of object reporting this state change. "
         "The value returned is one of the state constants for the "
         "cluster object identified by EventObjectType, found in "
         "clusapi.h as returned by the relevant GetClusterXXXState "
         "APIs."
         ) ]
    uint32 EventNewState ;

}; //*** class MSCluster_EventStateChange

// ===================================================================
//    MSCluster_EventGroupStateChange
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER"),
        Locale (0x409) ,
        UUID ("{D264369A-3133-45eb-AE1D-65B1B641AEAF}")
        ]
class MSCluster_EventGroupStateChange : MSCluster_EventStateChange
{
        [Description ("Current node hosting this group") ]
    string EventNode ;

}; //*** class MSCluster_EventGroupStateChange

// ===================================================================
//    MSCluster_EventResourceStateChange
// ===================================================================
        [Dynamic ,
        Provider ("MS_CLUSTER_PROVIDER"),
        Locale (0x409) ,
        UUID ("{F1163D38-0E12-49ed-B0AF-09C683F89243}")
        ]
class MSCluster_EventResourceStateChange : MSCluster_EventStateChange
{
        [Description ("Current node hosting this resource") ]
    string EventNode ;

        [Description ("Current group containing this resource") ]
    string EventGroup ;

}; //*** class MSCluster_EventResourceStateChange

instance of __InstanceProviderRegistration
{
    Provider = $InstanceProv ;
    SupportsGet = "TRUE" ;
    SupportsPut = "TRUE" ;
    SupportsDelete = "TRUE" ;
    SupportsEnumeration = "TRUE" ;
    QuerySupportLevels = NULL ;
};

instance of __MethodProviderRegistration
{
    Provider = $InstanceProv ;
};

instance of __EventProviderRegistration
{
    Provider = $EventProv ;

    EventQueryList = { "select * from MSCluster_Event" } ;
};

instance of __ClassProviderRegistration
{
    Provider = $ClassProv ;
    InteractionType = 1 ;           // Provider is a push provider
    SupportsGet = "TRUE" ;
    SupportsEnumeration = "TRUE" ;
    ResultSetQueries = { "select * from MSCluster_Resource" } ;
};

