Export (0) Print
Expand All

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 Server operating system

  • 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

  • Windows 10 operating system

  • Windows Server 2016 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 lists 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 2008

Not supported

Not supported

Not supported

Supported

Supported

Windows Server 2008 R2

Not supported

Not supported

Not supported

Not supported

Supported

Windows Server 2012

Not supported

Not supported

Not supported

Not supported

Supported

Windows Server 2012 R2 operating system

Not supported

Not supported

Not supported

Not supported

Supported

Windows Server 2016

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 operating system

Supported

Supported

Supported

Supported

Supported

Windows XP

Supported

Supported

Supported

Supported

Supported

Windows Vista

Not supported

Not supported

Supported

Supported

Supported

Windows 7

Not supported

Not supported

Not supported

Not supported

Supported

Windows 8

Not supported

Not supported

Not supported

Not supported

Supported

Windows 8.1

Not supported

Not supported

Not supported

Not supported

Supported

Windows 10

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.

<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 Service WSDL, it is http://www.microsoft.com/SoftwareDistribution/Server/SimpleAuthWebService.

For the client Web service WSDL, 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.3:  The following table details how the WSUS server determines the name of the client's operating system. An empty cell means that the WSUS server assumes that the name of the client operating system is the one specified in the first column if the values in the other columns match. All string comparisons are case-insensitive. For example, the following are all treated the same: AMD64, amd64, and Amd64. If multiple rows of the table match, the WSUS server uses the name in the row that appears first.

Name of client operating system

OS major version

OS minor version

Suite mask

Old product type

New product type

System metrics

Processor architecture

Windows 10

10

0

Windows Server 2016

10

0

Windows 8.1

6

3

0x1

Windows Server 2012 R2

6

3

Windows 8

6

2

0x1

Windows Server 2012

6

2

Windows 7 Ultimate Edition

6

1

0x00000001

Windows 7  Home Basic Edition

6

1

0x00000002

Windows 7 Home Premium Edition

6

1

0x00000003

Windows 7 Enterprise

6

1

0x00000004

Windows 7 Home Basic N Edition

6

1

0x00000005

Windows Server 2008 R2

6

1

0x00000007

Windows Server 2008 R2  Datacenter Edition

6

1

0x00000008

Windows Server 2008 R2  Enterprise Edition

6

1

0x0000000A

Windows 7 Starter

6

1

0x0000000B

Windows Server 2008 R2 Datacenter (Core installation)

6

1

0x0000000C

Windows Server 2008 R2 (Core Installation)

6

1

0x0000000D

Windows Server 2008 R2 Enterprise (Core Installation)

6

1

0x0000000E

Windows Server 2008 R2 for Itanium-Based Systems

6

1

0x0000000F

Windows Web Server 2008 R2

6

1

0x00000011

Windows Web Server 2008 R2 HPC Edition

6

1

0x00000012

Windows 7 Home Premium N

6

1

0x0000001A

Windows 7 Enterprise N

6

1

0x0000001B

Windows 7 Ultimate N

6

1

0x0000001C

Windows Server 2008 R2 (Core Installation)

6

1

0x0000001D

Windows Server 2008 R2 Standard without Hyper-V

6

1

0x00000024

Windows Server 2008 R2 Datacenter without Hyper-V

6

1

0x00000025

Windows Server 2008 R2 Enterprise without Hyper-V

6

1

0x00000026

Windows Server 2008 R2 Datacenter without Hyper-V (Core Installation)

6

1

0x00000027

Windows Server 2008 R2 Standard without Hyper-V (Core Installation)

6

1

0x00000028

Windows Server 2008 R2 Enterprise without Hyper-V (Core Installation)

6

1

0x00000029

Microsoft Hyper-V Server 2008 R2

6

1

0x0000002A

Windows 7  Starter N

6

1

0x0000002F

Windows 7  Professional

6

1

0x00000030

Windows 7  Professional N

6

1

0x00000031

Windows Vista Business

6

0

0x00000006

Windows Vista Business N Edition

6

0

0x00000010

Windows Cluster Server Edition

6

0

0x00000012

Windows Server Datacenter Edition Full Installation

6

0

0x00000008

Windows Server Datacenter Edition Core Installation

6

0

0x0000000C

Windows Vista Enterprise

6

0

0x00000004

Windows Server Enterprise Edition Full Installation

6

0

0x0000000A

Windows Server Enterprise Edition Core Installation

6

0

0x0000000E

Windows Server Enterprise Edition For Itanium Based Systems

6

0

0x0000000F

Windows Vista Home Basic Edition

6

0

0x00000002

Windows Vista Home Basic N Edition

6

0

0x00000005

Windows Vista Home Premium Edition

6

0

0x00000003

Windows Home Server Edition

6

0

0x00000013

Windows Server For Small Business Edition

6

0

0x00000018

Windows Small Business Server

6

0

0x00000009

Windows Small Business Server Premium Edition

6

0

0x00000019

Windows Server Standard Edition Full Installation

6

0

0x00000007

Windows Server Standard Edition Core Installation

6

0

0x0000000D

Windows Vista Starter Edition

6

0

0x0000000B

Windows Storage Server Enterprise Edition

6

0

0x00000017

Windows Storage Server Express Edition

6

0

0x00000014

Windows Storage Server Standard Edition

6

0

0x00000015

Windows Storage Server Workgroup Edition

6

0

0x00000016

Windows Vista Ultimate

6

0

0x00000001

Windows Web Server Edition

6

0

0x00000011

Windows Vista Home Premium N Edition

6

0

0x0000001A

Windows Vista Enterprise  N Edition

6

0

0x0000001B

Windows Vista Ultimate N Edition

6

0

0x0000001C

Windows Web Server 2008 Edition (core installation)

6

0

0x0000001D

Windows for Essential Server Solutions 2008 without Hyper-V

6

0

0x00000023

Windows Server 2008 Standard without Hyper-V

6

0

0x00000024

Windows Server 2008 Datacenter operating system without Hyper-V

6

0

0x00000025

Windows Server 2008 Enterprise operating system without Hyper-V

6

0

0x00000026

Windows Server 2008 Datacenter without Hyper-V (Core Installation)

6

0

0x00000027

Windows Server 2008 Standard without Hyper-V (Core Installation)

6

0

0x00000028

Windows Server 2008 Enterprise without Hyper-V (Core Installation)

6

0

0x00000029

Microsoft Hyper-V Server

6

0

0x0000002A

Windows Server 2003 R2 Web Edition operating system

5

(suiteMask & 0x00000400) != 0

89

Windows Server 2003 Web Edition

5

(suiteMask & 0x00000400) != 0

Windows Server 2003 R2 operating system Compute Cluster Edition

5

(suiteMask & 0x00004000) != 0

89

Windows Server 2003 operating system Compute Cluster Edition

5

(suiteMask & 0x00004000) != 0

Windows Server 2003 R2 Datacenter Edition operating system

5

2

(suiteMask & 0x00000080) != 0

89

Contains "X86"

Windows Server 2003 R2 Datacenter x64 Edition operating system

5

2

(suiteMask & 0x00000080) != 0

89

Contains "AMD64"

Windows Server 2003 Datacenter Edition operating system

5

2

(suiteMask & 0x00000080) != 0

Contains "X86"

Windows Server 2003 x64 Datacenter Edition operating system

5

2

(suiteMask & 0x00000080) != 0

Contains "AMD64"

Windows Server 2003 R2 Datacenter Edition for Itanium-based Systems operating system

5

2

(suiteMask & 0x00000080) != 0

Contains "IA64"

Windows 2000 Datacenter Server operating system

5

(suiteMask & 0x00000080) != 0

Windows Server 2003 R2 Enterprise Edition operating system

5

2

(suiteMask & 0x00000002) != 0

89

Contains "X86"

Windows Server 2003 R2 Enterprise x64 Edition operating system

5

2

(suiteMask & 0x00000002) != 0

89

Contains "AMD64"

Windows Server 2003 Enterprise Edition operating system

5

2

(suiteMask & 0x00000002) != 0

Contains "X86"

Windows Server 2003 Enterprise x64 Edition operating system

5

2

(suiteMask & 0x00000002) != 0

Contains "AMD64"

Windows Server 2003 Enterprise Edition Itanium

5

2

(suiteMask & 0x00000002) != 0

Contains "IA64"

Windows 2000 Advanced Server operating system

5

(suiteMask & 0x00000002) != 0

Windows XP Embedded

5

(suiteMask & 0x00000040) != 0

Windows XP Home Edition

5

(suiteMask & 0x00000200) != 0

Windows Storage Server 2003 R2 operating system, Standard Edition

5

(suiteMask & 0x00002000) != 0

89

Windows Storage Server 2003 operating system

5

(suiteMask & 0x00002000) != 0

Windows 2000 Server Professional

5

0

1

Windows 2000 Server

5

0

> 1

Windows XP Media Center Edition

5

1

87

Windows XP Starter Edition operating system

5

1

88

Windows XP Tablet PC Edition

5

1

86

Windows XP Professional operating system

5

1

Contains "X86"

Windows XP 64-Bit Edition operating system for Itanium systems

5

1

Contains "IA64"

Windows XP Professional x64 Edition operating system

5

2

1

Contains "AMD64"

Windows XP Professional x64 Edition Version 2003

5

2

1

Contains "IA64"

Windows Server 2003 R2 Standard Edition operating system

5

2

89

Contains "X86"

Windows Server 2003 R2 Standard Edition

5

2

89

Contains "AMD64"

Windows Server 2003 Standard Edition operating system

5

2

> 1

Contains "X86"

Windows Server 2003 Standard x64 Edition operating system

5

2

> 1

Contains "AMD64"

<11> Section 2.2.2.2.3:  The elements OSDescription, OEM, DeviceType, FirmwareVersion, and MobileOperator are available on Windows 10 and Windows Server 2016 only.

<12> Section 2.2.2.2.4:  ComputerSpec and FeatureScoreMatchingKey are available in Windows 10.

<13> Section 2.2.2.2.4:  MatchingComputerHWID and DriverRank elements are available in Windows 10.

<14> 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.

<15> Section 2.2.2.2.6:  In Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, and Windows Server 2016, 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).

<16> Section 2.2.2.2.10:  The GetExtendedUpdateInfo2 is not available in Windows 2000 Server, Windows 2000 SP3, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, and Windows Server 2008 R2.      

<17> Section 2.2.2.2.10:  In Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, and Windows Server 2016, 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).

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

<19> 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 operating system 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 10

10

0

1

Windows Server 2016

10

0

2 or 3

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 operating system

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 server software

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

<20> Section 2.2.2.3.1: See the product behavior note for OSVersion earlier in this section.

<21> Section 3.1.1:  On an AMD64 architecture machine running Windows 10, this would be "amd64.10.0".

<22> 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 need to be present.  If false or omitted, one or more suites needs to 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 need to be present.  If false or omitted, one or more suites need to 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>

<23> 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, Windows Server 2012 R2, Windows 10, and Windows Server 2016, 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.

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

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

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

<27> Section 3.1.5.3: WSUS returns InternalServerError

<28> Section 3.1.5.3: WSUS returns InternalServerError

<29> 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.

<30> 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>

<31> 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".

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

<33> 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.

<34> 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.

<35> Section 3.1.5.12: 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".

<36> Section 3.1.5.12: WSUS truncates responses at 200 NewUpdates.

<37> 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].

<38> 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.

<39> 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 initiates an install of downloaded software on a specified schedule. This option is enabled in the default configuration of the client on Windows XP operating system Service Pack 2 (SP2), Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, and Windows Server 2016. This option is disabled by default on Windows 2000, Windows XP, and Windows XP operating system Service Pack 1 (SP1).

<40> 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.

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

<42> 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.

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

<44> Section 5.1: WUA uses CAPI to perform certificate revocation checks to ensure that the certificates can be trusted. There are three revocation check methods: CRL (cert revocation list), CTL (cert trust list), and OCSP stapling.

  • For servers that provide non-Microsoft rooted certificates, such as WSUS supporting SSL, CAPI uses the method based on the certificates it encounters. Typically, it is the CRL method, where the CRL URL is embedded onto the certificates.

  • For servers that provide Microsoft rooted certificates, CAPI uses the disallow trust list (CTL) instead of the embedded CRL URLs. See [MSKB-2813430] for more information.

    WUA ignores any "revocation server offline/unreachable error"; that is. CAPI cannot refresh the CRL/CTL cache. If the server is reachable, WUA will honor any revocation errors that occur and fail the operation if the certificate is found to be revoked.

Show:
© 2016 Microsoft