[MS-RA]:

Remote Assistance 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 / Comments
2/22/2007 / 0.01 / New / Version 0.01 release
6/1/2007 / 1.0 / Major / Updated and revised the technical content.
7/3/2007 / 1.0.1 / Editorial / Changed language and formatting in the technical content.
7/20/2007 / 1.1 / Minor / Clarified the meaning of the technical content.
8/10/2007 / 1.2 / Minor / Clarified the meaning of the technical content.
9/28/2007 / 1.3 / Minor / Clarified the meaning of the technical content.
10/23/2007 / 1.3.1 / Editorial / Changed language and formatting in the technical content.
11/30/2007 / 1.4 / Minor / Clarified the meaning of the technical content.
1/25/2008 / 1.4.1 / Editorial / Changed language and formatting in the technical content.
3/14/2008 / 1.4.2 / Editorial / Changed language and formatting in the technical content.
5/16/2008 / 1.4.3 / Editorial / Changed language and formatting in the technical content.
6/20/2008 / 2.0 / Major / Updated and revised the technical content.
7/25/2008 / 2.0.1 / Editorial / Changed language and formatting in the technical content.
8/29/2008 / 2.0.2 / Editorial / Changed language and formatting in the technical content.
10/24/2008 / 2.0.3 / Editorial / Changed language and formatting in the technical content.
12/5/2008 / 3.0 / Major / Updated and revised the technical content.
1/16/2009 / 3.0.1 / Editorial / Changed language and formatting in the technical content.
2/27/2009 / 3.0.2 / Editorial / Changed language and formatting in the technical content.
4/10/2009 / 3.0.3 / Editorial / Changed language and formatting in the technical content.
5/22/2009 / 4.0 / Major / Updated and revised the technical content.
7/2/2009 / 5.0 / Major / Updated and revised the technical content.
8/14/2009 / 5.1 / Minor / Clarified the meaning of the technical content.
9/25/2009 / 5.2 / Minor / Clarified the meaning of the technical content.
11/6/2009 / 6.0 / Major / Updated and revised the technical content.
12/18/2009 / 7.0 / Major / Updated and revised the technical content.
1/29/2010 / 8.0 / Major / Updated and revised the technical content.
3/12/2010 / 8.0.1 / Editorial / Changed language and formatting in the technical content.
4/23/2010 / 9.0 / Major / Updated and revised the technical content.
6/4/2010 / 9.0.1 / Editorial / Changed language and formatting in the technical content.
7/16/2010 / 9.0.1 / None / No changes to the meaning, language, or formatting of the technical content.
8/27/2010 / 9.0.1 / None / No changes to the meaning, language, or formatting of the technical content.
10/8/2010 / 9.0.1 / None / No changes to the meaning, language, or formatting of the technical content.
11/19/2010 / 9.0.1 / None / No changes to the meaning, language, or formatting of the technical content.
1/7/2011 / 9.0.1 / None / No changes to the meaning, language, or formatting of the technical content.
2/11/2011 / 9.0.1 / None / No changes to the meaning, language, or formatting of the technical content.
3/25/2011 / 9.0.1 / None / No changes to the meaning, language, or formatting of the technical content.
5/6/2011 / 9.0.1 / None / No changes to the meaning, language, or formatting of the technical content.
6/17/2011 / 9.1 / Minor / Clarified the meaning of the technical content.
9/23/2011 / 9.1 / None / No changes to the meaning, language, or formatting of the technical content.
12/16/2011 / 10.0 / Major / Updated and revised the technical content.
3/30/2012 / 10.1 / Minor / Clarified the meaning of the technical content.
7/12/2012 / 10.2 / Minor / Clarified the meaning of the technical content.
10/25/2012 / 10.2 / None / No changes to the meaning, language, or formatting of the technical content.
1/31/2013 / 10.2 / None / No changes to the meaning, language, or formatting of the technical content.
8/8/2013 / 11.0 / Major / Updated and revised the technical content.
11/14/2013 / 11.0 / None / No changes to the meaning, language, or formatting of the technical content.
2/13/2014 / 11.0 / None / No changes to the meaning, language, or formatting of the technical content.
5/15/2014 / 11.0 / None / No changes to the meaning, language, or formatting of the technical content.
6/30/2015 / 12.0 / Major / Significantly changed the technical content.
10/16/2015 / 12.0 / None / No changes to the meaning, language, or formatting of the technical content.
7/14/2016 / 12.0 / None / No changes to the meaning, language, or formatting of the technical content.
6/1/2017 / 12.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.3.1Session Initialization

1.3.2File Transfer

1.3.3Share Control

1.3.4Chat

1.3.5VoIP Control

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.1Session Initialization Messages

2.2.1.1REMOTEDESKTOP_CHANNELBUFHEADER

2.2.1.2REMOTEDESKTOP_CTL_PACKETHEADER

2.2.1.3REMOTEDESKTOP_CTL_BUFHEADER

2.2.1.4REMOTEDESKTOP_CTL_AUTHENTICATE_PACKET

2.2.1.5REMOTEDESKTOP_CTL_DISCONNECT_PACKET

2.2.1.6REMOTEDESKTOP_CTL_ISCONNECTED_PACKET

2.2.1.7REMOTEDESKTOP_CTL_SERVER_ANNOUNCE

2.2.1.8REMOTEDESKTOP_CTL_VERSIONINFO_PACKET

2.2.1.9REMOTEDESKTOP_CTL_REMOTE_CONTROL_DESKTOP_PACKET

2.2.1.10REMOTEDESKTOP_CTL_RESULT_PACKET

2.2.1.11REMOTEDESKTOP_CTL_VERIFY_PASSWORD_PACKET

2.2.1.12REMOTEDESKTOP_EXPERT_ON_VISTA

2.2.1.13REMOTEDESKTOP_CTL_RANOVICE_NAME

2.2.1.14REMOTEDESKTOP_CTL_RAEXPERT_NAME

2.2.1.15REMOTEDESKTOP_CTL_TOKEN_PACKET

2.2.2Session Control (RCCOMMAND)

2.2.3File Transfer Commands

2.2.4Session Authorization Token

2.2.5Remote Assistance Contact Information

2.2.6Remote Assistance Error Codes

2.2.7Extensions to the Remote Desktop Protocol

2.2.7.1Fast-Path Update Wrapper (MSRA_FP_UPDATE_WRAPPER)

2.2.7.2Client Info PDU

3Protocol Details

3.1Establishing a Remote Assistance Connection - Expert 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.6Timer Events

3.1.7Other Local Events

3.2Establishing a Remote Assistance Connection - Novice 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.6Timer Events

3.2.7Other Local Events

3.3Session Initialization Using the Expert (Client) Implementing Only Version 1 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

3.4Session Initialization Using the Novice (Server) Implementing Only Version 1 Details

3.4.1Abstract Data Model

3.4.2Timers

3.4.3Initialization

3.4.4Higher-Layer Triggered Events

3.4.5Message Processing Events and Sequencing Rules

3.4.6Timer Events

3.4.7Other Local Events

3.5Session Initialization Using the Expert (Client) Implementing Version 1 and Version 2 Details

3.5.1Abstract Data Model

3.5.2Timers

3.5.3Initialization

3.5.4Higher-Layer Triggered Events

3.5.5Message Processing Events and Sequencing Rules

3.5.6Timer Events

3.5.7Other Local Events

3.6Session Initialization Using the Novice (Server) Implementing Version 1 and Version 2 Details

3.6.1Abstract Data Model

3.6.2Timers

3.6.3Initialization

3.6.4Higher-Layer Triggered Events

3.6.5Message Processing Events and Sequencing Rules

3.6.6Timer Events

3.6.7Other Local Events

3.7Session Initialization Using the Expert (Client) Implementing Version 1, Version 2, and Version 3 Details

3.7.1Abstract Data Model

3.7.2Timers

3.7.3Initialization

3.7.4Higher-Layer Triggered Events

3.7.5Message Processing Events and Sequencing Rules

3.7.6Timer Events

3.7.7Other Local Events

3.8Session Initialization Using the Novice (Server) Implementing Version 1, Version 2, and Version 3 Details

3.8.1Abstract Data Model

3.8.2Timers

3.8.3Initialization

3.8.4Higher-Layer Triggered Events

3.8.5Message Processing Events and Sequencing Rules

3.8.6Timer Events

3.8.7Other Local Events

3.9File Transfer Sender Details

3.9.1Abstract Data Model

3.9.2Timers

3.9.3Initialization

3.9.4Higher-Layer Triggered Events

3.9.5Message Processing Events and Sequencing Rules

3.9.6Timer Events

3.9.7Other Local Events

3.10File Transfer Receiver Details

3.10.1Abstract Data Model

3.10.2Timers

3.10.3Initialization

3.10.4Higher-Layer Triggered Events

3.10.5Message Processing Events and Sequencing Rules

3.10.6Timer Events

3.10.7Other Local Events

3.11Chat (Text) Sender Details

3.11.1Abstract Data Model

3.11.2Timers

3.11.3Initialization

3.11.4Higher-Layer Triggered Events

3.11.5Message Processing Events and Sequencing Rules

3.11.6Timer Events

3.11.7Other Local Events

3.12Chat (Text) Receiver Details

3.12.1Abstract Data Model

3.12.2Timers

3.12.3Initialization

3.12.4Higher-Layer Triggered Events

3.12.5Message Processing Events and Sequencing Rules

3.12.6Timer Events

3.12.7Other Local Events

3.13Setting Announcement Sender Details

3.13.1Abstract Data Model

3.13.2Timers

3.13.3Initialization

3.13.4Higher-Layer Triggered Events

3.13.5Message Processing Events and Sequencing Rules

3.13.6Timer Events

3.13.7Other Local Events

3.14Setting Announcement Receiver Details

3.14.1Abstract Data Model

3.14.2Timers

3.14.3Initialization

3.14.4Higher-Layer Triggered Events

3.14.5Message Processing Events and Sequencing Rules

3.14.6Timer Events

3.14.7Other Local Events

3.15Share Control Remote Assistance Expert (Client) Details

3.15.1Abstract Data Model

3.15.2Timers

3.15.3Initialization

3.15.4Higher-Layer Triggered Events

3.15.5Message Processing Events and Sequencing Rules

3.15.6Timer Events

3.15.7Other Local Events

3.16Share Control Remote Assistance Novice (Server) Details

3.16.1Abstract Data Model

3.16.2Timers

3.16.3Initialization

3.16.4Higher-Layer Triggered Events

3.16.5Message Processing Events and Sequencing Rules

3.16.6Timer Events

3.16.7Other Local Events

3.17Voice Expert (Client) Details

3.17.1Abstract Data Model

3.17.2Timers

3.17.3Initialization

3.17.4Higher-Layer Triggered Events

3.17.5Message Processing Events and Sequencing Rules

3.17.6Timer Events

3.17.7Other Local Events

3.18Voice Novice (Server) Details

3.18.1Abstract Data Model

3.18.2Timers

3.18.3Initialization

3.18.4Higher-Layer Triggered Events

3.18.5Message Processing Events and Sequencing Rules

3.18.6Timer Events

3.18.7Other Local Events

4Protocol Examples

4.1Example of a VOIPGO Message

4.2Example of a FILEXFER Message

5Security

5.1Security Considerations for Implementers

5.2Index of Security Parameters

6Appendix A: Product Behavior

7Change Tracking

8Index

1Introduction

This document describes the Remote Assistance Protocol. This protocol is used after a Remote Assistance connection is established between two computers. The protocol used to establish the Remote Assistance connection is specified in [MS-RAI]. After the Remote Assistance connection is established, this protocol is used to support communications and control between the two computers. The functions supported by the Remote Assistance Protocol are session initialization, file transfer, chat (text message exchange), share control, and Voice-over-IP (VoIP) control.

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:

expert: The side of a Remote Assistance connection that is able to view the remote screen of the other computer in order to provide help.

novice: The side of a Remote Assistance connection that shares its screen with the other computer in order to receive help.

peer identity: A public/private key pair used by the Peer Name Resolution Protocol (PNRP).

peer name: A string composed of an authority and a classifier. This is the string used by applications to resolve to a list of endpoints and/or an extended payload. A peer name is not required to be unique. For example, several nodes that provide the same service can register the same Peer Name.

Remote Assistance (RA): A feature of the operating system that allows screen, keyboard, and mouse sharing so that a computer user can be assisted by a remote helper.

Remote Assistance connection: A communication framework that is established between two computers that facilitates Remote Assistance.

Remote Assistance session: A Remote Assistance connection that has been accepted by the novice. The expert is able to view the novice's screen once the Remote Assistance session is started.

Remote Desktop Protocol (RDP): A multi-channel protocol that allows a user to connect to a computer running Microsoft Terminal Services (TS). RDP enables the exchange of client and server settings and also enables negotiation of common settings to use for the duration of the connection, so that input, graphics, and other data can be exchanged and processed between client and server.

SHA-1 hash: A hashing algorithm as specified in [FIPS180-2] that was developed by the National Institute of Standards and Technology (NIST) and the National Security Agency (NSA).

Transmission Control Protocol (TCP): A protocol used with the Internet Protocol (IP) to send data in the form of message units between computers over the Internet. TCP handles keeping track of the individual units of data (called packets) that a message is divided into for efficient routing through the Internet.

Unicode: A character encoding standard developed by the Unicode Consortium that represents almost all of the written languages of the world. The Unicode standard [UNICODE5.0.0/2007] provides three forms (UTF-8, UTF-16, and UTF-32) and seven schemes (UTF-8, UTF-16, UTF-16 BE, UTF-16 LE, UTF-32, UTF-32 LE, and UTF-32 BE).

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

virtual channel: A transport used for communication between a client and a server component over a main data connection, in 1600-byte chunks, as specified in Static Virtual Channels in [MS-RDPBCGR].

Voice over IP (VoIP): The use of the Internet Protocol (IP) for transmitting voice communications. VoIP delivers digitized audio in packet form and can be used to transmit over intranets, extranets, and the Internet.

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-PNRP] Microsoft Corporation, "Peer Name Resolution Protocol (PNRP) Version 4.0".

[MS-RAIOP] Microsoft Corporation, "Remote Assistance Initiation over PNRP Protocol".

[MS-RAI] Microsoft Corporation, "Remote Assistance Initiation Protocol".

[MS-RDPBCGR] Microsoft Corporation, "Remote Desktop Protocol: Basic Connectivity and Graphics Remoting".

[MS-RDPEGDI] Microsoft Corporation, "Remote Desktop Protocol: Graphics Device Interface (GDI) Acceleration Extensions".

[MS-RDPEMC] Microsoft Corporation, "Remote Desktop Protocol: Multiparty Virtual Channel Extension".

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997,

[RFC3447] Jonsson, J. and Kaliski, B., "Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1", RFC 3447, February 2003,

[RFC793] Postel, J., Ed., "Transmission Control Protocol: DARPA Internet Program Protocol Specification", RFC 793, September 1981,

1.2.2Informative References

[MSDN-RTC] Microsoft Corporation, "RTC Overview",

1.3Overview

The Remote Assistance Protocol is used after a Remote Assistance connection is established to facilitate different capabilities used during the connection. This protocol supports six capabilities: basic connection, session initialization, file transfer, chat, share control, and VoIP control.

After a basic Remote Assistance connection is made as specified in sections 3.1 and 3.2, the Remote Assistance Protocol uses virtual channels as its underlying transport to accomplish these capabilities. There are four virtual channels used by the Remote Assistance Protocol:

As specified in sections 3.3, 3.4, 3.5, 3.6, 3.7, and 3.8, the session initialization virtual channel is created after the Remote Assistance connection is made, and it persists through the duration of the Remote Assistance connection. This channel is used to do initial setup and configuration of the Remote Assistance connection and establish a Remote Assistance session.

The file transfer virtual channel is created on demand to transfer file data.

The chat virtual channel is created when the Remote Assistance connection is first established, and it persists through the duration of the Remote Assistance connection.

The last virtual channel is used for share control and to initialize VoIP and file transfer.

1.3.1Session Initialization

The session initialization capability supported by the Remote Assistance Protocol allows control messages to be exchanged between the novice and the expert. This exchange has to be completed successfully for the Remote Assistance session to be established.

Once the Remote Assistance session is established, the expert can view the novice's screen, and other Remote Assistance (RA) capabilities can be initiated.

1.3.2File Transfer

The file transfer capability supported by the Remote Assistance Protocol enables files to be copied from one computer to another. Both computers have to be in a Remote Assistance session to transfer files. The Remote Assistance Protocol supports the transfer of one file at a time. File transfers can occur in either direction (from expert to novice or from novice to expert). File transfers are originated by the sender (expert or novice) side and the receiver accepts the file to complete the file transfer.

A file transfer virtual channel is created dynamically to transfer the file. Once the virtual channel is established, control messages and data messages are sent through the virtual channel to complete the transfer. The data messages contain the data that is in the file, and the control messages synchronize the file transfer between the two computers and confirm successful transfer.