// classes for WMI extensions to Group Policy

#pragma autorecover
#pragma namespace("\\\\.\\Root")
#pragma classflags ("forceupdate")

Qualifier Description : ToSubClass Amended;

Instance of __Namespace
{
    Name = "Policy";
};

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

Instance of __Namespace
{
    Name = "History";
};


Instance of __Win32Provider as $PolicRange
{
    Name = "PolicRange";
    ClsId = "{AAEAE72C-0328-4763-8ECB-23422EDE2DB5}";
    ImpersonationLevel = 1;
    PerUserInitialization = "FALSE";
    HostingModel = "WmiCore";
};

Instance of __MethodProviderRegistration
{
    Provider = $PolicRange;
};

Instance of __Win32Provider as $PolicTempl
{
    Name = "PolicTempl";
    ClsId = "{AAEAE72D-0328-4763-8ECB-23422EDE2DB5}";
    ImpersonationLevel = 1;
    PerUserInitialization = "FALSE";
    HostingModel = "WmiCore";
};

Instance of __InstanceProviderRegistration
{
    Provider = $PolicTempl;
    SupportsGet = "TRUE";
    SupportsPut = "TRUE";
    SupportsDelete = "TRUE";
	QuerySupportLevels = {"WQL:UnarySelect"};
};

Instance of __MethodProviderRegistration
{
    Provider = $PolicTempl;
};

Instance of __Win32Provider as $PolicSOM
{
    Name = "PolicSOM";
    ClsId = "{AAEAE72F-0328-4763-8ECB-23422EDE2DB5}";
    ImpersonationLevel = 1;
    PerUserInitialization = "FALSE";
    HostingModel = "WmiCore";
};

Instance of __InstanceProviderRegistration
{
    Provider = $PolicSOM;
    SupportsGet = "TRUE";
    SupportsPut = "TRUE";
    SupportsDelete = "TRUE";
	QuerySupportLevels = {"WQL:UnarySelect"};
};

Instance of __MethodProviderRegistration
{
    Provider = $PolicSOM;
};

Instance of __Win32Provider as $PolicType
{
    Name = "PolicType";
    ClsId = "{AAEAE72E-0328-4763-8ECB-23422EDE2DB5}";
    ImpersonationLevel = 1;
    PerUserInitialization = "FALSE";
    HostingModel = "WmiCore";
};

Instance of __InstanceProviderRegistration
{
    Provider = $PolicType;
    SupportsGet = "TRUE";
    SupportsPut = "TRUE";
    SupportsDelete = "TRUE";
	QuerySupportLevels = {"WQL:UnarySelect"};
};

Instance of __MethodProviderRegistration
{
    Provider = $PolicType;
};

Instance of __Win32Provider as $PolicGpo
{
    Name = "PolicGpo";
    ClsId = "{AAEAE72B-0328-4763-8ECB-23422EDE2DB5}";
    ImpersonationLevel = 1;
    PerUserInitialization = "FALSE";
    HostingModel = "WmiCore";
};

Instance of __InstanceProviderRegistration
{
    Provider = $PolicGpo;
    SupportsGet = "TRUE";
    SupportsPut = "TRUE";
    SupportsDelete = "TRUE";
};

[Abstract, Locale(1033) : ToInstance, UUID("{63E29F85-6AF4-492e-A605-90E590F3FBA7}"),
Description("range param class is the basis of the PolicyTemplate "
            "it describes one mergeable property of the target instance"), Provider("PolicRange")]
class MSFT_RangeParam
{
    [write, NOT_NULL, Description("Name of property to be created")] 
    string PropertyName;

    [write, Description("CIM Type of property, if Cim_Object then TargetClass gives user defined class")]
    uint8  TargetType; 
 
    [write, Description("If TargetType is Cim_Object, then this contains class name")]
    string TargetClass;

    [Implemented, Static, Description("merges ranges into a single object")]
    sint32 Merge ([in] MSFT_RangeParam ranges[], [out] MSFT_RangeParam mergedRange, [out] sint32 conflict);
  
    [Implemented, Static, Description("Places property into the object being created by the PolicyTemplate")]
    sint32 Resolve ([in] MSFT_RangeParam mergedRange, [in, out] object obj);
};

[Abstract, Locale(1033) : ToInstance, UUID("{36E79DE7-9CEA-4cb7-9F65-12A95B6280EC}"),
Description("Defines a default and acceptable range for a signed integer property")]
class MSFT_SintRangeParam : MSFT_RangeParam
{
    [write, Description("Desired value for the corresponding target instance property")] 
    sint32 Default;
  
    [write, Description("Smallest allowable value for the corresponding target instance property")] 
    sint32 Min;
    
    [write, Description("Largest allowable value for the corresponding target instance property")] 
    sint32 Max;
};

[Abstract, Locale(1033) : ToInstance, UUID("{DB3F40A1-F91D-4de4-BDCE-C6F315A867DF}"),
Description("Defines a default and acceptable range for an unsigned integer property")]
class MSFT_UintRangeParam : MSFT_RangeParam
{
    [write, Description("Desired value for the corresponding target instance property")] 
    uint32 Default;
  
    [write, Description("Smallest allowable value for the corresponding target instance property")] 
    uint32 Min;

    [write, Description("Largest allowable value for the corresponding target instance property")] 
    uint32 Max;
};

[Abstract, Locale(1033) : ToInstance, UUID("{5D73662C-698B-4b1f-9B0A-7F8948EC2155}"),
Description("Defines a default and acceptable range for a real number property")]
class MSFT_RealRangeParam : MSFT_RangeParam
{
    [write, Description("Desired value for the corresponding target instance property")] 
    Real64 Default;
  
    [write, Description("Smallest allowable value for the corresponding target instance property")] 
    Real64 Min;
    
    [write, Description("Largest allowable value for the corresponding target instance property")] 
    Real64 Max;
};

[Abstract, Locale(1033) : ToInstance, UUID("{DF926AD7-A988-4012-B52E-9E90DB5D8760}"),
Description("Defines a default and list of valid values for a signed integer property")]
class MSFT_SintSetParam : MSFT_RangeParam 
{
    [write, Description("Desired value for the corresponding target instance property")] 
    sint32 Default;
  
    [write, Description("List of allowable values for the corresponding target instance property")] 
    sint32 ValidValues[];
};

[Abstract, Locale(1033) : ToInstance, UUID("{F7655F46-3379-484c-8171-E3324E2F3A13}"),
Description("Defines a default and list of valid values for an unsigned integer property")]
class MSFT_UintSetParam : MSFT_RangeParam
{
    [write, Description("Desired value for the corresponding target instance property")] 
    uint32 Default;
  
    [write, Description("List of allowable values for the corresponding target instance property")] 
    uint32 ValidValues[];
};

[Abstract, Locale(1033) : ToInstance, UUID("{CC1EA62B-F2EC-4243-B217-78480D1D76C7}"),
Description("Defines a default and list of valid values for a string property")]
class MSFT_StringSetParam : MSFT_RangeParam
{
    [write, Description("Desired value for the corresponding target instance property")] 
    string Default;
  
    [write, Description("List of allowable values for the corresponding target instance property")] 
    string ValidValues[];
};

[Abstract, Locale(1033) : ToInstance, UUID("{4520D53D-3E9B-4492-AA92-9C70FC869A1E}"),
Description("Policy template provides a 'recipe' for creating a class instance")]
class MSFT_PolicyTemplate
{
    [key, write, MaxLen(38), Description("Unique identifier for this instance, expected to be a GUID in registry format")] 
    string ID;

    [key, write, Description("Domain of this object, in DNS format: \"redmond.corp.microsoft.com\"")]
    String Domain;

    [write, Description("Descriptive text describing this Policy Template")]
    String Description;

    [write, Description("PolicyType which defines the schema for the target instance, may be NULL"
                        " in which case, the class definition is assumed to be present on the target machine.")]
    MSFT_PolicyType REF TargetType;

    [write, Description("A user-friendly name for this template")]
    string Name;

    [write, NOT_NULL, Description("Namespace in which Target Object is to be created")] 
    string TargetNamespace;
  
    [write, Description("Class name of the policy object to be created")] 
    string TargetClass;

    [write, Description("Denotes the class instance to be created on the target machine "
                         "if class is singleton, then TargetPath is the class name "
                         "if class has keys, then TargetPath is relative object path "
                         )] 
    string TargetPath;

    [write, Description("Originator of this PolicyTemplate")]
    String Author;

    [write, Description("Author's organinzation")]
    String SourceOrganization;

    [write, Description("Last time this object was updated")]
    DateTime ChangeDate;

    [write, Description("Time that this object was created")]
    DateTime CreationDate;
};

[Dynamic,Provider("PolicTempl"), Locale(1033) : ToInstance, UUID("{6CD2FC3F-EEE7-48e9-AC55-8827496E2389}"),
Description("used in cases where the target object is not intended to be combined")]
class MSFT_SimplePolicyTemplate : MSFT_PolicyTemplate
{
    [Description("The single object to be created as a result of applying this policy")]
    object TargetObject;
};

[Dynamic,Provider("PolicTempl"), Locale(1033) : ToInstance, UUID("{F9E466F8-CFCC-4fa2-B4DE-8338F85C9CC1}"),
Description("Provides a policy template that can be merged with other templates")]
class MSFT_MergeablePolicyTemplate : MSFT_PolicyTemplate
{
    [write, Description("Settings which describe the desired property values "
                        "for the target instance.")] 
    MSFT_RangeParam RangeSettings[];

    [Implemented, Static, Description("Merges all like objects into one showing merged output "
                                      "if merge is successful, then resultant object is returned in obj")]
    Sint32 Merge([IN] MSFT_PolicyTemplate templateList[], [OUT] MSFT_PolicyTemplate mergedTemplate);

    [Implemented, Static, Description("Resolves a single merged object into target class instance")]
    Sint32 Resolve([IN] MSFT_PolicyTemplate template, [OUT] Object obj);
  
    [Implemented, Static, Description("Initializes template with values from base")]
    Sint32 Set([IN] Object base, [OUT] MSFT_PolicyTemplate PolicyObj);
  
    [Implemented, Static, Description("Sets a single range in RangeSettings")]
    Sint32 SetRange([IN, OUT] MSFT_PolicyTemplate PolicyObj, [IN] MSFT_RangeParam rangeSetting);  
};

[Abstract, Locale(1033) : ToInstance, UUID("{D157AAFD-D42F-45cd-B30B-F67CF152C9F9}"),
Description("Defines a single rule in a SOM, expressed as a query")]
class MSFT_Rule
{
	  [NOT_NULL, write, Description("Language in which query is expressed")]
      string QueryLanguage;
      
      [NOT_NULL, write, Description("Namespace in which to evaluate query")] 
	  string TargetNameSpace;
  
	  [NOT_NULL, write, Description("Query of interest")]
	  string Query;
};

[Dynamic,Provider("PolicSOM"), Locale(1033) : ToInstance, UUID("{AE7B614F-AFE0-41ea-807E-3BD3F83CAF66}"),
Description("Provides a list of rules, expressed as queries "
            "which are evaluated on target machine")]
class MSFT_SomFilter
{
    [key, write, MaxLen(38), Description("Unique identifier for this instance, expected to be a GUID in registry format")] 
    string ID; 

    [key, write, Description("Domain of this object, in DNS format: \"redmond.corp.microsoft.com\"")]
    String Domain;

    [write, Description("A user-friendly name for this Som Filter")]
    string Name;
    
    [write, Description("Descriptive text describing this Som Filter")]
    String Description;

    [write, NOT_NULL, Description("Rules to be evaluated")] 
    MSFT_Rule Rules[];
  

    [Implemented, Description("Determines whether the queries expressed in Rules apply to this machine. "
                              "Returns S_OK (0) if all queries expressed in rules return results; "
                              "S_FALSE (1) if they do not; and an applicable WMI error code if an error occurs.")]
    Uint32 Evaluate();

    [Implemented, Static, Description("evaluates a list of SOMs, returns array result codes matching result of evaluating each")]
    Uint32 BatchEvaluate([IN] MSFT_SomFilter REF filters[], [OUT]Uint32 results[]);

    [write, Description("Originator of this SomFilter")]
    String Author;

    [write, Description("Author's organinzation")]
    String SourceOrganization;

    [write, Description("Last time this object was updated")]
    DateTime ChangeDate;

    [write, Description("Time that this object was created")]
    DateTime CreationDate;

};

[Dynamic,Provider("PolicType"), Locale(1033) : ToInstance, UUID("{61FBBE9B-1016-4004-9ACC-0174F5EA4E80}"),
Description("Communicate schema for policy objects")]
class MSFT_PolicyType
{   
    [key, write, MaxLen(38), Description("Unique identifier for this instance, expected to be a GUID in registry format")]
    string ID;

    [key, write, Description("Domain of this object, in DNS format: \"redmond.corp.microsoft.com\"")]
    String Domain;

    [write, Description("Descriptive text describing this Policy Type")]
    String Description;

    [write, NOT_NULL, Description("Defines class used by PolicyTemplate")]
    Object ClassDefinition;    

    [write, Description("Any additional class instances needed to define a policy "
                         "These will be TemplateBuilders in the case of a CorrelatorTemplate")]
    Object InstanceDefinitions[];

    [write, Description("Originator of this PolicyType")]
    String Author;

    [write, Description("Author's organinzation")]
    String SourceOrganization;

    [write, Description("Last time this object was updated")]
    DateTime ChangeDate;

    [write, Description("Time that this object was created")]
    DateTime CreationDate;
};

[Dynamic,Provider("PolicGPO"), Locale(1033) : ToInstance, UUID("{074A24E3-F15C-43dc-A494-865428C58FB7}"),
Description("Specifies the policy template to be delivered to the target machine"
            "written to container specified by DsPath property")]
class MSFT_WMIGPO
{
    [key, write, Description("Complete path of the container in which this WMIGPO resides, in LDAP format")]
    String DsPath;

    [write, NOT_NULL, Description("references to the associated PolicyTemplates")]
    MSFT_PolicyTemplate REF PolicyTemplate[];

    [read, Description("Domain of this object, in DNS format: \"redmond.corp.microsoft.com\"")]
    String Domain;
};


#pragma namespace("\\\\.\\Root\\Policy\\History")

// this schema is nearly a duplicate of the RSOP schema
// without the RSOP base classes


[Locale(1033) : ToInstance, UUID("{2B159066-C652-474f-A49C-2482FB3F8517}"),
Description("Corresponds to the MSFT_WMIGPO class")]
class MSFT_WMIGPOPolicySetting
{
    [key, Description("a unique identifier for instances of this class")]
    string ID;

    [write, Description("templates delivered as part of this GPO")]
    RSOP_AppliedPolicyTemplate REF templates[];
};

[Locale(1033) : ToInstance, UUID("{D044BDC4-37A7-43a1-9338-1F1D06577D9F}"),
Description("wrapper to encapsulate MSFT_PolicyTemplate")]
class MSFT_AppliedPolicyTemplate
{
    [write, key, Description("relpath of the template")]
    string templatePath;
    
    [write, Description("template delivered")]
    MSFT_PolicyTemplate template;
};

[Locale(1033) : ToInstance, UUID("{8BE067B0-B388-4bb1-8A1C-A4AF2E70AA0B}"),
Description("wrapper to encapsulate MSFT_PolicyType")]
class MSFT_AppliedPolicyType
{
    [write, key, Description("relpath of the type")]
    string typePath;

    [write, Description("Type object delivered")]
    MSFT_PolicyType type;
};

[Locale(1033) : ToInstance, UUID("{AD34AA24-64A0-4398-B0CF-887BD66F7D10}"),
Description("object that is created by WMI Policy engine")]
class MSFT_WmiTargetObject
{
    [key, write, Description("object is identified by path of target object")]
    string targetPath;
    
    [write, Description("templates that participated to create this target object")]
    RSOP_AppliedPolicyTemplate REF templates[];

    [write, Description("type object associated with these templates")]
    RSOP_AppliedPolicyType REF type;

    [write, Description("resultant of merging the templates")]
    MSFT_PolicyTemplate MergedTemplate;

    [write, Description("object created by resolving the merged template")]
    Object TargetInstance;
};


