[MS-SQMCS]:
Software Quality Metrics (SQM) Client-to-Service Version 1 Protocol
Intellectual Property Rights Notice for Open Specifications Documentation
Technical Documentation. Microsoft publishes Open Specifications documentation (“this documentation”) for protocols, file formats, data portability, computer languages, and standards support. Additionally, overview documents cover inter-protocol relationships and interactions.
Copyrights. This documentation is covered by Microsoft copyrights. Regardless of any other terms that are contained in the terms of use for the Microsoft website that hosts this documentation, you can make copies of it in order to develop implementations of the technologies that are described in this documentation and can distribute portions of it in your implementations that use these technologies or in your documentation as necessary to properly document the implementation. You can also distribute in your implementation, with or without modification, any schemas, IDLs, or code samples that are included in the documentation. This permission also applies to any documents that are referenced in the Open Specifications documentation.
No Trade Secrets. Microsoft does not claim any trade secret rights in this documentation.
Patents. Microsoft has patents that might cover your implementations of the technologies described in the Open Specifications documentation. Neither this notice nor Microsoft's delivery of this documentation grants any licenses under those patents or any other Microsoft patents. However, a given Open Specifications document might be covered by the Microsoft Open Specifications Promise or the Microsoft Community Promise. If you would prefer a written license, or if the technologies described in this documentation are not covered by the Open Specifications Promise or Community Promise, as applicable, patent licenses are available by contacting .
License Programs. To see all of the protocols in scope under a specific license program and the associated patents, visit the Patent Map.
Trademarks. The names of companies and products contained in this documentation might be covered by trademarks or similar intellectual property rights. This notice does not grant any licenses under those rights. For a list of Microsoft trademarks, visit
Fictitious Names. The example companies, organizations, products, domain names, email addresses, logos, people, places, and events that are depicted in this documentation are fictitious. No association with any real company, organization, product, domain name, email address, logo, person, place, or event is intended or should be inferred.
Reservation of Rights. All other rights are reserved, and this notice does not grant any rights other than as specifically described above, whether by implication, estoppel, or otherwise.
Tools. The Open Specifications documentation does not require the use of Microsoft programming tools or programming environments in order for you to develop an implementation. If you have access to Microsoft programming tools and environments, you are free to take advantage of them. Certain Open Specifications documents are intended for use in conjunction with publicly available standards specifications and network programming art and, as such, assume that the reader either is familiar with the aforementioned material or has immediate access to it.
Support. For questions and support, please contact .
Revision Summary
Date / Revision History / Revision Class / Comments12/16/2011 / 1.0 / New / Released new document.
3/30/2012 / 1.0 / None / No changes to the meaning, language, or formatting of the technical content.
7/12/2012 / 2.0 / Major / Significantly changed the technical content.
10/25/2012 / 2.0 / None / No changes to the meaning, language, or formatting of the technical content.
1/31/2013 / 2.0 / None / No changes to the meaning, language, or formatting of the technical content.
8/8/2013 / 3.0 / Major / Significantly changed the technical content.
11/14/2013 / 3.0 / None / No changes to the meaning, language, or formatting of the technical content.
2/13/2014 / 3.0 / None / No changes to the meaning, language, or formatting of the technical content.
5/15/2014 / 3.0 / None / No changes to the meaning, language, or formatting of the technical content.
6/30/2015 / 3.0 / None / No changes to the meaning, language, or formatting of the technical content.
10/16/2015 / 3.0 / None / No changes to the meaning, language, or formatting of the technical content.
7/14/2016 / 3.0 / None / No changes to the meaning, language, or formatting of the technical content.
6/1/2017 / 3.0 / None / No changes to the meaning, language, or formatting of the technical content.
Table of Contents
1Introduction
1.1Glossary
1.2References
1.2.1Normative References
1.2.2Informative References
1.3Overview
1.4Relationship to Other Protocols
1.5Prerequisites/Preconditions
1.6Applicability Statement
1.7Versioning and Capability Negotiation
1.8Vendor-Extensible Fields
1.9Standards Assignments
2Messages
2.1Transport
2.2Message Syntax
2.2.1Namespaces
2.2.2Message Upload Data Contents
2.2.3SQM Session
2.2.4Common Structures
2.2.4.1SQM Header
2.2.4.2SQM Sections
2.2.4.3SQM Section Header
2.2.4.4SQM Section Data
2.2.4.4.1SQM Data Point Sections
2.2.4.4.1.1SQM DWORD Data Point
2.2.4.4.1.2SQM QWORD Data Point
2.2.4.4.1.3SQM STRING Data Point
2.2.4.4.2SQM Stream Section
2.2.4.4.2.1SQM Stream Header
2.2.4.4.2.2SQM Stream Record Header
2.2.4.4.2.3SQM Stream Record
2.2.4.4.2.3.1SQM Stream DWORD Record
2.2.4.4.2.3.2SQM Stream QWORD Record
2.2.4.4.2.3.3SQM Stream STRING Record
2.2.5Message Response
2.2.6Adaptive Software Quality Metrics (A-SQM) Manifest
2.2.6.1A-SQM Manifest Download Header
2.2.6.2A-SQM Manifest
2.2.6.3A-SQM Header
2.2.6.4A-SQM Section Header
2.2.6.5A-SQM Escalation Rule Section
2.2.6.5.1A-SQM Rule Header
2.2.6.5.2A-SQM Rule Clause
2.2.6.6A-SQM Property Set Section
2.2.6.6.1A-SQM Property Set Header
2.2.6.6.2A-SQM Property
2.3Directory Service Schema Elements
3Protocol Details
3.1Client Details
3.1.1Abstract Data Model
3.1.2Timers
3.1.3Initialization
3.1.4Higher-Layer Triggered Events
3.1.5Message Processing Events and Sequencing Rules
3.1.5.1Message Construction
3.1.5.1.1SQM Header Construction
3.1.5.1.2Constructing SQM Sections
3.1.5.1.2.1SQM Session Upload Construction - Option 1 - Compressed
3.1.5.1.2.2SQM Sections Upload Construction - Option 2 - Uncompressed
3.1.5.1.3Constructing the SQM Session
3.1.5.2Message Data Upload Processing
3.1.5.2.1HTTP 200 Status
3.1.5.2.2HTTP 201 Status
3.1.5.2.3HTTP 403 Status
3.1.5.2.4HTTP Status - Other
3.1.5.3Processing an A-SQM Resource Message
3.1.5.3.1Downloading an A-SQM Resource
3.1.6Timer Events
3.1.7Other Local Events
3.2Server Details
3.2.1Abstract Data Model
3.2.2Timers
3.2.3Initialization
3.2.4Higher-Layer Triggered Events
3.2.5Message Processing Events and Sequencing Rules
3.2.5.1Processing a Client Message SQM Header
3.2.5.2Processing SQM Section Data - Option 1 - Compressed
3.2.5.3Processing SQM Section Data - Option 2 - Uncompressed
3.2.5.4Processing the A-SQM Manifest Version Request
3.2.5.5Sending a Client Response
3.2.5.6A-SQM Manifest
3.2.6Timer Events
3.2.7Other Local Events
3.3Proxy Details
3.3.1Abstract Data Model
3.3.2Timers
3.3.3Initialization
3.3.4Higher-Layer Triggered Events
3.3.5Message Processing Events and Sequencing Rules
3.3.6Timer Events
3.3.7Other Local Events
4Protocol Examples
4.1SQM Upload Example
4.2SQM Header Example
4.3SQM Section Header
5Security
5.1Security Considerations for Implementers
5.2Index of Security Parameters
6Appendix A: Product Behavior
7Change Tracking
8Index
1Introduction
This document is a specification of the Software Quality Metrics (SQM) Client-to-Service Protocol Version 1 which is used to send software instrumentation metrics to the SQM service and by the client to download client-specific control data. The protocol allows applications and operating system components to collect and send instrumentation metrics to a hosted service over HTTP/HTTPS.
Data upload can also be transmitted through a customer-hosted SQM proxy to the SQM service. This proxy transmits protocol messages on behalf of a client in environments in which the client cannot access the SQM service.
Sections 1.5, 1.8, 1.9, 2, and 3 of this specification are normative. All other sections and examples in this specification are informative.
1.1Glossary
This document uses the following terms:
adaptive software quality metrics (A-SQM): A component that permits the ability to trigger the collection of data or provide application-defined callbacks based on the state of a set of SQM instrumentation data.
Augmented Backus-Naur Form (ABNF): A modified version of Backus-Naur Form (BNF), commonly used by Internet specifications. ABNF notation balances compactness and simplicity with reasonable representational power. ABNF differs from standard BNF in its definitions and uses of naming rules, repetition, alternatives, order-independence, and value ranges. For more information, see [RFC5234].
binary large object (BLOB): A collection of binary data stored as a single entity in a database.
checksum: A value that is the summation of a byte stream. By comparing the checksums computed from a data item at two different times, one can quickly assess whether the data items are identical.
Coordinated Universal Time (UTC): A high-precision atomic time standard that approximately tracks Universal Time (UT). It is the basis for legal, civil time all over the Earth. Time zones around the world are expressed as positive and negative offsets from UTC. In this role, it is also referred to as Zulu time (Z) and Greenwich Mean Time (GMT). In these specifications, all references to UTC refer to the time at UTC-0 (or GMT).
Hypertext Transfer Protocol (HTTP): An application-level protocol for distributed, collaborative, hypermedia information systems (text, graphic images, sound, video, and other multimedia files) on the World Wide Web.
Hypertext Transfer Protocol Secure (HTTPS): An extension of HTTP that securely encrypts and decrypts web page requests. In some older protocols, "Hypertext Transfer Protocol over Secure Sockets Layer" is still used (Secure Sockets Layer has been deprecated). For more information, see [SSL3] and [RFC5246].
instrumentation data: Data values that measure the attributes of a system. The values can represent a dynamic measurement, such as a change over time; or they can represent static values, such as a program name or version number.
man in the middle (MITM): An attack that deceives a server or client into accepting an unauthorized upstream host as the actual legitimate host. Instead, the upstream host is an attacker's host that is manipulating the network so that the attacker's host appears to be the desired destination. This enables the attacker to decrypt and access all network traffic that would go to the legitimate host. The attacker is able to read, insert, and modify at-will messages between two hosts without either party knowing that the link between them is compromised.
SQM partner: An abstract entity within the SQM service that logically groups instrumentation information.
SQM service: Accepts and stores SQM session data from SQM-enabled clients. The SQM service manages SQM partner information and SQM partner instrumentation definitions.
SQM-enabled client: A computer on which nonidentifiable instrumentation data is collected into a SQM session and sent to the SQM service.
Unicode character: Unless otherwise specified, a 16-bit UTF-16 code unit.
Unicode string: A Unicode 8-bit string is an ordered sequence of 8-bit units, a Unicode 16-bit string is an ordered sequence of 16-bit code units, and a Unicode 32-bit string is an ordered sequence of 32-bit code units. In some cases, it could be acceptable not to terminate with a terminating null character. Unless otherwise specified, all Unicode strings follow the UTF-16LE encoding scheme with no Byte Order Mark (BOM).
MAY, SHOULD, MUST, SHOULD NOT, MUST NOT: These terms (in all caps) are used as defined in [RFC2119]. All statements of optional behavior use either MAY, SHOULD, or SHOULD NOT.
1.2References
Links to a document in the Microsoft Open Specifications library point to the correct section in the most recently published version of the referenced document. However, because individual documents in the library are not updated at the same time, the section numbers in the documents may not match. You can confirm the correct section numbering by checking the Errata.
1.2.1Normative References
We conduct frequent surveys of the normative references to assure their continued availability. If you have any issue with finding a normative reference, please contact . We will assist you in finding the relevant information.
[MS-DTYP] Microsoft Corporation, "Windows Data Types".
[MS-RPCE] Microsoft Corporation, "Remote Procedure Call Protocol Extensions".
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997,
[RFC2616] Fielding, R., Gettys, J., Mogul, J., et al., "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999,
1.2.2Informative References
[MSDN-CAB] Microsoft Corporation, "Microsoft Cabinet Format", March 1997,
[MSDN-CAPI] Microsoft Corporation, "Cryptography",
[MSDN-WER] Microsoft Corporation, "Windows Error Reporting",
1.3Overview
The Software Quality Metrics (SQM) Client-to-Service Protocol defines how a SQM-enabled client sends instrumentation data to the SQM service. The SQM Client-to-Service Protocol specifies the data transfer method, which includes an instrumentation namespace identifier and binary structured instrumentation data.
SQM-enabled clients produce and send SQM instrumentation data. This data allows application developers to understand product usage and failure information in order to improve their applications. Each SQM-enabled client belongs to a SQM namespace known as a SQM partner. All SQM data is associated with a SQM partner namespace in the SQM service.
The instrumentation data definition is defined by the SQM service. The meaning of the data is known to the creator of the data definition. For example, an instrumentation data definition COUNT_FILE_NOT_FOUND that is created and instrumented by an application developer has a specific meaning to that application developer. It could mean the number of times a data file is not found, the number of times a library file is not found, or something else entirely. The structure and method of transferring the data from the SQM-enabled client to the SQM service is defined by the SQM Client-to-Service Protocol. The method of creating the SQM instrumentation data definition is SQM service implementation-specific.
The SQM Client-to-Service Protocol also defines a method for a SQM-enabled client to download SQM partner-specific information. Typically this information is used by the SQM-enabled client to control what instrumentation data is uploaded. This functionality is known as adaptive software quality metrics (A-SQM). A-SQM data is created at the SQM service by the SQM-enabled client application owner if the SQM partner wants to download and use this functionality. The method of creating the A-SQM data is SQM service implementation-specific.
The SQM Client-to-Service Protocol uses the following communication methods:
Uploading instrumentation data from the client to the SQM service by using HTTP/HTTPS POST.
Uploading instrumentation data through a proxy (relay) to the SQM service.
Downloading A-SQM data created at the SQM service by using HTTP/HTTPS GET.
1.4Relationship to Other Protocols
This protocol depends on the Hypertext Transfer Protocol (HTTP) and Hypertext Transfer Protocol over Secure Sockets Layer (HTTPS) for transport, as specified in [RFC2616].
1.5Prerequisites/Preconditions
To use the SQM service, a client registers as a SQM partner with the SQM service and adds SQM instrumentation to the client application.
1.6Applicability Statement
This protocol is applicable only to SQM-enabled clients that are enabled to collect telemetry data using the SQM service.
1.7Versioning and Capability Negotiation
The SQM Client-to-Service Protocol does not perform capacity or version negotiation. The client communicates with a SQM service that supports version 1 of the SQM Client-to-Service Protocol. The protocol uses HTTP/HTTPS as the transport.
1.8Vendor-Extensible Fields
None.
1.9Standards Assignments
None.
2Messages
2.1Transport
This protocol is implemented on top of HTTP/HTTPS. A proxy MAY impose additional requirements as part of the transfer. There is no authentication between the SQM client and SQM service, or between the SQM proxy and the SQM service.
2.2Message Syntax
2.2.1Namespaces
SQM data MUST be associated with a partner namespace. The SQM Client-to-Service Protocol uses HTTP 1.1 syntax to communicate the SQM partner namespace within the URL string. For data upload, the URL MUST contain the SQM partner namespace following the SQM service host name.<1>
2.2.2Message Upload Data Contents
Messages are uploaded by using HTTP/HTTPS POST. The binary data is contained in the POST body of the HTTP/HTTPS request. The binary data schema is laid out in a SQM session, as shown in Figure 1 and described in section 2.2.3. The SQM section data area MAY be compressed as shown in Figure 3. The SQM service decompresses the data upon receipt. The entire binary data package MUST be included in a single HTTP POST body. The common message structures and layout are described in section 2.2.4.
Figure 1: HTTP POST body containing a SQM session
2.2.3SQM Session
A SQM session is comprised of a SQM header and zero or more SQM sections within the binary large object (BLOB) as shown in Figure 2. The SQM-enabled client MAY send the SQM header only (for example, to query the A-SQM Manifest version). The total length, in bytes, of the SQM session (the SQM header and SQM sections) MUST equal the HTTP POST body length. All integer fields are encoded using little-endian format.
Figure 2: SQM session binary data stream layout (uncompressed)
The following figure illustrates the compressed SQM session binary data stream layout.
Figure 3: SQM session binary data stream layout (compressed)
2.2.4Common Structures
2.2.4.1SQM Header
Every SQM session uploaded in the HTTP POST body MUST begin with a SQM session header.
The SQM section header describes the SQM section data BLOB. The SQM section header is composed of two fields: a SectionType field and a SectionLength field.
0 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 2
0 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 3
0 / 1
Signature
HeaderLength
Flags
DataChecksum
SectionCount
DataLength
ApplicationIdentifier
ApplicationVersionHigh
ApplicationVersionLow
ManifestVersion
ClientUploadTime
...
Reserved
...
ClientSessionStartTime
...
ClientSessionEndTime
...
ClientUniqueIdentifier
…
…
…
UserUniqueIdentifier
…
…
…
StudyIdentifier
InternalFlags
RawDataLength
RawDataChecksum
Signature (4 bytes): A 32-bit unsigned integer.<2>
HeaderLength (4 bytes): A 32-bit unsigned integer that specifies the length of the SQM header, in bytes.
Flags (4 bytes): A 32-bit unsigned integer. Bit positions 0 through 10 are reserved.<3>
DataChecksum (4 bytes): A 32-bit unsigned integer value specifying the checksum result of the SQM section data (compressed or uncompressed). In the following figure, the checksum is computed over area A followed by area B. The SQM client and SQM server SHOULD use the same algorithm.<4>
Figure 4: Checksum byte area in a SQM Upload
SectionCount (4 bytes): A 32-bit unsigned integer specifying the number of SQM sections in the uploaded data. This value MUST be specified. A value of 0x0 indicates there are no SQM sections.
DataLength (4 bytes): A 32-bit unsigned integer specifying the length of the SQM section data (compressed or uncompressed), in bytes. This value MUST be specified. A value of 0x0 indicates there is no SQM section data.
ApplicationIdentifier (4 bytes: ): A 32-bit unsigned integer specifying an application-defined identifier value. This value MUST be specified.