// Copyright (c) 1997-2003 Microsoft Corporation, All Rights Reserved

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

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

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

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

Instance of __Win32Provider as $PolicStatus
{
  Name = "PolicStatus";
  ClsId = "{69D76D1B-B12E-4913-8F48-671B90195A2B}";
  ImpersonationLevel = 1;
  PerUserInitialization = "FALSE";
  HostingModel = "NetworkServiceHost";
};

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

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

Instance of __MethodProviderRegistration
{
  Provider = $PolicSOM;
};

[Abstract,Locale(1033) : ToInstance,UUID("{D157AAFD-D42F-45cd-B30B-F67CF152C9F9}")] 
class MSFT_Rule
{
  [NOT_NULL,write] string QueryLanguage;
  [NOT_NULL,write] string TargetNameSpace;
  [NOT_NULL,write] string Query;
};

[Dynamic,Provider("PolicSOM"),Locale(1033) : ToInstance,UUID("{AE7B614F-AFE0-41ea-807E-3BD3F83CAF66}")] 
class MSFT_SomFilter
{
  [key,write,MaxLen(38)] string ID;
  [key,write] String Domain;
  [write, NOT_NULL] string Name;
  [write] String Description;
  [write,NOT_NULL] MSFT_Rule Rules[];
  [Implemented, bypass_getobject] Uint32 Evaluate();
  [Implemented,Static] Uint32 BatchEvaluate([IN] MSFT_SomFilter Ref filters[],[OUT] Uint32 results[]);
  [write] String Author;
  [write] String SourceOrganization;
  [write] DateTime ChangeDate;
  [write] DateTime CreationDate;
};

[Dynamic, Provider("PolicStatus"), Locale(1033)]
class MSFT_SomFilterStatus
{
  [key,read] String Domain;
  [read]     Boolean SchemaAvailable;
  [read]     Boolean ContainerAvailable;
};

class SomFilterPutStatus : __ExtendedStatus 
{
  [read] Uint32 RuleValidationResults[];
};

#pragma DeleteInstance("__Namespace.Name='History'", NOFAIL)

#pragma DeleteInstance("__Win32Provider.Name=\"PolicGpo\"", NOFAIL)
#pragma DeleteInstance("__InstanceProviderRegistration.provider=\"\\\\\\\\.\\\\Root\\\\Policy:__Win32Provider.Name=\\\"PolicTempl\\\"\"", NOFAIL)

#pragma DeleteInstance("__Win32Provider.Name=\"PolicRange\"", NOFAIL)
#pragma DeleteInstance("__MethodProviderRegistration.provider=\"\\\\\\\\.\\\\Root\\\\Policy:__Win32Provider.Name=\\\"PolicRange\\\"\"", NOFAIL)

#pragma DeleteInstance("__Win32Provider.Name=\"PolicTempl\"", NOFAIL)
#pragma DeleteInstance("__MethodProviderRegistration.provider=\"\\\\\\\\.\\\\Root\\\\Policy:__Win32Provider.Name=\\\"PolicTempl\\\"\"", NOFAIL)
#pragma DeleteInstance("__InstanceProviderRegistration.provider=\"\\\\\\\\.\\\\Root\\\\Policy:__Win32Provider.Name=\\\"PoliceTempl\\\"\"", NOFAIL)

#pragma DeleteInstance("__Win32Provider.Name=\"PolicType\"", NOFAIL)
#pragma DeleteInstance("__MethodProviderRegistration.provider=\"\\\\\\\\.\\\\Root\\\\Policy:__Win32Provider.Name=\\\"PolicType\\\"\"", NOFAIL)
#pragma DeleteInstance("__InstanceProviderRegistration.provider=\"\\\\\\\\.\\\\Root\\\\Policy:__Win32Provider.Name=\\\"PolicType\\\"\"", NOFAIL)


#pragma DeleteClass("MSFT_RangeParam", NOFAIL)
#pragma DeleteClass("MSFT_PolicyTemplate", NOFAIL)
#pragma DeleteClass("MSFT_PolicyType", NOFAIL)
#pragma DeleteClass("MSFT_WMIGPO", NOFAIL)
#pragma autorecover
#pragma classflags(64)
#pragma namespace("\\\\.\\Root\\Policy")
instance of __namespace{ name="ms_409";};
#pragma namespace("\\\\.\\Root\\Policy\\ms_409")

[Description("Defines a single rule in a SOM, expressed as a query") : Amended ToSubclass,AMENDMENT, LOCALE(0x409)] 
class MSFT_Rule
{
  [Description("Language in which query is expressed") : Amended ToSubclass] string QueryLanguage;
  [Description("Namespace in which to evaluate query") : Amended ToSubclass] string TargetNameSpace;
  [Description("Query of interest") : Amended ToSubclass] string Query;
};

[Description("Provides a list of rules, expressed as queries which are evaluated on target machine") : Amended ToSubclass,AMENDMENT, LOCALE(0x409)] 
class MSFT_SomFilter
{
  [key,Description("Unique identifier for this instance, expected to be a GUID in registry format") : Amended ToSubclass] string ID;
  [key,Description("Domain of this object, in DNS format: \"redmond.corp.microsoft.com\"") : Amended ToSubclass] String Domain;
  [Description("A user-friendly name for this SOM Filter") : Amended ToSubclass] string Name;
  [Description("Descriptive text describing this SOM Filter") : Amended ToSubclass] String Description;
  [Description("Rules to be evaluated") : Amended ToSubclass] MSFT_Rule Rules[];
  [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.") : Amended ToSubclass] Uint32 Evaluate();
  [Description("Evaluates a list of SOMs, returns array result codes matching result of evaluating each") : Amended ToSubclass] Uint32 BatchEvaluate([IN] MSFT_SomFilter Ref filters[],[OUT] Uint32 results[]);
  [Description("Originator of this SOMFilter") : Amended ToSubclass] String Author;
  [Description("Author's organization") : Amended ToSubclass] String SourceOrganization;
  [Description("Last time this object was updated") : Amended ToSubclass] DateTime ChangeDate;
  [Description("Time that this object was created") : Amended ToSubclass] DateTime CreationDate;
};

#pragma DeleteClass("MSFT_RangeParam", NOFAIL)
#pragma DeleteClass("MSFT_PolicyTemplate", NOFAIL)
#pragma DeleteClass("MSFT_PolicyType", NOFAIL)
#pragma DeleteClass("MSFT_WMIGPO", NOFAIL)