2.2.1.22 Targeting

Targeting criteria can be added to any element and allow a granular selection beyond the user or computer. For each element that has targeting criteria, the result of each targeting item can be treated as a Boolean (true or false) value. The protocol will process this element if the final evaluation of all targeting criteria is true. For the targeting criteria listed in this section, return values are used with zero mapping to true and 1 mapping to false.

All filters are based on a common schema element IFilter and share three attributes:

Attribute

Attribute description

bool

(required) MUST be AND or OR to indicate how the filter result will be combined with additional filters.

not

(required) MUST be 0 to indicate that the filter returns true if the filter matches and false if it does not. MUST be 1 to indicate that the filter returns false if the filter matches and true if it does not.

hidden

(optional) MUST not display the setting in the administrative tool plug-in.

Attributes unique to each filter are described in the following table.

Criterion

Attribute

Attribute description

FilterBattery

There are no settings for FilterBattery. It MUST return S_OK if running on battery power or S_FALSE if not.

FilterCollection

A collection is an element that wraps one to multiple filters. It MUST return a single result for all of the filters it contains.

name

(optional) A description of the collection.

FilterComputer

name

(required) MUST be either the NETBIOS computer name to match, or an FQDN to match.

type

(required) MUST be set to "NETBIOS" to match the NETBIOS name, or "DNS" to match the FQDN.

FilterCPU

speedMHz

(required) MUST be the minimum speed in megahertz (MHz) to match. 2.0 gigahertz (GHz) is expressed as 2000.

FilterDUN

type

(required) MUST be set to "" (zero-length string) for any network connection, "modem" for telephone modem accessed through a COM port, "isdn" for ISDN card with corresponding NDISWAN driver installed, "x25" for X.25 card with corresponding NDISWAN driver installed, "vpn" for a VPN, "pad" for a packet assembler/disassembler (PAD), "GENERIC" for a generic network, "SERIAL" for a serial port direct connection, "FRAMERELAY" for frame relay, "ATM" for asynchronous transfer mode (ATM), "SONET" for Sonet, "SW56" for Switched 56k access, IRDA for Infrared Data Association (IrDA) device, "PARALLEL" for parallel port direct connection, or "PPPoE" for Point-to-Point Protocol over Ethernet (PPPoE).

These settings coincide to the return values in the szDeviceType field in the RASENTRY structure. For more information, refer to [MSDN-RAS].

FilterDisk

drive

(required) MUST be either System to indicate disk space on the system drive, or a drive letter, such as D.

freeSpace

(required) MUST be set to the amount of free space in 1 kilobyte increments.

FilterDomain

name

(required) MUST be a NETBIOS domain to be matched.

userContext

(optional) MUST be set to 0 to indicate a match if the user is a member of the domain, or 1 to indicate a match if the computer is a member of the domain.

FilterVariable

variableName

(required) MUST be an environment variable defined in either the user or the system space.

value

(optional) MUST be a value to match against the value of variableName.

FilterFile

path

(required) MUST be the path to a file or folder.

type

(optional) MUST be EXISTS to match if the file exists, or VERSION if the file exists and is a specific version. If VERSION, the value to compare against is stored in the min and max attributes.

gte

(optional) When matching on version, gte MUST be set to 1 to specify that the value MUST be greater than or equal to the min value. When set to 0, the value MUST be greater than the min value.

lte

(optional) When matching on version, lte MUST be set to 1 to specify that the value MUST be less than or equal to the max value. When set to 0, the value MUST be less than the max value.

min

(optional) The minimum file version MUST be this version, expressed as 1500.5.5.1.

max

(optional) The maximum file version MUST be this version, expressed as 1500.5.5.1.

folder

(optional) The path MUST be evaluated as a folder.

FilterIpRange

min

(required) The minimum IP address MUST be this address, expressed as 10.10.10.10.

max

(required) The maximum IP address MUST be this address, expressed as 10.10.10.50.

FilterLanguage

default

(optional) MUST be set to 1 to check whether the selected language is the logged-on user's default language.

system

(optional) MUST be set to 1 to check whether the selected language is the system language.

native

(optional) MUST be set to 1 to check whether the selected language is the native operating system language.

language

(required) MUST be the language ID to match. For more information on the language ID and the locale, see [MSDN-LANGSUPPORT].

displayName

(optional) Not used during processing, but is usually the text representation of the language. (for example, English).

locale

(required) MUST be the locale ID to be matched.

FilterLdap

In addition to being a targeting criteria, the LDAP query targeting item can assign the value that it retrieves from the directory service for matching purposes to an environment variable that can be used later in the protocol processing. It shares this additional capability with the Registry and WMI targeting items.

searchFilter

(optional) MUST be an LDAP query string. For information on LDAP, see [MSDN-LDAPDLCT].

binding

(required) MUST be the default binding to use to execute the query, (usually LDAP).

variableName

(optional) MUST be the name of an environment variable to set the results of the LDAP query.

attribute

(optional) MUST be the attribute name to return from the LDAP query.

FilterMacRange

min

(required) The minimum MAC address MUST be this address, expressed as ac:13:ab:de:34:16.

max

(required) The maximum MAC address MUST be this address, expressed as ac:13:ab:de:34:16.

FilterMsi

MSI refers to the Microsoft Windows Installer.

type

(required) MUST be PRODUCT, PATCH, or FILECOMPONENT to match a specific product, patch, or file component.

subtype

(required) MUST be EXISTS, VERSION, GET_PROPERTY, GET_INFORMATION, MATCH_PROPERTY, or MATCH_INFORMATION to perform those operations.

item

(optional) MUST be an item stored in the MSI description of the product, patch, or file component.

code

(optional) MUST be the product code of the selected MSI product.

value

(optional) MUST be a value associated with the item stored in the MSI description of the product, patch, or file component.

max

(optional) When matching on a version, max is the maximum version that is allowed to be present. It MUST be formatted as a valid version, such as 15543.1.1.1.

min

(optional) When matching on a version, min is the minimum version that is allowed to be present. It MUST be formatted as a valid version, such as 15543.1.1.1.

gte

(optional) When matching on a version, gte is be set to 1 to specify that the value MUST be greater than or equal to the min value. When set to 0, the value MUST be greater than the min value.

lte

(optional) When matching on a version, lte is set to 1 to specify that the value MUST be less than or equal to the max value. When set to 0, the value MUST be less than the max value.

FilterOs

Note From the perspective of interoperability, the same enumeration values for class and version are required for the correct filtering operation to occur for the classes and versions defined in their respective enumerations. An implementation is not constrained from including additional enumeration values for class or version to provide support for additional platforms.

class

(optional) SHOULD<17> be NE, 9X, or NT.

version

(optional) The value SHOULD<18> correspond to the operating system version.

type

(optional) SHOULD<19> be R2, SE, PRO, SV, DC, WS, PR, or NE.

edition

(optional) SHOULD<20> be one of 64, 64EP, 64DC, AS, DTC, EP, HM, MC, SRV, STD, TPC, TSE, WEB, SBS, PRO, 64STGSTD, 64STGWKGRP, 64MPSTD, 64MPPREM, 64ESSSOL, or NE.

sp

(optional) MUST be one of Gold, Service Pack 1, Service Pack 2, Service Pack 3, Service Pack 4, Service Pack 5, or Service Pack 6, or NE (NE is the mnemonic used for the option labeled "Any").

FilterOrgUnit

name

(required) MUST be the name of the organizational unit (OU) to compare.

userContext

(optional) MUST be 1 to indicate that the user is a member of the OU, or 0 to indicate that the computer MUST be a member of the OU.

directMember

(optional) MUST be 1 to indicate that the user or computer is a direct member of the OU and not a member of a contained OU.

FilterPCMCIA

 This filter item is primarily used to indicate that the protocol is processing on a laptop. If the computer has PCMCIA card slots available, the filter MUST return S_OK (0) and if there are no PCMCIA card slots available, the filter MUST return S_FALSE (1).

FilterPortable

unknown

(optional) MUST be 1 to return S_OK if this is a portable computer and the docked state is unknown.

docked

(optional) MUST be 1 to return S_OK if this is a portable computer and it is docked.

undocked

(optional) MUST be 1 to return S_OK if this is a portable computer and it is undocked.

FilterProcMode

syncFore

(optional) MUST be 1 to return S_OK if the preference is processing in the synchronous foreground meaning that processing MUST complete before the log-on dialog is presented.

asyncFore

(optional) MUST be 1 to return S_OK if the preference is processing in the asynchronous foreground meaning that processing MUST complete before the log-on dialog is presented.

backRefr

(optional) MUST be 1 to return S_OK if the preference is processing in the background.

slowLink

(optional) MUST be 1 to return S_OK if the preference is processing over a slow link.

verbLog

(optional) MUST be 1 to return S_OK if verbose logging is enabled.

noChg

(optional) MUST be 1 to return S_OK if the preference processed but there was no change.

linkTrns

(optional) MUST be 1 to return S_OK if the preference link is in transition. This means that a change in the link speed was detected between the application of GPOs.

forceRefr

(optional) MUST be 1 to return S_OK if the preference is processing via a forced refresh.

safeBoot

(optional) MUST be 1 to return S_OK if the preference will cause a reboot.

rsopEnbl

(optional) MUST be 1 to return S_OK if Resultant Set of Policy (RSoP) is enabled for the preference.

rsopTrns

(optional) MUST be 1 to return S_OK if the preference will write an RSoP transaction.

FilterRAM

totalMB

(required) MUST be the minimum RAM installed in the targeted system.

FilterRegistry

In addition to being a targeting criteria, the registry targeting item can assign the value that it retrieves from the registry for matching purposes to an environment variable that can be used later in the protocol processing. It shares this additional capability with the LDAP and Windows Management Instrumentation (WMI) targeting items.

type

(optional) MUST be VALUEEXISTS, KEYEXISTS, MATCHVALUE, or GETVALUE to define the type of registry filtering to be processed.

subtype

(optional) MUST be EQUALHEX, EQUALDEC, SUBSTRING, or VERSION to define the type of matching being performed in this registry filtering.

valueType

(optional) MUST be REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_DWORD, or REG_BINARY to indicate the registry value type being matched.

valueName

(optional) MUST be the registry value name to be used in the registry filtering operation.

valueData

(optional) MUST be the value to use during matching operations.

variableName

(optional) MUST be the name of a variable to set into the list of environment variables.

key

(required) MUST be the full path to a Registry entry.

hive

(optional) MUST be HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, or HKEY_USER to select the required registry hive.

gte

(optional) When type is MATCHVALUE and subtype is VERSION, gte MUST be set to 1 to indicate that the value match MUST be greater than or equal to the min value. A value of 0 indicates that the value match MUST be greater than the min value. The value of gte is ignored for all other combinations of type and subtype.

lte

(optional) When type is MATCHVALUE and subtype is VERSION, lte MUST be set to 1 to indicate that the value match MUST be less than or equal to the max value. A value of 0 indicates that the value match MUST be greater than the min value. The value of lte is ignored for all other combinations of type and subtype.

max

(optional) MUST be the maximum value against which to test when doing a MATCHVALUE filter.

min

(optional) MUST be the minimum value against which to test when doing a MATCHVALUE filter.

version

(optional) MUST be the version against which to test when doing a VERSION match.

FilterSite

name

(required) MUST be set to the name of the Active Directory site to match.

FilterTerminal

type

(required) MUST be NE, TS, or CONSOLE.<21>

option

(required) MUST be APPLICATION, PROGRAM, CLIENT, SESSION, DIRECTORY, or IP.<22>

value

(required) MUST be the value to match the retrieved option value.

min

(optional) The minimum IP address MUST be this address, for example 10.10.10.10 when option is set to "IP".

max

(optional) The maximum IP address MUST be this address, for example 10.10.10.50 when option is set to "IP".

FilterUser

sid

(optional) MUST be provided in order to match the SID specified to the logged-on user SID.

name

(optional) If sid is not specified, match the name specified to the logged-on user name.

FilterTime

begin

(required) MUST be set to a time at the beginning of the validated time range. The time format is "HH:MM" local time using a 24-hour clock and leading zeroes.

end

(required) MUST be set to a time at the end of the validated time range. The time format is "HH:MM" local time using a 24-hour clock and leading zeroes.

FilterWMI

In addition to being a targeting criteria, the WMI query targeting item can assign a CIM property value to an environment variable that can be used later in the protocol processing. It shares this additional capability with the Registry and LDAP targeting items.

query

(required) The WMI Query Language (WQL) query used when searching the CIM repository.

nameSpace

(optional) The default CIM namespace to query. The default value is Root\cimv2.

variableName

(optional) The name of an environment variable to set with the value of the selected CIM property.

property

(optional) The CIM property to return as an environment variable.

FilterGroup

name

(optional) MUST be the name of a security group if filtering is based on membership in the named security group.

sid

(optional) MUST be the sid of a security group if filtering is based on membership in a security group with the sid value.

userContext

(optional) MUST be 1 to indicate that the user is a member of the security group, or 0 to indicate that the computer MUST be a member of the security group.

primaryGroup

(optional) MUST be 1 to indicate that the user or computer is a member of the security group, or 0 to indicate that the user or computer is a member of any security group contained in the security group.

localGroup

(optional) MUST be 1 to indicate that the security group is local to the current machine, or 0 to indicate that the security group is part of the network security groups.

FilterRunOnce

id

(required) MUST be a unique value that will be stored on the machine when the filter processes.

usercontext

(optional) MUST be 1 to indicate that the filter applies to the current user or 0 to indicate that the filter applies to the computer.

comments

(optional) MUST be a description of the usage of this filter and any other necessary descriptive information.

FilterDate

period

(required) MUST be MONTHLY, WEEKLY or YEARLY.

dow

(optional) If period is WEEKLY, MUST be SUN, MON, TUE, WED, THU, FRI, or SAT.

day

(optional) If period is MONTHLY or YEARLY, MUST be the number corresponding to the day in the month. For example, 1 or 22.

month

(optional) If period is YEARLY, MUST be the number corresponding to the month. For example, 1 or 12.

year

(optional) If period is YEARLY, MUST be the year. For example, 2011. To indicate, every year, the attribute is omitted.

Filters Schema

 <?xml version="1.0" encoding="utf-8"?>
 <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:simpleType name="enumFilterTerminalOption">
     <xs:restriction base="xs:string">
       <xs:enumeration value="APPLICATION"/>
       <xs:enumeration value="PROGRAM"/>
       <xs:enumeration value="CLIENT"/>
       <xs:enumeration value="SESSION"/>
       <xs:enumeration value="DIRECTORY"/>
       <xs:enumeration value="IP"/>
       <xs:enumeration value="NE"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterTerminalType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="NE"/>
       <xs:enumeration value="TS"/>
       <xs:enumeration value="CONSOLE"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterRegistryHive">
     <xs:restriction base="xs:string">
       <xs:enumeration value="HKEY_LOCAL_MACHINE"/>
       <xs:enumeration value="HKEY_CLASSES_ROOT"/>
       <xs:enumeration value="HKEY_CURRENT_USER"/>
       <xs:enumeration value="HKEY_CURRENT_CONFIG"/>
       <xs:enumeration value="HKEY_USERS"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterRegistryValueType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="REG_SZ"/>
       <xs:enumeration value="REG_EXPAND_SZ"/>
       <xs:enumeration value="REG_MULTI_SZ"/>
       <xs:enumeration value="REG_DWORD"/>
       <xs:enumeration value="REG_BINARY"/>
       <xs:enumeration value=""/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterRegistrySubType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="EQUALHEX"/>
       <xs:enumeration value="EQUALDEC"/>
       <xs:enumeration value="SUBSTRING"/>
       <xs:enumeration value="VERSION"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterRegistryType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="VALUEEXISTS"/>
       <xs:enumeration value="KEYEXISTS"/>
       <xs:enumeration value="MATCHVALUE"/>
       <xs:enumeration value="GETVALUE"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterOsSp">
     <xs:restriction base="xs:string">
       <xs:enumeration value="NE"/>
       <xs:enumeration value="Gold"/>
       <xs:enumeration value="Service Pack 1"/>
       <xs:enumeration value="Service Pack 2"/>
       <xs:enumeration value="Service Pack 3"/>
       <xs:enumeration value="Service Pack 4"/>
       <xs:enumeration value="Service Pack 5"/>
       <xs:enumeration value="Service Pack 6"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterOsEdition">
     <xs:restriction base="xs:string">
       <xs:enumeration value="NE"/>
       <xs:enumeration value="64EP"/>
       <xs:enumeration value="64DC"/>
       <xs:enumeration value="AS"/>
       <xs:enumeration value="DTC"/>
       <xs:enumeration value="EP"/>
       <xs:enumeration value="WEB"/>
       <xs:enumeration value="64"/>
       <xs:enumeration value="HM"/>
       <xs:enumeration value="MC"/>
       <xs:enumeration value="TPC"/>
       <xs:enumeration value="SRV"/>
       <xs:enumeration value="STD"/>
       <xs:enumeration value="TSE"/>
       <xs:enumeration value="SBS"/>
       <xs:enumeration value="PRO"/>
     </xs:restriction>
   </xs:simpleType>  
   <xs:simpleType name="enumFilterOsType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="NE"/>
       <xs:enumeration value="R2"/>
       <xs:enumeration value="SE"/>
       <xs:enumeration value="WS"/>
       <xs:enumeration value="SV"/>
       <xs:enumeration value="DC"/>
       <xs:enumeration value="PRO"/>
       <xs:enumeration value="PR"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterOsVersion">
     <xs:restriction base="xs:string">
       <xs:enumeration value="NE"/>
       <xs:enumeration value="95"/>
       <xs:enumeration value="98"/>
       <xs:enumeration value="ME"/>
       <xs:enumeration value="NT"/>
       <xs:enumeration value="2K"/>
       <xs:enumeration value="XP"/>
       <xs:enumeration value="2K3"/>
       <xs:enumeration value="2K3R2"/>
       <xs:enumeration value="VISTA"/>
       <xs:enumeration value="2K8"/>
       <xs:enumeration value="WIN7"/>
       <xs:enumeration value="2K8R2"/>
       <xs:enumeration value="WIN8"/>
       <xs:enumeration value="WIN8S"/>
       <xs:enumeration value="WINBLUE"/>
       <xs:enumeration value="WINBLUESRV"/>
       <xs:enumeration value="WINTHRESHOLD"/>
       <xs:enumeration value="WINTHRESHOLDSRV"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterOsClass">
     <xs:restriction base="xs:string">
       <xs:enumeration value="NE"/>
       <xs:enumeration value="9X"/>
       <xs:enumeration value="NT"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterMsiSubType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="EXISTS"/>
       <xs:enumeration value="VERSION"/>
       <xs:enumeration value="GET_PROPERTY"/>
       <xs:enumeration value="GET_INFORMATION"/>
       <xs:enumeration value="MATCH_PROPERTY"/>
       <xs:enumeration value="MATCH_INFORMATION"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterMsiType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="PRODUCT"/>
       <xs:enumeration value="PATCH"/>
       <xs:enumeration value="FILECOMPONENT"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterFileType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="EXISTS"/>
       <xs:enumeration value="VERSION"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterDunType">
     <xs:restriction base="xs:string">
       <xs:enumeration value=""/>
       <xs:enumeration value="modem"/>
       <xs:enumeration value="isdn"/>
       <xs:enumeration value="x25"/>
       <xs:enumeration value="vpn"/>
       <xs:enumeration value="pad"/>
       <xs:enumeration value="GENERIC"/>
       <xs:enumeration value="SERIAL"/>
       <xs:enumeration value="FRAMERELAY"/>
       <xs:enumeration value="ATM"/>
       <xs:enumeration value="SONET"/>
       <xs:enumeration value="SW56"/>
       <xs:enumeration value="IRDA"/>
       <xs:enumeration value="PARALLEL"/>
       <xs:enumeration value="PPPoE"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterDateDow">
     <xs:restriction base="xs:string">
       <xs:enumeration value="SUN"/>
       <xs:enumeration value="MON"/>
       <xs:enumeration value="TUE"/>
       <xs:enumeration value="WED"/>
       <xs:enumeration value="THU"/>
       <xs:enumeration value="FRI"/>
       <xs:enumeration value="SAT"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterDatePeriod">
     <xs:restriction base="xs:string">
       <xs:enumeration value="MONTHLY"/>
       <xs:enumeration value="WEEKLY"/>
       <xs:enumeration value="YEARLY"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterComputerNameType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="DNS"/>
       <xs:enumeration value="NETBIOS"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumFilterBool">
     <xs:restriction base="xs:string">
       <xs:enumeration value="AND"/>
       <xs:enumeration value="OR"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="enumTrueFalse">
     <xs:restriction base="xs:string">
       <xs:enumeration value="0"/>
       <xs:enumeration value="1"/>
     </xs:restriction>
   </xs:simpleType>
   
   <xs:complexType name="IFilter" abstract="true">
     <xs:attribute name="bool" type="enumFilterBool" use="required" />
     <xs:attribute name="not" type="enumTrueFalse" use="required" />
     <xs:attribute name="hidden" type="enumTrueFalse" use="optional" />
   </xs:complexType>
   
   <xs:group name="gFilterTypes">
     <xs:sequence>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterSite">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="name" type="xs:string" use="required" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterGroup">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="name" type="xs:string" use="optional" default="" />
                 <xs:attribute name="sid" type="xs:string" use="optional" default="" />
                 <xs:attribute name="userContext" type="enumTrueFalse" use="optional" default="1" />
                 <xs:attribute name="primaryGroup" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="localGroup" type="enumTrueFalse" use="optional" default="0" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterRunOnce">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="id" type="xs:string" use="required" />
                 <xs:attribute name="userContext" type="enumTrueFalse" use="optional" default="1"/>
                 <xs:attribute name="comments" type="xs:string" use="optional" default="" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterLdap">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="searchFilter" type="xs:string" use="optional" />
                 <xs:attribute name="binding" type="xs:string" use="required" />
                 <xs:attribute name="variableName" type="xs:string" use="optional" />
                 <xs:attribute name="attribute" type="xs:string" use="optional" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterBattery">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter"/>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterComputer">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="type" type="enumFilterComputerNameType" use="required" />
                 <xs:attribute name="name" type="xs:string" use="required" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterCpu">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="speedMHz" type="xs:unsignedShort" use="required" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterDate">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="period" type="enumFilterDatePeriod" use="required" />
                 <xs:attribute name="dow" type="enumFilterDateDow" use="optional" />
                 <xs:attribute name="day" type="xs:unsignedByte" use="optional" />
                 <xs:attribute name="month" type="xs:unsignedByte" use="optional" />
                 <xs:attribute name="year" type="xs:unsignedShort" use="optional" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterDun">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="type" type="enumFilterDunType" use="required" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterDisk">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="freeSpace" type="xs:unsignedByte" use="required" />
                 <xs:attribute name="drive" type="xs:string" use="required" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterDomain">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="name" type="xs:string" use="required" />
                 <xs:attribute name="userContext" type="enumTrueFalse" use="optional" default="1" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterVariable">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="variableName" type="xs:string" use="required" />
                 <xs:attribute name="value" type="xs:string" use="optional" default="1" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterFile">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="gte" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="lte" type="enumTrueFalse" use="optional" default="0"/>
                 <xs:attribute name="min" type="xs:string" use="optional" />
                 <xs:attribute name="max" type="xs:string" use="optional" />
                 <xs:attribute name="path" type="xs:string" use="required" />
                 <xs:attribute name="type" type="enumFilterFileType" use="optional" default="EXISTS" />
                 <xs:attribute name="folder" type="enumTrueFalse" use="optional" default="0" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterIpRange">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="min" type="xs:string" use="required" />
                 <xs:attribute name="max" type="xs:string" use="required" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterLanguage">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="default" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="system" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="native" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="displayName" type="xs:string" use="optional" />
                 <xs:attribute name="language" type="xs:unsignedByte" use="required" />
                 <xs:attribute name="locale" type="xs:unsignedByte" use="required" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterMacRange">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="min" type="xs:string" use="required" />
                 <xs:attribute name="max" type="xs:string" use="required" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterMsi">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="type" type="enumFilterMsiType" use="required" />
                 <xs:attribute name="subtype" type="enumFilterMsiSubType" use="required" />
                 <xs:attribute name="code" type="xs:string" use="optional" />
                 <xs:attribute name="item" type="xs:string" use="optional" />
                 <xs:attribute name="value" type="xs:string" use="optional" />
                 <xs:attribute name="min" type="xs:string" use="optional" />
                 <xs:attribute name="max" type="xs:string" use="optional" />
                 <xs:attribute name="gte" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="lte" type="enumTrueFalse" use="optional" default="0" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterOs">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="class" type="enumFilterOsClass" use="optional" default="NE" />
                 <xs:attribute name="version" type="enumFilterOsVersion" use="optional" default="NE" />
                 <xs:attribute name="type" type="enumFilterOsType" use="optional" default="NE" />
                 <xs:attribute name="edition" type="enumFilterOsEdition" use="optional" default="NE" />
                 <xs:attribute name="sp" type="enumFilterOsSp" use="optional" default="NE" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterOrgUnit">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="name" type="xs:string" use="required" />
                 <xs:attribute name="userContext" type="enumTrueFalse" use="optional" default="1" />
                 <xs:attribute name="directMember" type="enumTrueFalse" use="optional" default="0" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterPcmcia">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter"/>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterPortable">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="unknown" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="docked" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="undocked" type="enumTrueFalse" use="optional" default="0" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterProcMode">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="synchFore" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="asynchFore" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="backRefr" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="forceRefr" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="linkTrns" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="noChg" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="rsopTrns" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="safeBoot" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="slowLink" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="verbLog" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="rsopEnbl" type="enumTrueFalse" use="optional" default="0" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterRam">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="totalMB" type="xs:unsignedShort" use="required" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterRegistry">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="type" type="enumFilterRegistryType" use="optional" default="KEYEXISTS" />
                 <xs:attribute name="subtype" type="enumFilterRegistrySubType" use="optional" default="EQUALHEX" />
                 <xs:attribute name="valueName" type="xs:string" use="optional" />
                 <xs:attribute name="valueType" type="enumFilterRegistryValueType" use="optional" default=""/>
                 <xs:attribute name="valueData" type="xs:string" use="optional" />
                 <xs:attribute name="variableName" type="xs:string" use="optional" />
                 <xs:attribute name="key" type="xs:string" use="required" />
                 <xs:attribute name="hive" type="enumFilterRegistryHive" use="optional" default="HKEY_LOCAL_MACHINE"/>
                 <xs:attribute name="min" type="xs:string" use="optional" />
                 <xs:attribute name="max" type="xs:string" use="optional" />
                 <xs:attribute name="gte" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="lte" type="enumTrueFalse" use="optional" default="0" />
                 <xs:attribute name="version" type="xs:string" use="optional" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterTerminal">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="type" type="enumFilterTerminalType" use="required" />
                 <xs:attribute name="option" type="enumFilterTerminalOption" use="required" />
                 <xs:attribute name="value" type="xs:string" use="required" default="" />
                 <xs:attribute name="min" type="xs:string" use="optional" default="" />
                 <xs:attribute name="max" type="xs:string" use="optional" default="" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterTime">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="begin" type="xs:time" use="required" />
                 <xs:attribute name="end" type="xs:time" use="required" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterUser">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="name" type="xs:string" use="optional" />
                 <xs:attribute name="sid" type="xs:string" use="optional" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterWmi">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:attribute name="query" type="xs:string" use="required" />
                 <xs:attribute name="nameSpace" type="xs:string" use="optional" default="root\cimv2" />
                 <xs:attribute name="property" type="xs:string" use="optional" />
                 <xs:attribute name="variableName" type="xs:string" use="optional" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterCollection">
           <xs:complexType>
             <xs:complexContent>
               <xs:extension base="IFilter">
                 <xs:sequence>
                   <xs:group ref="gFilterTypes"/>
                 </xs:sequence>
                 <xs:attribute name="name" type="xs:string" use="optional" />
               </xs:extension>
             </xs:complexContent>
           </xs:complexType>
         </xs:element>
       </xs:choice>
     </xs:sequence>      
   </xs:group>
  
   <xs:group name="gFilters">
     <xs:sequence>
         <xs:group ref="gFilterTypes"/>
     </xs:sequence>
   </xs:group>
   
   <xs:element name="Filters">
     <xs:complexType>
       <xs:sequence>
         <xs:group ref="gFilters"/>
       </xs:sequence>
     </xs:complexType>
   </xs:element>
 </xs:schema>