Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

7 Appendix B: Product Behavior

The information in this specification is applicable to the following Microsoft products or supplemental software. References to product versions include released service packs:

  • Windows 2000 operating system Service Pack 3 (SP3)

  • Windows XP operating system

  • Windows Server 2003 operating system

  • Windows Vista operating system

  • Windows Server 2008 operating system

  • Windows 7 operating system

  • Windows Server 2008 R2 operating system

  • Windows 8 operating system

  • Windows Server 2012 operating system

  • Windows 8.1 operating system

  • Windows Server 2012 R2 operating system

Exceptions, if any, are noted below. If a service pack or Quick Fix Engineering (QFE) number appears with the product version, behavior changed in that service pack or QFE. The new behavior also applies to subsequent service packs of the product unless otherwise specified. If a product edition appears with the product version, behavior is different in that product edition.

Unless otherwise specified, any statement of optional behavior in this specification that is prescribed using the terms SHOULD or SHOULD NOT implies product behavior in accordance with the SHOULD or SHOULD NOT prescription. Unless otherwise specified, the term MAY implies that the product does not follow the prescription.

<1> Section 1.3: WSUS is a component of Windows that consists of both an update client implementation and an update server implementation.

The update server is a component of some Windows versions and can be installed to enable a Windows server to operate as an update server. The following table describes the Windows versions supported by each version of the update server.

WSUS 2.0 update server

WSUS 2.0 SP1 update server

WSUS 3.0 update server

WSUS 3.0 SP1 update server

WSUS 3.0 SP2 update server

Windows 2000 Server

Supported

Supported

Not supported

Not supported

Not supported

Windows Server 2003

Supported

Supported

Supported

Supported

Supported

Windows Server 2003 R2

Supported

Supported

Supported

Supported

Supported

Windows Server 2008

Not supported

Not supported

Not supported

Supported

Supported

Windows Server 2008 R2

Not supported

Not supported

Not supported

Not supported

Supported

The update client is a component of some Windows versions. The following table describes the Windows versions supported by each version of the update client.

WSUS 2.0 update client

WSUS 2.0 SP1 update client

WSUS 3.0 update client

WSUS 3.0 SP1 update client

WSUS 3.0 SP2 update client

Windows 2000

Supported

Supported

Supported

Supported

Supported

Windows XP

Supported

Supported

Supported

Supported

Supported

Windows Server 2003

Supported

Supported

Supported

Supported

Supported

Windows Server 2003 R2

Supported

Supported

Supported

Supported

Supported

Windows Vista

Not supported

Not supported

Supported

Supported

Supported

Windows Server 2008

Not supported

Not supported

Not supported

Supported

Supported

Windows 7

Not supported

Not supported

Not supported

Not supported

Supported

Windows Server 2008 R2

Not supported

Not supported

Not supported

Not supported

Supported

Windows 8

Not supported

Not supported

Not supported

Not supported

Supported

Windows Server 2012

Not supported

Not supported

Not supported

Not supported

Supported

Windows 8.1

Not supported

Not supported

Not supported

Not supported

Supported

Windows Server 2012 R2

Not supported

Not supported

Not supported

Not supported

Supported

<2> Section 2.1: The Windows Server Update Services: Client-Server Protocol supports HTTPS for securing its ports, although SSL is not configured by default when the Windows Server Update Services: Server-Server Protocol (as specified in [MS-WSUSSS]) is installed.

<3> Section 2.1: The Windows Server Update Services: Client-Server Protocol exposes the self-update content directory on port 80. It has a setup-time configuration option to expose a non-SSL contentPort on either port 80 or port 8530. For non-SSL configurations, the Windows Server Update Services: Client-Server Protocol uses the contentPort as the commonPort. For SSL configurations, the Windows Server Update Services: Client-Server Protocol uses port 443 for the commonPort if the content port is 80, or port N+1 for the commonPort if the content port is any other port. So if the contentPort is 8530, the commonPort can be either 8530 (non-SSL) or 8531 (SSL). See [MS-WSUSSS].

<4> Section 2.1: The WSUS server exposes the self-update content directory on port 80 to support the WUA on Windows 2000 SP3, which implements client protocol version 0.9. The versions of WUA that come with Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows Server 2012, Windows 8.1, and Windows Server 2012 R2 can self-update over a configurable commonPort.

<5> Section 2.1.1: Windows uses a block size of 65535 bytes.

<6> Section 2.2: In this specification, excerpts are given from the WSDL file for the Windows implementation of the Windows Server Update Services: Client-Server Protocol. In the WSDL file, the attributes minOccurs and maxOccurs denote the number of elements allowed, so that zero is ≤ minOccursmaxOccurs, as specified in [WSDL].

<7> Section 2.2.1: The following table shows the Microsoft-defined XML namespaces used within the Windows Server Update Services: Client-Server Protocol and the alias (prefix) used in the remaining sections of this specification.

Alias (Prefix)

XML Namespace

s2

http://microsoft.com/wsdl/types/

s1

The target namespace. The XML namespace it refers to depends on the WSDL file it is used in.

For SimpleAuth Web ServiceWSDL, it is http://www.microsoft.com/SoftwareDistribution/Server/SimpleAuthWebService.

For Client Web ServiceWSDL, it is http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService.

For Reporting Web Service WSDL, it is http://www.microsoft.com/SoftwareDistribution

<8> Section 2.2.2.2.1: The following table shows the client protocol version used by various versions of the WSUS update client.

WSUS update client

Client protocol version

WSUS 2.0

1.0

WSUS 2.0 SP1

1.0

WSUS 3.0

1.0

WSUS 3.0 SP1

1.6

WSUS 3.0 SP2

1.8

<9> Section 2.2.2.2.1: The following table shows the server protocol version returned by various versions of the WSUS update server.

WSUS update server

Server protocol version

WSUS 2.0

Not returned

WSUS 2.0 SP1

Not returned

WSUS 3.0

3.0

WSUS 3.0 SP1

3.1

WSUS 3.0 SP2

3.2

<10> Section 2.2.2.2.4: WSUS 3.0 Service Pack 1 and higher includes this element when the deployment is associated with a driver update and the protocolVersion reported by the client in the GetCookie call is "1.6". WSUS 2.0 and WSUS 3.0 RTM versions of the server do not include this in the response.

<11> Section 2.2.2.2.6: WUA uses this SHA-1 hash to verify the authenticity of the content file downloaded from the server. WUA calculates the SHA-1 hash of the downloaded content file and compares it to the SHA-1 hash contained in the FileDigest attribute of the update or EULA's metadata; if the two hashes do not match, WUA discards the file.

In addition, in Windows 8, Windows Server 2012, Windows 8.1, and Windows Server 2012 R2, WUA performs an additional security check on downloaded payload files. These versions of WUA require the update's extended metadata XML fragment to contain a Files element using the following schema.

<simpleType name="FileDigestAlgorithm">
<annotation>
<documentation>A cryptography algorithm supported by MSUS that is used to produce FileDigest values.</documentation>
</annotation>
<restriction base="token">
<enumeration value="SHA1" />
</restriction>
</simpleType>
<simpleType name="AdditionalDigestAlgorithm">
<annotation>
<documentation>Contains the string representation of the hashing algorithm.</documentation>
</annotation>
<restriction base="token">
<enumeration value="SHA256" />
</restriction>
</simpleType>
<complexType name="AdditionalDigest">
<annotation>
<documentation>Contains the hash value for the relevant hashing algorithm.</documentation>
</annotation>
<simpleContent>
<extension base="base64Binary">
<attribute name="Algorithm" type="bt:AdditionalDigestAlgorithm" use="required"/>
</extension>
</simpleContent>
</complexType>
    <complexType name="Files">
        <annotation>
            <documentation>The list of files that must be obtained by the MSUS Client prior to installing / uninstalling the update.</documentation>
        </annotation>
        <sequence>
            <element name="File" minOccurs="0" maxOccurs="unbounded">
                <annotation>
                    <documentation>A file to obtain.</documentation>
                </annotation>
                <complexType>
                    <!-- The following sequence is expected only by clients running Windows 8 or Windows Server 2012 -->
                    <sequence>
                      <element name="AdditionalDigest" minOccurs="0" maxOccurs="unbounded" type="bt:AdditionalDigest"></element>
                    </sequence>
                    <attribute name="Digest" type="bt:FileDigest" use="required">
                        <annotation>
                            <documentation>The digest (hash) of the file, that both uniquely identifies it and allows the MSUS Client to verify its integrity.</documentation>
                        </annotation>
                    </attribute>
                    <attribute name="DigestAlgorithm" type="bt:FileDigestAlgorithm" use="required">
                        <annotation>
                            <documentation>The cryptography algorithm that was used to produce Digest.</documentation>
                        </annotation>
                    </attribute>
                    <attribute name="FileName" type="bt:FileName" use="required">
                        <annotation>
                            <documentation>The file name that the file should have prior to attempting installation. (This is needed because the file is stored on the MSUS Server using a different file name.)</documentation>
                        </annotation>
                    </attribute>
                    <attribute name="Size" type="bt:FileSize" use="required">
                        <annotation>
                            <documentation>The exact size of the file, in bytes.</documentation>
                        </annotation>
                    </attribute>
                    <attribute name="Modified" type="bt:FileDate" use="required">
                        <annotation>
                            <documentation>The date and time the file was last modified. (Literally, the modified date from NTFS.)</documentation>
                        </annotation>
                    </attribute>
                    <attribute name="PatchingType" type="upd:PatchingType" use="optional" />
                </complexType>
            </element>
       </sequence>
    </complexType>

WUA finds the <Files/File> element whose Digest attribute matches the FileDigest of the content file being downloaded. It then finds the <AdditionalDigest> element whose Algorithm attribute is equal to SHA256. It takes the contents of that <AdditionalDigest> element, compares it to the calculated SHA-256 hash of the downloaded content file, and rejects the content file if the two hashes do not match (or if the update metadata does not contain the additional digest information).

<12> Section 2.2.2.3.1: For the tags used by WUA, see the MiscData table in section 2.2.2.3.1.

<13> Section 2.2.2.3.1: The Windows Update Agent (WUA) uses Windows system APIs to determine the values returned. The following table shows the values of "Major", "Minor", and "Build" generated by the WUA on various versions of Windows. The values of "Build", "Revision", "ServicePackMajor", and "ServicePackMinor" vary depending on the updates and service packs installed.

This table also includes the OSProductType ('c') value returned in the MiscData structure for Windows Server platforms whose OSProductType is documented as "2 or 3". The WUA returns 2 if the system is configured to act as a domain controller and 3 otherwise.

Windows version

Major

Minor

OSProductType

Windows 8.1

6

3

1

Windows Server 2012 R2

6

3

2 or 3

Windows 8

6

2

1

Windows Server 2012

6

2

2 or 3

Windows 7

6

1

1

Windows Server 2008 R2

6

1

2 or 3

Windows Server 2008

6

0

2 or 3

Windows Vista

6

0

1

Windows Server 2003 R2

5

2

Not returned

Windows Home Server

5

2

Not returned

Windows Server 2003

5

2

Not returned

Windows XP Professional x64 Edition

5

2

Not returned

Windows XP

5

1

Not returned

Windows 2000

5

0

Not returned

<14> Section 2.2.2.3.1: The WUA uses Windows system APIs to determine the values returned. The following table shows the values of "Major", "Minor", and "Build" generated by the WUA on various versions of Windows. The values of "Build", "Revision", "ServicePackMajor", and "ServicePackMinor" vary depending on the updates and service packs installed.

This table also includes the OSProductType ('c') value returned in the MiscData structure for Windows Server platforms whose OSProductType is documented as "2 or 3". The WUA returns 2 if the system is configured to act as a domain controller and 3 otherwise.

Windows version

Major

Minor

OSProductType

Windows 8.1

6

3

1

Windows Server 2012 R2

6

3

2 or 3

Windows 8

6

2

1

Windows Server 2012

6

2

2 or 3

Windows 7

6

1

1

Windows Server 2008 R2

6

1

2 or 3

Windows Server 2008

6

0

2 or 3

Windows Vista

6

0

1

Windows Server 2003 R2

5

2

Not returned

Windows Home Server

5

2

Not returned

Windows Server 2003

5

2

Not returned

Windows XP Professional x64 Edition

5

2

Not returned

Windows XP

5

1

Not returned

Windows 2000

5

0

Not returned

<15> Section 3.1.1.1: Windows uses the following schemas to describe the applicability of Windows Updates. The WUA uses Windows APIs to process the rules.

BaseApplicabilityRules Schema

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://schemas.microsoft.com/msus/2002/12/BaseApplicabilityRules" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:upd="http://schemas.microsoft.com/msus/2002/12/Update" xmlns:bt="http://schemas.microsoft.com/msus/2002/12/BaseTypes" xmlns:bar="http://schemas.microsoft.com/msus/2002/12/BaseApplicabilityRules" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <import namespace="http://schemas.microsoft.com/msus/2002/12/BaseTypes" />
  <import namespace="http://schemas.microsoft.com/msus/2002/12/Update" />
    <!--
  
  Operating system checks
    
  -->
  <element name="Platform" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the platform type to specified values.</documentation>
    </annotation>
    <complexType>
      <attribute name="PlatformID" type="bt:PlatformID" use="required"/>
    </complexType>
  </element>
  <element name="WindowsVersion" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compare's the operating system's version information to specified values.  Implemented using Win32 VerifyVersionInfo().  The Comparison attribute applies to MajorVersion, MinorVersion, BuildNumber, ServicePackMajor, and ServicePack Minor.  If Comparison is omitted, it is assumed to be set to EqualTo.  The AllSuitesMustBePresent attribute applies to SuiteMask.  If true, all specified suites must be present.  If false or omitted, one or more suites must be present.</documentation>
    </annotation>
    <complexType>
      <attribute name="Comparison" type="bt:ScalarComparison" use="optional"/>
      <attribute name="MajorVersion" type="unsignedInt" use="optional"/>
      <attribute name="MinorVersion" type="unsignedInt" use="optional"/>
      <attribute name="BuildNumber" type="unsignedInt" use="optional"/>
      <attribute name="ServicePackMajor" type="unsignedShort" use="optional"/>
      <attribute name="ServicePackMinor" type="unsignedShort" use="optional"/>
      <attribute name="AllSuitesMustBePresent" type="boolean" use="optional" default="false"/>
      <attribute name="SuiteMask" type="unsignedShort" use="optional"/>
      <attribute name="ProductType" type="unsignedShort" use="optional"/>
    </complexType>
  </element>
  <element name="PlatformVersion" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compare's the operating system's version information to specified values.  Implemented on Windows using Win32 VerifyVersionInfo().  Mac implementation TBD. The Comparison attribute applies to MajorVersion, MinorVersion, BuildNumber, ServicePackMajor, and ServicePack Minor.  If Comparison is omitted, it is assumed to be set to EqualTo.  The AllSuitesMustBePresent attribute applies to SuiteMask.  If true, all specified suites must be present.  If false or omitted, one or more suites must be present.</documentation>
    </annotation>
    <complexType>
      <attribute name="Comparison" type="bt:ScalarComparison" use="optional"/>
      <attribute name="MajorVersion" type="unsignedInt" use="optional"/>
      <attribute name="MinorVersion" type="unsignedInt" use="optional"/>
      <attribute name="BuildNumber" type="unsignedInt" use="optional"/>
      <attribute name="ServicePackMajor" type="unsignedShort" use="optional"/>
      <attribute name="ServicePackMinor" type="unsignedShort" use="optional"/>
      <attribute name="AllSuitesMustBePresent" type="boolean" use="optional" default="false"/>
      <attribute name="SuiteMask" type="unsignedShort" use="optional"/>
      <attribute name="ProductType" type="unsignedShort" use="optional"/>
    </complexType>
  </element>
  <element name="WindowsLanguage" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the operating system is localized to the specified language.  Always returns false if the Windows Multilanguage User Interface (MUI) is installed.</documentation>
    </annotation>
    <complexType>
      <attribute name="Language" type="language" use="required"/>
    </complexType>
  </element>
  <element name="PlatformLanguage" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the operating system is localized to the specified language.  Always returns false if the Windows Multilanguage User Interface (MUI) is installed.</documentation>
    </annotation>
    <complexType>
      <attribute name="Language" type="language" use="required"/>
    </complexType>
  </element>
  <element name="MuiInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the Windows Multilanguage User Interface (MUI) is installed.</documentation>
    </annotation>
    <complexType/>
  </element>
  <element name="MuiLanguageInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the specified language is installed for the Windows Multilanguage User Interface (MUI).  Always returns false if MUI itself is not installed.</documentation>
    </annotation>
    <complexType>
      <attribute name="Language" type="language" use="required"/>
    </complexType>
  </element>
  <element name="SystemMetric" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Calls Win32 GetSystemMetrics and compares the metric with the specified index to the specified value.</documentation>
    </annotation>
    <complexType>
      <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
      <attribute name="Index" type="int" use="required"/>
      <attribute name="Value" type="int" use="required"/>
    </complexType>
  </element>
  <!--
  
  Processor checks
    
  -->
  <element name="Processor" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the system's processor is the specified architecture, level, and revision.</documentation>
    </annotation>
    <complexType>
      <attribute name="Architecture" type="bt:ProcessorArchitecture" use="required"/>
      <attribute name="Level" type="bt:ProcessorLevel" use="optional"/>
      <attribute name="Revision" type="bt:ProcessorRevision" use="optional"/>
    </complexType>
  </element>
  <element name="NumberOfProcessors" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the number of processors in the system to a specified value.</documentation>
    </annotation>
    <complexType>
      <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
      <attribute name="Number" type="unsignedInt" use="required"/>
    </complexType>
  </element>
  <!-- Need someone to research locale/language/MUI rules -->
  <!--

  Cluster related checks

  -->
  <element name="ClusteredOS" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the operating system is part of a Windows Server Cluster.</documentation>
    </annotation>
    <complexType/>
  </element>
  <element name="ClusterResourceOwner" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the cluster resource specified by the registry value is owned by this computer (node). Returns false if the cluster resource could not be opened or it is not the owner, otherwise it results in an error.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryValueAttributes"/>
      <attribute name="Prefix" type="string" use="optional"/>
      <attribute name="Suffix" type="string" use="optional"/>
    </complexType>
  </element>
  <!--
  
  File system checks
    
  -->
  <complexType name="FileExistsType">
    <attribute name="Path" type="bt:FilePath" use="required"/>
    <attribute name="Version" type="bt:Version" use="optional"/>
    <attribute name="Created" type="bt:FileDate" use="optional"/>
    <attribute name="Modified" type="bt:FileDate" use="optional"/>
    <attribute name="Size" type="bt:FileSize" use="optional"/>
    <attribute name="Language" type="unsignedShort" use="optional"/>
  </complexType>
  <element name="FileExists" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks for the existence of the specified file.  If Csidl is specified, the MSUS Client will call Win32 SHGetFolderPath to retrieve the CSIDL and prepend it to Path to form the actual path to the file.  Before checking the file, the Client will canonicalize the path to remove duplicate backslashes (among other things).  If other optional metadata are specified, such as Version or Size, they must all match for this applicability rule to return true.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileExistsType">
          <attribute name="Csidl" type="bt:Csidl" use="optional"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <element name="FileExistsPrependRegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Same as FileExists, but the MSUS Client will prepend the specified REG_SZ value from the registry instead of a CSIDL.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileExistsType">
          <attributeGroup ref="bt:RegistryValueAttributes"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <complexType name="FileCompareVersionType">
    <attribute name="Path" type="bt:FilePath" use="required"/>
    <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
    <attribute name="Version" type="bt:Version" use="required"/>
  </complexType>
  <element name="FileVersion" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the specified file's version to the specified four-part version string.  If Csidl is specified, the MSUS Client will call Win32 SHGetFolderPath to retrieve the CSIDL and prepend it to Path to form the actual path to the file.  Before checking the file, the Client will canonicalize the path to remove duplicate backslashes (among other things).</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareVersionType">
          <attribute name="Csidl" type="bt:Csidl" use="optional"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <element name="FileVersionPrependRegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Same as FileVersion, but the MSUS Client will prepend the specified REG_SZ value from the registry instead of a CSIDL.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareVersionType">
          <attributeGroup ref="bt:RegistryValueAttributes"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <complexType name="FileCompareCreationDateType">
    <attribute name="Path" type="bt:FilePath" use="required"/>
    <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
    <attribute name="Created" type="bt:FileDate" use="required"/>
  </complexType>
  <element name="FileCreated" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the specified file's creation date to the specified value.  If Csidl is specified, the MSUS Client will call Win32 SHGetFolderPath to retrieve the CSIDL and prepend it to Path to form the actual path to the file.  Before checking the file, the Client will canonicalize the path to remove duplicate backslashes (among other things).</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareCreationDateType">
          <attribute name="Csidl" type="bt:Csidl" use="optional"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <element name="FileCreatedPrependRegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Same as FileCreated, but the MSUS Client will prepend the specified REG_SZ value from the registry instead of a CSIDL.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareCreationDateType">
          <attributeGroup ref="bt:RegistryValueAttributes"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <complexType name="FileCompareModificationDateType">
    <attribute name="Path" type="bt:FilePath" use="required"/>
    <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
    <attribute name="Modified" type="bt:FileDate" use="required"/>
  </complexType>
  <element name="FileModified" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the specified file's modification date to the specified value.  If Csidl is specified, the MSUS Client will call Win32 SHGetFolderPath to retrieve the CSIDL and prepend it to Path to form the actual path to the file.  Before checking the file, the Client will canonicalize the path to remove duplicate backslashes (among other things).</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareModificationDateType">
          <attribute name="Csidl" type="bt:Csidl" use="optional"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <element name="FileModifiedPrependRegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Same as FileModified, but the MSUS Client will prepend the specified REG_SZ value from the registry instead of a CSIDL.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareModificationDateType">
          <attributeGroup ref="bt:RegistryValueAttributes"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <complexType name="FileCompareSizeType">
    <attribute name="Path" type="bt:FilePath" use="required"/>
    <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
    <attribute name="Size" type="bt:FileSize" use="required"/>
  </complexType>
  <element name="FileSize" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the specified file's size to the specified value.  If Csidl is specified, the MSUS Client will call Win32 SHGetFolderPath to retrieve the CSIDL and prepend it to Path to form the actual path to the file.  Before checking the file, the Client will canonicalize the path to remove duplicate backslashes (among other things).</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareSizeType">
          <attribute name="Csidl" type="bt:Csidl" use="optional"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <element name="FileSizePrependRegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Same as FileSize, but the MSUS Client will prepend the specified REG_SZ value from the registry instead of a CSIDL.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareSizeType">
          <attributeGroup ref="bt:RegistryValueAttributes"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <!--
  
  Registry checks
    
  -->
  <element name="RegKeyExists" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks for the existence of the specified registry subkey.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryKeyAttributes"/>
    </complexType>
  </element>
  <element name="RegValueExists" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks for the existence of the specified registry value.  Checks the existence of the default value for the subkey when no value is specified.  Checks that the value is of a specific type when a type is specified.  The type must be REG_SZ if a value is not specified (the type of the default value of a subkey is always REG_SZ).</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryKeyAttributes"/>
      <attribute name="Value" type="bt:RegistryValue" use="optional"/>
      <attribute name="Type" type="bt:RegistryValueType" use="optional"/>
    </complexType>
  </element>
  <element name="RegDword" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified REG_DWORD registry value to a specified number.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryValueAttributes"/>
      <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
      <attribute name="Data" type="bt:RegistryValueDword" use="required"/>
    </complexType>
  </element>
  <element name="RegExpandSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified REG_EXPAND_SZ registry value to a specified string.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryValueAttributes"/>
      <attribute name="Comparison" type="bt:StringComparison" use="required"/>
      <attribute name="Data" type="bt:RegistryValueExpandSz" use="required"/>
    </complexType>
  </element>
  <element name="RegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified REG_SZ registry value to a specified string.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryValueAttributes"/>
      <attribute name="Comparison" type="bt:StringComparison" use="required"/>
      <attribute name="Data" type="bt:RegistryValueSz" use="required"/>
    </complexType>
  </element>
  <element name="RegSzToVersion" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified REG_SZ registry value to a specified four-part version string.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryValueAttributes"/>
      <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
      <attribute name="Data" type="bt:Version" use="required"/>
    </complexType>
  </element>
  <element name="WUv4RegKeyValue" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified registry value to a specified string, using the exact matching algorithm for the Windows Update v4 RegKeyValue detection rule.  WUv4RegKeyValue is provided for backward compatibility only, to ease the problem of migrating existing WUv4 items forward.  New updates should not use WUv4RegKeyValue.  Please see other specifications for details of the matching algorithm.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryKeyAttributes"/>
      <attribute name="Value" type="bt:RegistryValue" use="optional"/>
      <attribute name="Data" type="string" use="required"/>
    </complexType>
  </element>
  <element name="WUv4RegKeySubstring" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Examines a specified registry value to see if it contains a specified substring, using the exact comparison algorithm for the Windows Update v4 RegKeySubstring detection rule.  WUv4RegKeySubstringis provided for backward compatibility only, to ease the problem of migrating existing WUv4 items forward.  New updates should not use WUv4RegKeySubstring.  Please see other specifications for details of the matching algorithm.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryKeyAttributes"/>
      <attribute name="Value" type="bt:RegistryValue" use="optional"/>
      <attribute name="Data" type="string" use="required"/>
    </complexType>
  </element>
  <element name="RegKeyLoop" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Evaluates a rule against every subkey of the specified key.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="upd:ApplicabilityRuleElement"/>
      </sequence>
      <attributeGroup ref="bt:RegistryKeyAttributes"/>
      <attribute name="TrueIf" type="bt:LoopLogic" use="required"/>      
    </complexType>
  </element>

  <!--
  
  Software License checks
    
  -->
  <element name="LicenseValueExists" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks for the existence of the specified Software License value.</documentation>
    </annotation>
    <complexType>
      <attribute name="Value" type="bt:LicenseValue" use="required"/>
    </complexType>
  </element>
  <element name="LicenseDword" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified Software License DWORD value to a specified number.</documentation>
    </annotation>
    <complexType>
      <attribute name="Value" type="bt:LicenseValue" use="required"/>
      <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
      <attribute name="Data" type="bt:LicenseValueDword" use="required"/>
    </complexType>
  </element>

  <!--
  
  WMI queries
    
  -->
  <element name="WmiQuery" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Executes a specified WMI query and evaluates to true if one or more results are returned, or false of zero results are returned.</documentation>
    </annotation>
    <complexType>
      <attribute name="Namespace" type="bt:WmiNamespace" use="optional"/>
      <attribute name="WqlQuery" type="bt:WmiWqlQuery" use="required"/>
    </complexType>
  </element>
  <!--
  
  Internal State queries
    
  -->
  <element name="InstalledOnce" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the update has been installed on this client, based on the machine's installation history.</documentation>
    </annotation>
    <complexType/>
  </element>
    <!--
  
  A generic extension query for simple extensions to applicability rules.
  
    -->
    <element name="GenericQuery" substitutionGroup="upd:ApplicabilityRuleElement">
        <annotation>
            <documentation>Defines a generic query that can be leveraged to create simple extensions to applicability rules that can be evaluated by client servicing stacks. The Namespace attribute should be set to a string value that would prevent collisions between rules defined by different vendors.</documentation>
        </annotation>
        <complexType>
            <attribute name="Namespace" type="string" use="required" />
            <attribute name="Type" type="string" use="required" />
            <attribute name="Parameter" type="string" use="required" />
            <attribute name="Comparison" type="bt:ScalarComparison" use="optional" />
            <attribute name="Value" type="string" use="optional" />
        </complexType>
    </element>
</schema>

MsiApplicabilityRules Schema

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://schemas.microsoft.com/msus/2002/12/MsiApplicabilityRules" 
        xmlns="http://www.w3.org/2001/XMLSchema" 
        xmlns:bt="http://schemas.microsoft.com/msus/2002/12/BaseTypes" 
        xmlns:upd="http://schemas.microsoft.com/msus/2002/12/Update" 
        xmlns:msiar="http://schemas.microsoft.com/msus/2002/12/MsiApplicabilityRules" 
        xmlns:mspblob="http://www.microsoft.com/msi/patch_applicability.xsd" 
        elementFormDefault="qualified" 
        attributeFormDefault="unqualified">

  <import namespace="http://schemas.microsoft.com/msus/2002/12/BaseTypes" />
  <import namespace="http://schemas.microsoft.com/msus/2002/12/Update" />
  <import namespace="http://www.microsoft.com/msi/patch_applicability.xsd" />

   <!--
  
  MSI (Windows Installer) checks
    
  -->
  <element name="MsiProductInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified product is installed. Only the ProductCode is required, but the other attributes will be checked if they are supplied.</documentation>
    </annotation>
    <complexType>
      <attribute name="ProductCode" type="mspblob:GUID" use="required">
        <annotation>
          <documentation>MSI product code for the product to be checked.</documentation>
        </annotation>
      </attribute>
      <attribute name="VersionMax" type="mspblob:Version" use="optional">
        <annotation>
          <documentation>If present, this specified the maximum version of the product. If not present, there is no maximum version filter.</documentation>
        </annotation>
      </attribute>
      <attribute name="ExcludeVersionMax" type="boolean" use="optional" default="false">
        <annotation>
          <documentation>This is only valid if VersionMax is specified. If set to true, the value in VersionMax is not considered a valid version for this check. If set to false, VersionMax is valid.</documentation>
        </annotation>
      </attribute>
      <attribute name="VersionMin" type="mspblob:Version" use="optional">
        <annotation>
          <documentation>If present, this specified the minimum version of the product. If not present, there is no minimum version filter.</documentation>
        </annotation>
      </attribute>
      <attribute name="ExcludeVersionMin" type="boolean" use="optional" default="false">
        <annotation>
          <documentation>This is only valid if VersionMin is specified. If set to true, the value in VersionMin is not considered a valid version for this check. If set to false, VersionMin is valid.</documentation>
        </annotation>
      </attribute>
      <attribute name="Language" type="int" use="optional">
        <annotation>
          <documentation>If present, specifies the language to be filtered on. If not present, all languages are considered valid.</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  
  <element name="MsiFeatureInstalledForProduct" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified feature(s) are installed for one (optionally all) of the specified products.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element name="Feature" type="bt:MsiFeatureName" minOccurs="1" maxOccurs="unbounded" />
        <element name="Product" type="mspblob:GUID" minOccurs="1" maxOccurs="unbounded" />
      </sequence>
      <attribute name="AllFeaturesRequired" type="boolean" use="optional" default="false" />
      <attribute name="AllProductsRequired" type="boolean" use="optional" default="false" />
    </complexType>
  </element>
  
  <element name="MsiComponentInstalledForProduct" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified component(s) are installed for one (optionally all) of the specified products.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element name="Component" type="bt:MsiComponentCode" minOccurs="1" maxOccurs="unbounded" />
        <element name="Product" type="mspblob:GUID" minOccurs="1" maxOccurs="unbounded" />
      </sequence>
      <attribute name="AllComponentsRequired" type="boolean" use="optional" default="false" />
      <attribute name="AllProductsRequired" type="boolean" use="optional" default="false" />
    </complexType>
  </element>
  
  <element name="MsiPatchInstalledForProduct" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified patch is installed for the specified product.</documentation>
    </annotation>
    <complexType>
      <attribute name="PatchCode" type="mspblob:GUID" use="required">
        <annotation>
          <documentation>MSI patch code for the patch whose install status is to be checked.</documentation>
        </annotation>
      </attribute>
      <attribute name="ProductCode" type="mspblob:GUID" use="required">
        <annotation>
          <documentation>MSI product code for the product to be checked.</documentation>
        </annotation>
      </attribute>
      <attribute name="VersionMax" type="mspblob:Version" use="optional">
        <annotation>
          <documentation>If present, this specified the maximum version of the product. If not present, there is no maximum version filter.</documentation>
        </annotation>
      </attribute>
      <attribute name="ExcludeVersionMax" type="boolean" use="optional" default="false">
        <annotation>
          <documentation>This is only valid if VersionMax is specified. If set to true, the value in VersionMax is not considered a valid version for this check. If set to false, VersionMax is valid.</documentation>
        </annotation>
      </attribute>
      <attribute name="VersionMin" type="mspblob:Version" use="optional">
        <annotation>
          <documentation>If present, this specified the minimum version of the product. If not present, there is no minimum version filter.</documentation>
        </annotation>
      </attribute>
      <attribute name="ExcludeVersionMin" type="boolean" use="optional" default="false">
        <annotation>
          <documentation>This is only valid if VersionMin is specified. If set to true, the value in VersionMin is not considered a valid version for this check. If set to false, VersionMin is valid.</documentation>
        </annotation>
      </attribute>
      <attribute name="Language" type="int" use="optional">
        <annotation>
          <documentation>If present, specifies the language to be filtered on. If not present, all languages are considered valid.</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <!--
  
  MSP (Windows Installer Patch) checks - these rely on the MSP metadata
    
  -->
  <element name="MsiPatchInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified patch is installed. This rule uses the MSP metadata to perform the check.</documentation>
    </annotation>
  </element>
  
  <element name="MsiPatchSuperseded" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified patch is superseded. This rule uses the MSP metadata to perform the check.</documentation>
    </annotation>
  </element>
  
  <element name="MsiPatchInstallable" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified patch is installable. This rule uses the MSP metadata to perform the check.</documentation>
    </annotation>
  </element>
  <!--
  
  MSI (Windows Installer Application) checks - these rely on the MSI metadata
    
  -->
  <element name="MsiApplicationInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified application is installed. This rule uses the MSI metadata to perform the check.</documentation>
    </annotation>
  </element>

  <element name="MsiApplicationSuperseded" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified application is superseded. This rule uses the MSI metadata to perform the check.</documentation>
    </annotation>
  </element>

  <element name="MsiApplicationInstallable" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified application is installable. This rule uses the MSI metadata to perform the check.</documentation>
    </annotation>
  </element>
  <!--
  
  MSP (Windows Installer Patch) metadata
    
  -->
  <complexType name="MsiPatchMetadataStuff">
    <annotation>
      <documentation>The metadata for an MSP (Windows Installer Patch). This metadata is used by the MsiPatchInstalled, MsiPatchSuperseded, and MsiPatchInstallable applicability rules.</documentation>
    </annotation>
    <sequence>
      <element ref="mspblob:MsiPatch" />
      <element name="FallbackPatchCode" type="mspblob:GUID" minOccurs="0" maxOccurs="1" />
    </sequence>
  </complexType>
    
  <element name="MsiPatchMetadata" substitutionGroup="upd:ApplicabilityMetadataElement" type="msiar:MsiPatchMetadataStuff"/>
  <!--
  
  MSI (Windows Installer Application) metadata
    
  -->

  <simpleType name="MsiRecacheReinstallOption">
    <annotation>
      <documentation>An enumeration defining scenarios when RecacheReinstall can be enabled for MSI updates. </documentation>
    </annotation>
    <restriction base="token">
      <enumeration value="Never" />
      <enumeration value="LowerVersion" />
      <enumeration value="AnyVersion" />
    </restriction>
  </simpleType>

  <complexType name="MsiApplicationMetadataStuff">
    <annotation>
      <documentation>The metadata for an MSI (Windows Installer Application). This metadata is used by the MsiApplicationInstalled, MsiApplicationSuperseded, and MsiApplicationInstallable applicability rules.</documentation>
    </annotation>
    <sequence>
      <element name="ProductCode" minOccurs="1" maxOccurs="1">
        <complexType>
          <simpleContent>
            <extension base="mspblob:GUID">
              <attribute name="Version" type="mspblob:Version" use="optional">
                <annotation>
                  <documentation>Specifies the product version used in recache-reinstall version comparisons.</documentation>
                </annotation>
              </attribute>
              <attribute name="UseRecacheReinstall" type="msiar:MsiRecacheReinstallOption" use="optional">
                <annotation>
                  <documentation>Enables recache-reinstall support for this MSI update. Valid options are "Never", "LowerVersion", and "AnyVersion".</documentation>
                </annotation>
              </attribute>
            </extension>
          </simpleContent>
        </complexType>
      </element>
    </sequence>
  </complexType>

  <element name="MsiApplicationMetadata" substitutionGroup="upd:ApplicabilityMetadataElement" type="msiar:MsiApplicationMetadataStuff"/>

</schema>

WindowsDriver Schema

<?xml version="1.0" encoding="UTF-8" ?>
<schema targetNamespace="http://schemas.microsoft.com/msus/2002/12/UpdateHandlers/WindowsDriver"
xmlns:tns="http://schemas.microsoft.com/msus/2002/12/UpdateHandlers/WindowsDriver"
xmlns:bt="http://schemas.microsoft.com/msus/2002/12/BaseTypes"
xmlns:upd="http://schemas.microsoft.com/msus/2002/12/Update" xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">

  <import namespace="http://schemas.microsoft.com/msus/2002/12/BaseTypes" />
  <import namespace="http://schemas.microsoft.com/msus/2002/12/Update" />

<!--
  
  Primitive types that are specific to Windows Drivers
    
  -->
<simpleType name="HardwareID">
<annotation>
<documentation>A hardware ID.</documentation>
</annotation>
<restriction base="string" >
<maxLength value="200" />
</restriction>
</simpleType>
<simpleType name="DriverCompany">
<annotation>
<documentation>A driver manufacturer string.</documentation>
</annotation>
<restriction base="string">
<maxLength value="256" />
</restriction>
</simpleType>
<simpleType name="DriverProvider">
<annotation>
<documentation>A driver provider string.</documentation>
</annotation>
<restriction base="string">
<maxLength value="256" />
</restriction>
</simpleType>
<simpleType name="DriverManufacturer">
<annotation>
<documentation>A driver manufacturer string.</documentation>
</annotation>
<restriction base="string">
<maxLength value="256" />
</restriction>
</simpleType>
<simpleType name="DriverClass">
<annotation>
<documentation>A SUS driver classification (e.g., Printers). This is mapped from the driver's INF class by WHOS (WHQL) before publishing to MU. The only guaranteed mapping is from INF "Printer" class to SUS "Printers" classification.</documentation>
</annotation>
<restriction base="string">
<maxLength value="256" />
</restriction>
</simpleType>
<simpleType name="DriverModel">
<annotation>
<documentation>A driver model string.</documentation>
</annotation>
<restriction base="string">
<maxLength value="256" />
</restriction>
</simpleType>
<simpleType name="DriverVerVersion">
<annotation>
<documentation>The drivers version string written as four integers separated by dots (e.g., "1.2.3.4"). The DriverVerVersion is derived from information in the driver INF.</documentation>
</annotation>
<restriction base="bt:Version"/>
</simpleType>
<!--
  
  The main data-type for windows drivers
    
  -->
<complexType name="WindowsDriverMetaData">
<annotation>
<documentation>Meta-data needed by both the driver installation handler and the driver applicability rules evaluator.</documentation>
</annotation>
<sequence>
<element name="CompatibleProvider" type="tns:DriverProvider" minOccurs="0" maxOccurs="unbounded">
<annotation>
<documentation>Compatible driver providers. This information is only needed for printer drivers, because printer drivers are only offered as updates to existing drivers if the existing driver provider is the same as the new driver'sprovider, or if it is one of the new driver's compatible providers.</documentation>
</annotation>
</element>
</sequence>
<attribute name="HardwareID" type="tns:HardwareID" use="required">
<annotation>
<documentation>The hardware ID (HWID) or compatible ID that this driver must match to be applicable. The HardwareID is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="DriverVerDate" type="date" use="required">
<annotation>
<documentation>The driver version date. The driver version date is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="DriverVerVersion" type="tns:DriverVerVersion" use="required">
</attribute>
<attribute name="WhqlDriverID" type="unsignedInt" use="required">
<annotation>
<documentation>The WHQL driver submission number. The driver ID is assigned to the driver by WHQL as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="Class" type="tns:DriverClass" use="required">
<annotation>
<documentation>The class of driver (e.g., printer). The driver class is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="Company" type="tns:DriverCompany" use="required">
<annotation>
<documentation>The company that signed the driver. The company is derived from the cab signature as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="Provider" type="tns:DriverProvider" use="required">
<annotation>
<documentation>The company providing the driver. The provider is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="Manufacturer" type="tns:DriverManufacturer" use="required">
<annotation>
<documentation>The company that manufactured the driver. The manufacturer is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="Model" type="tns:DriverModel" use="required">
<annotation>
<documentation>The model of the device for which this driver is intended. The device model is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
</complexType>
<!--
  
  The <WindowsDriverMetaData> element, used by the driver applicability evaluation engine.
    
 -->
<element name="WindowsDriverMetaData" substitutionGroup="upd:ApplicabilityMetadataElement" type="tns:WindowsDriverMetaData">
<annotation>
<documentation>The metadata for a windows driver. This metadata is used by all the driver applicability rules as well as the driver installation handler.</documentation>
</annotation>
</element>
<element name="WindowsDriverInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
<annotation>
<documentation>Checks that the specified update is installed. This rule uses the applicability metadata to perform the check. It returns true if this driver is an equal match as the currently installed driver.</documentation>
</annotation>
<complexType />
</element>
<element name="WindowsDriverSuperseded" substitutionGroup="upd:ApplicabilityRuleElement">
<annotation>
<documentation>Checks that the specified update is superseded. This rule uses the applicability metadata to perform the check. It returns true if this driver is a worse match as the currently installed driver.</documentation>
</annotation>
<complexType />
</element>
<element name="WindowsDriverInstallable" substitutionGroup="upd:ApplicabilityRuleElement">
<annotation>
<documentation>Checks that the specified update is installable. This rule uses the applicability metadata to perform the check. It returns true if this driver is a better match as the currently installed driver.</documentation>
</annotation>
<complexType />
</element>
</schema>

<16> Section 3.1.1.1: WUA expects the /Update/LocalizedPropertiesCollection/EulaFile node to conform to the following schema.

    <complexType name="EulaFile">
        <annotation>
            <documentation>A localized end user license agreement (EULA) file for the update. The MSUS Client will download the EULA to the local hard drive and validate Digest.</documentation>
        </annotation>
        <!-- The following sequence is expected only by Windows 8 and Windows Server 2012 -->
        <sequence>
            <element name="AdditionalDigest" minOccurs="0" maxOccurs="unbounded" type="bt:AdditionalDigest"></element>
        </sequence>
        <attribute name="Digest" type="bt:FileDigest" use="required" />
        <attribute name="DigestAlgorithm" type="bt:FileDigestAlgorithm" use="required" />
        <attribute name="FileName" type="bt:FileName" use="required" />
        <attribute name="Size" type="bt:FileSize" use="required" />
        <attribute name="Language" type="upd:LocalizedPropertiesLanguage" use="required" />
    </complexType>

WUA uses the Digest attribute both to obtain the download URL for the EULA file (using the GetFileLocations method) and to verify the authenticity of the EULA file downloaded from the server. WUA calculates the SHA-1 hash of the downloaded EULA file and compares it to the SHA-1 hash contained in the Digest attribute; if the two hashes do not match, WUA discards the file.

In Windows 8, Windows Server 2012, Windows 8.1, and Windows Server 2012 R2, WUA performs an additional security check on downloaded EULA files. WUA will find the <AdditionalDigest> element whose Algorithm attribute is equal to "SHA256". It will take the contents of that <AdditionalDigest> element, compare it to the calculated SHA-256 hash of the downloaded EULA file, and reject the content file if the two hashes do not match (or if the update metadata does not contain the additional digest information.

<17> Section 3.1.1.1: WSUS 2.0 populates table entries when the clients call the GetAuthorizationCookie (section 2.2.2.1.1) method.

<18> Section 3.1.1.1: WSUS populates table entries based on administrative configuration. The entries are never populated automatically by the server.

<19> Section 3.1.1.1: WSUS populates table entries based on administrative configuration. For more information, see [WSUS].

<20> Section 3.1.5.3: WSUS returns InternalServerError

<21> Section 3.1.5.3: WSUS returns InternalServerError

<22> Section 3.1.5.6: WSUS 3.0 SP2 validates the number of categories to be less than 200. Otherwise, it returns an error code of InvalidParameters. The StartCategoryScan method is not supported on WSUS 2.0, WSUS 2.0 SP1, WSUS 3.0, or WSUS 3.0 SP1.

<23> Section 3.1.5.7: Windows uses the following schemas to describe the applicability of Windows Updates. The Windows Update Agent uses Windows system APIs to process the rules.

BaseApplicabilityRules Schema

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://schemas.microsoft.com/msus/2002/12/BaseApplicabilityRules" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:upd="http://schemas.microsoft.com/msus/2002/12/Update" xmlns:bt="http://schemas.microsoft.com/msus/2002/12/BaseTypes" xmlns:bar="http://schemas.microsoft.com/msus/2002/12/BaseApplicabilityRules" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <import namespace="http://schemas.microsoft.com/msus/2002/12/BaseTypes" />
  <import namespace="http://schemas.microsoft.com/msus/2002/12/Update" />
    <!--
  
  Operating system checks
    
  -->
  <element name="Platform" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the platform type to specified values.</documentation>
    </annotation>
    <complexType>
      <attribute name="PlatformID" type="bt:PlatformID" use="required"/>
    </complexType>
  </element>
  <element name="WindowsVersion" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compare's the operating system's version information to specified values.  Implemented using Win32 VerifyVersionInfo().  The Comparison attribute applies to MajorVersion, MinorVersion, BuildNumber, ServicePackMajor, and ServicePack Minor.  If Comparison is omitted, it is assumed to be set to EqualTo.  The AllSuitesMustBePresent attribute applies to SuiteMask.  If true, all specified suites must be present.  If false or omitted, one or more suites must be present.</documentation>
    </annotation>
    <complexType>
      <attribute name="Comparison" type="bt:ScalarComparison" use="optional"/>
      <attribute name="MajorVersion" type="unsignedInt" use="optional"/>
      <attribute name="MinorVersion" type="unsignedInt" use="optional"/>
      <attribute name="BuildNumber" type="unsignedInt" use="optional"/>
      <attribute name="ServicePackMajor" type="unsignedShort" use="optional"/>
      <attribute name="ServicePackMinor" type="unsignedShort" use="optional"/>
      <attribute name="AllSuitesMustBePresent" type="boolean" use="optional" default="false"/>
      <attribute name="SuiteMask" type="unsignedShort" use="optional"/>
      <attribute name="ProductType" type="unsignedShort" use="optional"/>
    </complexType>
  </element>
  <element name="PlatformVersion" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compare's the operating system's version information to specified values.  Implemented on Windows using Win32 VerifyVersionInfo().  Mac implementation TBD. The Comparison attribute applies to MajorVersion, MinorVersion, BuildNumber, ServicePackMajor, and ServicePack Minor.  If Comparison is omitted, it is assumed to be set to EqualTo.  The AllSuitesMustBePresent attribute applies to SuiteMask.  If true, all specified suites must be present.  If false or omitted, one or more suites must be present.</documentation>
    </annotation>
    <complexType>
      <attribute name="Comparison" type="bt:ScalarComparison" use="optional"/>
      <attribute name="MajorVersion" type="unsignedInt" use="optional"/>
      <attribute name="MinorVersion" type="unsignedInt" use="optional"/>
      <attribute name="BuildNumber" type="unsignedInt" use="optional"/>
      <attribute name="ServicePackMajor" type="unsignedShort" use="optional"/>
      <attribute name="ServicePackMinor" type="unsignedShort" use="optional"/>
      <attribute name="AllSuitesMustBePresent" type="boolean" use="optional" default="false"/>
      <attribute name="SuiteMask" type="unsignedShort" use="optional"/>
      <attribute name="ProductType" type="unsignedShort" use="optional"/>
    </complexType>
  </element>
  <element name="WindowsLanguage" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the operating system is localized to the specified language.  Always returns false if the Windows Multilanguage User Interface (MUI) is installed.</documentation>
    </annotation>
    <complexType>
      <attribute name="Language" type="language" use="required"/>
    </complexType>
  </element>
  <element name="PlatformLanguage" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the operating system is localized to the specified language.  Always returns false if the Windows Multilanguage User Interface (MUI) is installed.</documentation>
    </annotation>
    <complexType>
      <attribute name="Language" type="language" use="required"/>
    </complexType>
  </element>
  <element name="MuiInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the Windows Multilanguage User Interface (MUI) is installed.</documentation>
    </annotation>
    <complexType/>
  </element>
  <element name="MuiLanguageInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the specified language is installed for the Windows Multilanguage User Interface (MUI).  Always returns false if MUI itself is not installed.</documentation>
    </annotation>
    <complexType>
      <attribute name="Language" type="language" use="required"/>
    </complexType>
  </element>
  <element name="SystemMetric" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Calls Win32 GetSystemMetrics and compares the metric with the specified index to the specified value.</documentation>
    </annotation>
    <complexType>
      <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
      <attribute name="Index" type="int" use="required"/>
      <attribute name="Value" type="int" use="required"/>
    </complexType>
  </element>
  <!--
  
  Processor checks
    
  -->
  <element name="Processor" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the system's processor is the specified architecture, level, and revision.</documentation>
    </annotation>
    <complexType>
      <attribute name="Architecture" type="bt:ProcessorArchitecture" use="required"/>
      <attribute name="Level" type="bt:ProcessorLevel" use="optional"/>
      <attribute name="Revision" type="bt:ProcessorRevision" use="optional"/>
    </complexType>
  </element>
  <element name="NumberOfProcessors" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the number of processors in the system to a specified value.</documentation>
    </annotation>
    <complexType>
      <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
      <attribute name="Number" type="unsignedInt" use="required"/>
    </complexType>
  </element>
  <!-- Need someone to research locale/language/MUI rules -->
  <!--

  Cluster related checks

  -->
  <element name="ClusteredOS" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the operating system is part of a Windows Server Cluster.</documentation>
    </annotation>
    <complexType/>
  </element>
  <element name="ClusterResourceOwner" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the cluster resource specified by the registry value is owned by this computer (node). Returns false if the cluster resource could not be opened or it is not the owner, otherwise it results in an error.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryValueAttributes"/>
      <attribute name="Prefix" type="string" use="optional"/>
      <attribute name="Suffix" type="string" use="optional"/>
    </complexType>
  </element>
  <!--
  
  File system checks
    
  -->
  <complexType name="FileExistsType">
    <attribute name="Path" type="bt:FilePath" use="required"/>
    <attribute name="Version" type="bt:Version" use="optional"/>
    <attribute name="Created" type="bt:FileDate" use="optional"/>
    <attribute name="Modified" type="bt:FileDate" use="optional"/>
    <attribute name="Size" type="bt:FileSize" use="optional"/>
    <attribute name="Language" type="unsignedShort" use="optional"/>
  </complexType>
  <element name="FileExists" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks for the existence of the specified file.  If Csidl is specified, the MSUS Client will call Win32 SHGetFolderPath to retrieve the CSIDL and prepend it to Path to form the actual path to the file.  Before checking the file, the Client will canonicalize the path to remove duplicate backslashes (among other things).  If other optional metadata are specified, such as Version or Size, they must all match for this applicability rule to return true.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileExistsType">
          <attribute name="Csidl" type="bt:Csidl" use="optional"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <element name="FileExistsPrependRegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Same as FileExists, but the MSUS Client will prepend the specified REG_SZ value from the registry instead of a CSIDL.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileExistsType">
          <attributeGroup ref="bt:RegistryValueAttributes"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <complexType name="FileCompareVersionType">
    <attribute name="Path" type="bt:FilePath" use="required"/>
    <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
    <attribute name="Version" type="bt:Version" use="required"/>
  </complexType>
  <element name="FileVersion" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the specified file's version to the specified four-part version string.  If Csidl is specified, the MSUS Client will call Win32 SHGetFolderPath to retrieve the CSIDL and prepend it to Path to form the actual path to the file.  Before checking the file, the Client will canonicalize the path to remove duplicate backslashes (among other things).</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareVersionType">
          <attribute name="Csidl" type="bt:Csidl" use="optional"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <element name="FileVersionPrependRegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Same as FileVersion, but the MSUS Client will prepend the specified REG_SZ value from the registry instead of a CSIDL.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareVersionType">
          <attributeGroup ref="bt:RegistryValueAttributes"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <complexType name="FileCompareCreationDateType">
    <attribute name="Path" type="bt:FilePath" use="required"/>
    <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
    <attribute name="Created" type="bt:FileDate" use="required"/>
  </complexType>
  <element name="FileCreated" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the specified file's creation date to the specified value.  If Csidl is specified, the MSUS Client will call Win32 SHGetFolderPath to retrieve the CSIDL and prepend it to Path to form the actual path to the file.  Before checking the file, the Client will canonicalize the path to remove duplicate backslashes (among other things).</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareCreationDateType">
          <attribute name="Csidl" type="bt:Csidl" use="optional"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <element name="FileCreatedPrependRegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Same as FileCreated, but the MSUS Client will prepend the specified REG_SZ value from the registry instead of a CSIDL.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareCreationDateType">
          <attributeGroup ref="bt:RegistryValueAttributes"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <complexType name="FileCompareModificationDateType">
    <attribute name="Path" type="bt:FilePath" use="required"/>
    <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
    <attribute name="Modified" type="bt:FileDate" use="required"/>
  </complexType>
  <element name="FileModified" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the specified file's modification date to the specified value.  If Csidl is specified, the MSUS Client will call Win32 SHGetFolderPath to retrieve the CSIDL and prepend it to Path to form the actual path to the file.  Before checking the file, the Client will canonicalize the path to remove duplicate backslashes (among other things).</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareModificationDateType">
          <attribute name="Csidl" type="bt:Csidl" use="optional"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <element name="FileModifiedPrependRegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Same as FileModified, but the MSUS Client will prepend the specified REG_SZ value from the registry instead of a CSIDL.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareModificationDateType">
          <attributeGroup ref="bt:RegistryValueAttributes"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <complexType name="FileCompareSizeType">
    <attribute name="Path" type="bt:FilePath" use="required"/>
    <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
    <attribute name="Size" type="bt:FileSize" use="required"/>
  </complexType>
  <element name="FileSize" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares the specified file's size to the specified value.  If Csidl is specified, the MSUS Client will call Win32 SHGetFolderPath to retrieve the CSIDL and prepend it to Path to form the actual path to the file.  Before checking the file, the Client will canonicalize the path to remove duplicate backslashes (among other things).</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareSizeType">
          <attribute name="Csidl" type="bt:Csidl" use="optional"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <element name="FileSizePrependRegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Same as FileSize, but the MSUS Client will prepend the specified REG_SZ value from the registry instead of a CSIDL.</documentation>
    </annotation>
    <complexType>
      <complexContent>
        <extension base="bar:FileCompareSizeType">
          <attributeGroup ref="bt:RegistryValueAttributes"/>
        </extension>
      </complexContent>
    </complexType>
  </element>
  <!--
  
  Registry checks
    
  -->
  <element name="RegKeyExists" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks for the existence of the specified registry subkey.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryKeyAttributes"/>
    </complexType>
  </element>
  <element name="RegValueExists" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks for the existence of the specified registry value.  Checks the existence of the default value for the subkey when no value is specified.  Checks that the value is of a specific type when a type is specified.  The type must be REG_SZ if a value is not specified (the type of the default value of a subkey is always REG_SZ).</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryKeyAttributes"/>
      <attribute name="Value" type="bt:RegistryValue" use="optional"/>
      <attribute name="Type" type="bt:RegistryValueType" use="optional"/>
    </complexType>
  </element>
  <element name="RegDword" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified REG_DWORD registry value to a specified number.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryValueAttributes"/>
      <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
      <attribute name="Data" type="bt:RegistryValueDword" use="required"/>
    </complexType>
  </element>
  <element name="RegExpandSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified REG_EXPAND_SZ registry value to a specified string.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryValueAttributes"/>
      <attribute name="Comparison" type="bt:StringComparison" use="required"/>
      <attribute name="Data" type="bt:RegistryValueExpandSz" use="required"/>
    </complexType>
  </element>
  <element name="RegSz" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified REG_SZ registry value to a specified string.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryValueAttributes"/>
      <attribute name="Comparison" type="bt:StringComparison" use="required"/>
      <attribute name="Data" type="bt:RegistryValueSz" use="required"/>
    </complexType>
  </element>
  <element name="RegSzToVersion" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified REG_SZ registry value to a specified four-part version string.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryValueAttributes"/>
      <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
      <attribute name="Data" type="bt:Version" use="required"/>
    </complexType>
  </element>
  <element name="WUv4RegKeyValue" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified registry value to a specified string, using the exact matching algorithm for the Windows Update v4 RegKeyValue detection rule.  WUv4RegKeyValue is provided for backward compatibility only, to ease the problem of migrating existing WUv4 items forward.  New updates should not use WUv4RegKeyValue.  Please see other specifications for details of the matching algorithm.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryKeyAttributes"/>
      <attribute name="Value" type="bt:RegistryValue" use="optional"/>
      <attribute name="Data" type="string" use="required"/>
    </complexType>
  </element>
  <element name="WUv4RegKeySubstring" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Examines a specified registry value to see if it contains a specified substring, using the exact comparison algorithm for the Windows Update v4 RegKeySubstring detection rule.  WUv4RegKeySubstringis provided for backward compatibility only, to ease the problem of migrating existing WUv4 items forward.  New updates should not use WUv4RegKeySubstring.  Please see other specifications for details of the matching algorithm.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="bt:RegistryKeyAttributes"/>
      <attribute name="Value" type="bt:RegistryValue" use="optional"/>
      <attribute name="Data" type="string" use="required"/>
    </complexType>
  </element>
  <element name="RegKeyLoop" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Evaluates a rule against every subkey of the specified key.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="upd:ApplicabilityRuleElement"/>
      </sequence>
      <attributeGroup ref="bt:RegistryKeyAttributes"/>
      <attribute name="TrueIf" type="bt:LoopLogic" use="required"/>      
    </complexType>
  </element>

  <!--
  
  Software License checks
    
  -->
  <element name="LicenseValueExists" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks for the existence of the specified Software License value.</documentation>
    </annotation>
    <complexType>
      <attribute name="Value" type="bt:LicenseValue" use="required"/>
    </complexType>
  </element>
  <element name="LicenseDword" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Compares a specified Software License DWORD value to a specified number.</documentation>
    </annotation>
    <complexType>
      <attribute name="Value" type="bt:LicenseValue" use="required"/>
      <attribute name="Comparison" type="bt:ScalarComparison" use="required"/>
      <attribute name="Data" type="bt:LicenseValueDword" use="required"/>
    </complexType>
  </element>

  <!--
  
  WMI queries
    
  -->
  <element name="WmiQuery" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Executes a specified WMI query and evaluates to true if one or more results are returned, or false of zero results are returned.</documentation>
    </annotation>
    <complexType>
      <attribute name="Namespace" type="bt:WmiNamespace" use="optional"/>
      <attribute name="WqlQuery" type="bt:WmiWqlQuery" use="required"/>
    </complexType>
  </element>
  <!--
  
  Internal State queries
    
  -->
  <element name="InstalledOnce" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Returns true if the update has been installed on this client, based on the machine's installation history.</documentation>
    </annotation>
    <complexType/>
  </element>
    <!--
  
  A generic extension query for simple extensions to applicability rules.
  
    -->
    <element name="GenericQuery" substitutionGroup="upd:ApplicabilityRuleElement">
        <annotation>
            <documentation>Defines a generic query that can be leveraged to create simple extensions to applicability rules that can be evaluated by client servicing stacks. The Namespace attribute should be set to a string value that would prevent collisions between rules defined by different vendors.</documentation>
        </annotation>
        <complexType>
            <attribute name="Namespace" type="string" use="required" />
            <attribute name="Type" type="string" use="required" />
            <attribute name="Parameter" type="string" use="required" />
            <attribute name="Comparison" type="bt:ScalarComparison" use="optional" />
            <attribute name="Value" type="string" use="optional" />
        </complexType>
    </element>
</schema>

MsiApplicabilityRules Schema

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://schemas.microsoft.com/msus/2002/12/MsiApplicabilityRules" 
        xmlns="http://www.w3.org/2001/XMLSchema" 
        xmlns:bt="http://schemas.microsoft.com/msus/2002/12/BaseTypes" 
        xmlns:upd="http://schemas.microsoft.com/msus/2002/12/Update" 
        xmlns:msiar="http://schemas.microsoft.com/msus/2002/12/MsiApplicabilityRules" 
        xmlns:mspblob="http://www.microsoft.com/msi/patch_applicability.xsd" 
        elementFormDefault="qualified" 
        attributeFormDefault="unqualified">

  <import namespace="http://schemas.microsoft.com/msus/2002/12/BaseTypes" />
  <import namespace="http://schemas.microsoft.com/msus/2002/12/Update" />
  <import namespace="http://www.microsoft.com/msi/patch_applicability.xsd" />

   <!--
  
  MSI (Windows Installer) checks
    
  -->
  <element name="MsiProductInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified product is installed. Only the ProductCode is required, but the other attributes will be checked if they are supplied.</documentation>
    </annotation>
    <complexType>
      <attribute name="ProductCode" type="mspblob:GUID" use="required">
        <annotation>
          <documentation>MSI product code for the product to be checked.</documentation>
        </annotation>
      </attribute>
      <attribute name="VersionMax" type="mspblob:Version" use="optional">
        <annotation>
          <documentation>If present, this specified the maximum version of the product. If not present, there is no maximum version filter.</documentation>
        </annotation>
      </attribute>
      <attribute name="ExcludeVersionMax" type="boolean" use="optional" default="false">
        <annotation>
          <documentation>This is only valid if VersionMax is specified. If set to true, the value in VersionMax is not considered a valid version for this check. If set to false, VersionMax is valid.</documentation>
        </annotation>
      </attribute>
      <attribute name="VersionMin" type="mspblob:Version" use="optional">
        <annotation>
          <documentation>If present, this specified the minimum version of the product. If not present, there is no minimum version filter.</documentation>
        </annotation>
      </attribute>
      <attribute name="ExcludeVersionMin" type="boolean" use="optional" default="false">
        <annotation>
          <documentation>This is only valid if VersionMin is specified. If set to true, the value in VersionMin is not considered a valid version for this check. If set to false, VersionMin is valid.</documentation>
        </annotation>
      </attribute>
      <attribute name="Language" type="int" use="optional">
        <annotation>
          <documentation>If present, specifies the language to be filtered on. If not present, all languages are considered valid.</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  
  <element name="MsiFeatureInstalledForProduct" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified feature(s) are installed for one (optionally all) of the specified products.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element name="Feature" type="bt:MsiFeatureName" minOccurs="1" maxOccurs="unbounded" />
        <element name="Product" type="mspblob:GUID" minOccurs="1" maxOccurs="unbounded" />
      </sequence>
      <attribute name="AllFeaturesRequired" type="boolean" use="optional" default="false" />
      <attribute name="AllProductsRequired" type="boolean" use="optional" default="false" />
    </complexType>
  </element>
  
  <element name="MsiComponentInstalledForProduct" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified component(s) are installed for one (optionally all) of the specified products.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element name="Component" type="bt:MsiComponentCode" minOccurs="1" maxOccurs="unbounded" />
        <element name="Product" type="mspblob:GUID" minOccurs="1" maxOccurs="unbounded" />
      </sequence>
      <attribute name="AllComponentsRequired" type="boolean" use="optional" default="false" />
      <attribute name="AllProductsRequired" type="boolean" use="optional" default="false" />
    </complexType>
  </element>
  
  <element name="MsiPatchInstalledForProduct" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified patch is installed for the specified product.</documentation>
    </annotation>
    <complexType>
      <attribute name="PatchCode" type="mspblob:GUID" use="required">
        <annotation>
          <documentation>MSI patch code for the patch whose install status is to be checked.</documentation>
        </annotation>
      </attribute>
      <attribute name="ProductCode" type="mspblob:GUID" use="required">
        <annotation>
          <documentation>MSI product code for the product to be checked.</documentation>
        </annotation>
      </attribute>
      <attribute name="VersionMax" type="mspblob:Version" use="optional">
        <annotation>
          <documentation>If present, this specified the maximum version of the product. If not present, there is no maximum version filter.</documentation>
        </annotation>
      </attribute>
      <attribute name="ExcludeVersionMax" type="boolean" use="optional" default="false">
        <annotation>
          <documentation>This is only valid if VersionMax is specified. If set to true, the value in VersionMax is not considered a valid version for this check. If set to false, VersionMax is valid.</documentation>
        </annotation>
      </attribute>
      <attribute name="VersionMin" type="mspblob:Version" use="optional">
        <annotation>
          <documentation>If present, this specified the minimum version of the product. If not present, there is no minimum version filter.</documentation>
        </annotation>
      </attribute>
      <attribute name="ExcludeVersionMin" type="boolean" use="optional" default="false">
        <annotation>
          <documentation>This is only valid if VersionMin is specified. If set to true, the value in VersionMin is not considered a valid version for this check. If set to false, VersionMin is valid.</documentation>
        </annotation>
      </attribute>
      <attribute name="Language" type="int" use="optional">
        <annotation>
          <documentation>If present, specifies the language to be filtered on. If not present, all languages are considered valid.</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <!--
  
  MSP (Windows Installer Patch) checks - these rely on the MSP metadata
    
  -->
  <element name="MsiPatchInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified patch is installed. This rule uses the MSP metadata to perform the check.</documentation>
    </annotation>
  </element>
  
  <element name="MsiPatchSuperseded" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified patch is superseded. This rule uses the MSP metadata to perform the check.</documentation>
    </annotation>
  </element>
  
  <element name="MsiPatchInstallable" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified patch is installable. This rule uses the MSP metadata to perform the check.</documentation>
    </annotation>
  </element>
  <!--
  
  MSI (Windows Installer Application) checks - these rely on the MSI metadata
    
  -->
  <element name="MsiApplicationInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified application is installed. This rule uses the MSI metadata to perform the check.</documentation>
    </annotation>
  </element>

  <element name="MsiApplicationSuperseded" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified application is superseded. This rule uses the MSI metadata to perform the check.</documentation>
    </annotation>
  </element>

  <element name="MsiApplicationInstallable" substitutionGroup="upd:ApplicabilityRuleElement">
    <annotation>
      <documentation>Checks that the specified application is installable. This rule uses the MSI metadata to perform the check.</documentation>
    </annotation>
  </element>
  <!--
  
  MSP (Windows Installer Patch) metadata
    
  -->
  <complexType name="MsiPatchMetadataStuff">
    <annotation>
      <documentation>The metadata for an MSP (Windows Installer Patch). This metadata is used by the MsiPatchInstalled, MsiPatchSuperseded, and MsiPatchInstallable applicability rules.</documentation>
    </annotation>
    <sequence>
      <element ref="mspblob:MsiPatch" />
      <element name="FallbackPatchCode" type="mspblob:GUID" minOccurs="0" maxOccurs="1" />
    </sequence>
  </complexType>
    
  <element name="MsiPatchMetadata" substitutionGroup="upd:ApplicabilityMetadataElement" type="msiar:MsiPatchMetadataStuff"/>
  <!--
  
  MSI (Windows Installer Application) metadata
    
  -->

  <simpleType name="MsiRecacheReinstallOption">
    <annotation>
      <documentation>An enumeration defining scenarios when RecacheReinstall can be enabled for MSI updates. </documentation>
    </annotation>
    <restriction base="token">
      <enumeration value="Never" />
      <enumeration value="LowerVersion" />
      <enumeration value="AnyVersion" />
    </restriction>
  </simpleType>

  <complexType name="MsiApplicationMetadataStuff">
    <annotation>
      <documentation>The metadata for an MSI (Windows Installer Application). This metadata is used by the MsiApplicationInstalled, MsiApplicationSuperseded, and MsiApplicationInstallable applicability rules.</documentation>
    </annotation>
    <sequence>
      <element name="ProductCode" minOccurs="1" maxOccurs="1">
        <complexType>
          <simpleContent>
            <extension base="mspblob:GUID">
              <attribute name="Version" type="mspblob:Version" use="optional">
                <annotation>
                  <documentation>Specifies the product version used in recache-reinstall version comparisons.</documentation>
                </annotation>
              </attribute>
              <attribute name="UseRecacheReinstall" type="msiar:MsiRecacheReinstallOption" use="optional">
                <annotation>
                  <documentation>Enables recache-reinstall support for this MSI update. Valid options are "Never", "LowerVersion", and "AnyVersion".</documentation>
                </annotation>
              </attribute>
            </extension>
          </simpleContent>
        </complexType>
      </element>
    </sequence>
  </complexType>

  <element name="MsiApplicationMetadata" substitutionGroup="upd:ApplicabilityMetadataElement" type="msiar:MsiApplicationMetadataStuff"/>

</schema>

WindowsDriver Schema

<?xml version="1.0" encoding="UTF-8" ?>
<schema targetNamespace="http://schemas.microsoft.com/msus/2002/12/UpdateHandlers/WindowsDriver"
xmlns:tns="http://schemas.microsoft.com/msus/2002/12/UpdateHandlers/WindowsDriver"
xmlns:bt="http://schemas.microsoft.com/msus/2002/12/BaseTypes"
xmlns:upd="http://schemas.microsoft.com/msus/2002/12/Update" xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">

  <import namespace="http://schemas.microsoft.com/msus/2002/12/BaseTypes" />
  <import namespace="http://schemas.microsoft.com/msus/2002/12/Update" />

<!--
  
  Primitive types that are specific to Windows Drivers
    
  -->
<simpleType name="HardwareID">
<annotation>
<documentation>A hardware ID.</documentation>
</annotation>
<restriction base="string" >
<maxLength value="200" />
</restriction>
</simpleType>
<simpleType name="DriverCompany">
<annotation>
<documentation>A driver manufacturer string.</documentation>
</annotation>
<restriction base="string">
<maxLength value="256" />
</restriction>
</simpleType>
<simpleType name="DriverProvider">
<annotation>
<documentation>A driver provider string.</documentation>
</annotation>
<restriction base="string">
<maxLength value="256" />
</restriction>
</simpleType>
<simpleType name="DriverManufacturer">
<annotation>
<documentation>A driver manufacturer string.</documentation>
</annotation>
<restriction base="string">
<maxLength value="256" />
</restriction>
</simpleType>
<simpleType name="DriverClass">
<annotation>
<documentation>A SUS driver classification (e.g., Printers). This is mapped from the driver's INF class by WHOS (WHQL) before publishing to MU. The only guaranteed mapping is from INF "Printer" class to SUS "Printers" classification.</documentation>
</annotation>
<restriction base="string">
<maxLength value="256" />
</restriction>
</simpleType>
<simpleType name="DriverModel">
<annotation>
<documentation>A driver model string.</documentation>
</annotation>
<restriction base="string">
<maxLength value="256" />
</restriction>
</simpleType>
<simpleType name="DriverVerVersion">
<annotation>
<documentation>The drivers version string written as four integers separated by dots (e.g., "1.2.3.4"). The DriverVerVersion is derived from information in the driver INF.</documentation>
</annotation>
<restriction base="bt:Version"/>
</simpleType>
<!--
  
  The main data-type for windows drivers
    
  -->
<complexType name="WindowsDriverMetaData">
<annotation>
<documentation>Meta-data needed by both the driver installation handler and the driver applicability rules evaluator.</documentation>
</annotation>
<sequence>
<element name="CompatibleProvider" type="tns:DriverProvider" minOccurs="0" maxOccurs="unbounded">
<annotation>
<documentation>Compatible driver providers. This information is only needed for printer drivers, because printer drivers are only offered as updates to existing drivers if the existing driver provider is the same as the new driver'sprovider, or if it is one of the new driver's compatible providers.</documentation>
</annotation>
</element>
</sequence>
<attribute name="HardwareID" type="tns:HardwareID" use="required">
<annotation>
<documentation>The hardware ID (HWID) or compatible ID that this driver must match to be applicable. The HardwareID is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="DriverVerDate" type="date" use="required">
<annotation>
<documentation>The driver version date. The driver version date is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="DriverVerVersion" type="tns:DriverVerVersion" use="required">
</attribute>
<attribute name="WhqlDriverID" type="unsignedInt" use="required">
<annotation>
<documentation>The WHQL driver submission number. The driver ID is assigned to the driver by WHQL as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="Class" type="tns:DriverClass" use="required">
<annotation>
<documentation>The class of driver (e.g., printer). The driver class is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="Company" type="tns:DriverCompany" use="required">
<annotation>
<documentation>The company that signed the driver. The company is derived from the cab signature as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="Provider" type="tns:DriverProvider" use="required">
<annotation>
<documentation>The company providing the driver. The provider is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="Manufacturer" type="tns:DriverManufacturer" use="required">
<annotation>
<documentation>The company that manufactured the driver. The manufacturer is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
<attribute name="Model" type="tns:DriverModel" use="required">
<annotation>
<documentation>The model of the device for which this driver is intended. The device model is derived from the submitted INF file as part of the publication process.</documentation>
</annotation>
</attribute>
</complexType>
<!--
  
  The <WindowsDriverMetaData> element, used by the driver applicability evaluation engine.
    
 -->
<element name="WindowsDriverMetaData" substitutionGroup="upd:ApplicabilityMetadataElement" type="tns:WindowsDriverMetaData">
<annotation>
<documentation>The metadata for a windows driver. This metadata is used by all the driver applicability rules as well as the driver installation handler.</documentation>
</annotation>
</element>
<element name="WindowsDriverInstalled" substitutionGroup="upd:ApplicabilityRuleElement">
<annotation>
<documentation>Checks that the specified update is installed. This rule uses the applicability metadata to perform the check. It returns true if this driver is an equal match as the currently installed driver.</documentation>
</annotation>
<complexType />
</element>
<element name="WindowsDriverSuperseded" substitutionGroup="upd:ApplicabilityRuleElement">
<annotation>
<documentation>Checks that the specified update is superseded. This rule uses the applicability metadata to perform the check. It returns true if this driver is a worse match as the currently installed driver.</documentation>
</annotation>
<complexType />
</element>
<element name="WindowsDriverInstallable" substitutionGroup="upd:ApplicabilityRuleElement">
<annotation>
<documentation>Checks that the specified update is installable. This rule uses the applicability metadata to perform the check. It returns true if this driver is a better match as the currently installed driver.</documentation>
</annotation>
<complexType />
</element>
</schema>

<24> Section 3.1.5.7: WSUS 3.0 Service Pack 1 includes the HardwareIDs when the deployment is associated with a driver update and the protocolVersion reported by the client in the GetCookie call is "1.6".

<25> Section 3.1.5.7: WSUS truncates responses at 200 NewUpdates.

<26> Section 3.1.5.9: WSUS stores all content in a relative path on the update content directory based on the SHA1 hash of the content. The SHA1 hash of the content can be parsed from the metadata as specified in section 3.1.1. The SHA1 hash is converted to a Binhex string; the last two bytes of that string are used to specify the subdirectory, and the full string is used as the location of the file in the subdirectory.

<27> Section 3.1.5.10: WSUS stores all content in a relative path on the update content directory based on the SHA1 hash of the content. The SHA1 hash of the content can be parsed from the metadata as specified in section 3.1.1. The SHA1 hash is converted to a Binhex string; the last two bytes of that string are used to specify the subdirectory, and the full string is used as the location of the file in the subdirectory.

<28> Section 3.2.1: WUA uses Group Policy. For more information about configuring additional client behavior, see [AUPOLICY]. The policy settings that are relevant to this protocol are as follows.

  • The value of the <Update server> element is provided by the CorpWUURL_Name Group Policy setting.

  • The value of the <Target groups> element is provided by the TargetGroup_Name Group Policy setting.

  • The value of the <DetectionFrequency> element is provided by the DetectionFrequencyEnabled and DetectionFrequency Group Policy settings. If the value of the DetectionFrequencyEnabled Group Policy setting is 1, then the interval, in hours, is set to the value of the DetectionFrequency Group Policy setting. Otherwise, the interval is set to 22 hours.

The mapping of these Group Policy settings to registry keys is given in the wuau.adm file, which is available from [GPADM].

<29> Section 3.2.1: For WUA, the value of this element is provided by the CorpWUURL_Name Group Policy setting. The mapping of this Group Policy setting to a registry key is given in the wuau.adm file (see [GPADM]).

<30> Section 3.2.1: For WUA, the value of this element is provided by the TargetGroup_Name Group Policy setting. The mapping of this Group Policy setting to a registry key is given in the wuau.adm file (see [GPADM]).

<31> Section 3.2.1: For WUA, the value of this element is provided by the DetectionFrequencyEnabled and DetectionFrequency Group Policy settings.

If the value of the DetectionFrequencyEnabled Group Policy setting is 1, then the interval, in hours, is set to the value of the DetectionFrequency Group Policy setting. Otherwise, the interval is set to 22 hours.

The mapping of the DetectionFrequencyEnabled and DetectionFrequency Group Policy settings are given in the wuau.adm file (see [GPADM]).

<32> Section 3.2.2: WUA can set a timer to automatically perform a periodic metadata synchronization. The period of the timer is randomized. After each metadata synchronization, the time of the next synchronization is computed as follows.

  • The maximum period, in hours, is set to the value of the DetectionFrequency ADM element.

  • The time of the next automatic synchronization is then computed by randomly selecting a period that is at most the maximum period and at least 0.8 multiplied with the maximum period, added to the current time.

<33> Section 3.2.2: The Windows Update Agent (WUA) obtains its configuration by using Group Policy, as specified in [MS-GPOL]. For more information, see [AUPOLICY].

  • Scheduled Install: Specifies whether the client should initiate an install of downloaded software on a specified schedule. This option is enabled in the default configuration of the client on Windows XP SP2, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, and Windows Server 2012 R2. This option is disabled by default on Windows 2000, Windows XP RTM, and Windows XP SP1.

<34> Section 3.2.3: WUA uses a self-generated GUID as the client ID. It stores the GUID in the registry in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate/SusClientId. It regenerates the GUID whenever the client joins an Active Directory domain or changes its domain membership.

<35> Section 3.2.4: The WUA uses a random delay of between 1 and 10 minutes before reporting an event batch.

<36> Section 3.2.6: WUA implements the following timer events.

  • Reporting. When a reporting event is generated on the client, it is not sent to the server right away. Rather, it is added to an event queue and a timer is started. In a random time interval from 0 to 5 minutes, the client uploads all events in the queue in a batch. This allows the client to send events up in batches, which optimizes network bandwidth compared to sending all the events individually.

  • Retry failed sync. If metadata synchronization fails for some reason, the client will retry in 5 hours.

<37> Section 5.1: WUA only accepts install binaries signed by Microsoft certificates.

 
Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.