6 Appendix A: Product Behavior

The information in this specification is applicable to the following Microsoft products or supplemental software. References to product versions include updates to those products.

  • 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

  • Windows Server 2019 operating system

  • Windows Server 2022 operating system

  • Windows 11 operating system

  • Windows Server 2025 operating system

Exceptions, if any, are noted in this section. If an update version, service pack or Knowledge Base (KB) number appears with a product name, the behavior changed in that update. The new behavior also applies to subsequent updates 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 2.1: In Windows, the client advertises the static virtual channel named "RDPDR", as defined in [MS-RDPEFS]. If that channel is not advertised, the server will not issue any communication on the "RDPSND" channel. Not supported on Windows XP and Windows Server 2003.

<2> Section 2.1: Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, and Windows Server 2019 always use unreliable UDP for dynamic virtual channel if the following three conditions are true. Otherwise, reliable transport is used. 

  • An unreliable UDP transport is available.

  • The protocol version of both client and server is at least version 8.

  • The AAC codec is used to compress data.

<3> Section 2.2.2.1:

Client and server version

Meaning

0x02

Windows XP

0x05

Windows XP operating system Service Pack 1 (SP1), Windows XP operating system Service Pack 2 (SP2), and Windows XP operating system Service Pack 3 (SP3)

0x05

Windows Server 2003

0x05

Windows Vista

0x05

Windows Server 2008

0x06

Windows 7

0x06

Windows Server 2008 R2 operating system

0x08

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, and Windows Server 2019

<4> Section 2.2.2.1.1: For more information about registering format information, see [RFC2361].

For more information about Pulse-Code Modulation (PCM), see [G711].

For more information about Global System for Mobile communications (GSM), see [ETSI-GSM].

The following tables show codecs and associated format tags that are supported by default on the different versions of Windows, which support audio redirection. Unless otherwise specified, information about these codecs can be found in [RFC2361].

The following codecs are supported by default on Windows XP and Windows Server 2003:

Codec name

 Format tag

Exceptions

DSP Group, Inc. TrueSpeech

WAVE_FORMAT_DSPGROUP_TRUESPEECH

0x0022

ISO/MPEG Layer 3 [ISO/IEC-11172-3]

WAVE_FORMAT_MPEGLAYER3

0x0055

Voxware, Inc. AC10

WAVE_FORMAT_VOXWARE_AC10

0x0071

Not supported on Windows Server 2003

Voxware, Inc. AC16

WAVE_FORMAT_VOXWARE_AC16

0x0072

Not supported on Windows Server 2003

Voxware, Inc. AC20

WAVE_FORMAT_VOXWARE_AC20

0x0073

Voxware, Inc. AC8

WAVE_FORMAT_VOXWARE_AC8

0x0070

Not supported on Windows Server 2003

The following codecs are supported by default on Windows:

Codec name

 Format tag

Exceptions

Microsoft PCM

WAVE_FORMAT_PCM

0x0001

Microsoft Adaptive PCM

WAVE_FORMAT_ADPCM

0x0002

Microsoft ALAW

WAVE_FORMAT_ALAW

0x0006

Microsoft G.723

WAVE_FORMAT_MSG723

0x0042

Microsoft GSM

WAVE_FORMAT_GSM610

0x0031

Microsoft MULAW

WAVE_FORMAT_MULAW

0x0007

Microsoft AAC

WAVE_FORMAT_AAC

0xa106

Not supported on Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2

Microsoft Implementations deviate from the GSM standard [ETSI-GSM] while bitpacking coefficients, as described by the following example:

  
 ITU-T Standard Implementation of GSM 610
     if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1;
     LARc[1]  = (*c++ & 0xF) << 2;                  /* 1 */
     LARc[1] |= (*c >> 6) & 0x3;
     LARc[2]  = *c++ & 0x3F;
     LARc[3]  = (*c >> 3) & 0x1F;
     LARc[4]  = (*c++ & 0x7) << 2;
     LARc[4] |= (*c >> 6) & 0x3;
     LARc[5]  = (*c >> 2) & 0xF;
     LARc[6]  = (*c++ & 0x3) << 2;
     LARc[6] |= (*c >> 6) & 0x3;
     LARc[7]  = (*c >> 3) & 0x7;
     LARc[8]  = *c++ & 0x7;
  
 Microsoft Implementaion of GSM 610
     LAR[1] =  (ab[0] & 0x3F);
     LAR[2] = ((ab[0] & 0xC0) >> 6) | ((ab[1] & 0x0F) << 2);
     LAR[3] = ((ab[1] & 0xF0) >> 4) | ((ab[2] & 0x01) << 4);
     LAR[4] = ((ab[2] & 0x3E) >> 1);
     LAR[5] = ((ab[2] & 0xC0) >> 6) | ((ab[3] & 0x03) << 2);
     LAR[6] = ((ab[3] & 0x3C) >> 2);
     LAR[7] = ((ab[3] & 0xC0) >> 6) | ((ab[4] & 0x01) << 2);
     LAR[8] = ((ab[4] & 0x0E) >> 1);
  

The ITU implementation is Most Significant Bit (MSB) to Least Significant Bit (LSB). The Microsoft Implementation is LSB to MSB. The following coefficients are represented as MSB to LSB. The first line is the bit position in the actual byte, the second line is the coefficient index, and the third line is the bit position of the coefficients.

 ITU:
  
 BYTE 0            BYTE 1            BYTE 2            BYTE 3
 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0
         1 1 1 1   1 1 2 2 2 2 2 2   3 3 3 3 3 4 4 4   4 4 ...
         5 4 3 2   1 0 5 4 3 2 1 0   4 3 2 1 0 4 3 2   1 0 ...
  
 MS:
  
 BYTE 3            BYTE 2            BYTE 1            BYTE 0
 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0
                   ... 4 4 4 4 4 3   3 3 3 3 2 2 2 2   2 2 1 1 1 1 1 1
                   ... 4 3 2 1 0 4   3 2 1 0 5 4 3 2   1 0 5 4 3 2 1 0
  

<5> Section 2.2.2.2: AAC is only used if the client includes an AUDIO_FORMAT entry with wFormatTag equal to Microsoft AAC, and nAvgBytesPerSec equal to 12000 in sndFormats when sending the Client Audio Formats and Version PDU.

<6> Section 2.2.2.2:

Client and server version

Meaning

0x02

Windows XP

0x05

Windows XP SP1, Windows XP SP2, and Windows XP SP3

0x05

Windows Server 2003

0x05

Windows Vista

0x05

Windows Server 2008

0x06

Windows 7

0x06

Windows Server 2008 R2

0x08

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, and Windows Server 2019

<7> Section 2.2.2.3: If the server version is under 6, the Quality Mode PDU will not be handled on the server side. If the server version is at least 6, but the client version is under 6, the Quality Mode PDU will be ignored on the server side.

<8> Section 2.2.3.3: Windows sets this field to the number of milliseconds that have elapsed since the system was started.

<9> Section 2.2.3.5: Windows sets this field to the number of milliseconds that have elapsed since the system was started.

<10> Section 2.2.3.10: Windows sets this field to the number of milliseconds that have elapsed since the system was started.

<11> Section 3.1.3: Windows 8 and Windows Server 2012 will try to create a dynamic virtual channel first. If that fails, they will try to create a static virtual channel.

<12> Section 3.2.5.1.1.2: Windows XP and Windows Server 2003 clients try to negotiate UDP using the API function getsockname. If the function is successful, Windows clients advertise a UDP port. Otherwise, the clients use static virtual channels. For more information about the getsockname function, see [MSDN-getsockname].

Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2 always use static virtual channels, even if the client advertises a UDP port.

Windows 8 and Windows Server 2012 always use virtual channels, even if the client advertises a UDP port.

Windows XP and Windows XP SP1 servers use UDP.

Windows Server 2003, Windows XP SP2, and Windows XP SP3 use UDP if the client advertises a UDP port, with the following exception: if the client version is less than 5, and the data size is greater than the maximum datagram size for the UDP socket, these servers use static virtual channels.

<13> Section 3.2.5.1.1.4: In Windows XP and Windows Server 2003, if a client advertises a UDP port during version exchange, the Training PDUs are first sent over UDP. Static virtual channels are used only if the communication over UDP fails.

In Windows Vista, Windows Server 2008 operating system, Windows 7, and Windows Server 2008 R2, the training PDU is always sent over static virtual channels even if the client has advertised a UDP port.

In Windows 8 and Windows Server 2012, the training PDU is always sent over virtual channels even if the client has advertised a UDP port.

<14> Section 3.3.2: A Windows server will wait 10 seconds after sending a Server Audio Formats and Version PDU. If a Client Audio Formats and Version PDU is not received within this time, the server terminates the protocol.

<15> Section 3.3.2: Windows XP and Windows Server 2003 servers will wait 1 second after sending a UDP Training PDU for the Training Confirm PDU. If the Training Confirm PDUs are not received, the server will retry up to 10 times before falling back on static virtual channels.

<16> Section 3.3.2: Windows 7 and Windows Server 2008 R2 servers will wait 10 seconds after receiving a Client Audio Formats and Version PDU. If the Quality Mode PDU is not received, the server uses the DYNAMIC_QUALITY quality mode (section 2.2.2.3).

<17> Section 3.3.5.1.1.2: If a Windows server receives the client PDU before sending the server PDU to the client, the server processes the client PDU as if it were received in the normal sequence (after the server sends the server PDU). If the format list that is contained in the client PDU is not a subset of the format list that is contained in the server PDU, the server handles the format list as if it is a subset of the formats it sends out. The server picks a format from the list, and if the format is not supported by the server, the server will close the virtual channel. If the picked format is supported on the server side, the server will start sending data using that format. Note that even when the server starts sending data, it can change the format later and subsequently close the virtual channel if the changed format is not supported on server side.

<18> Section 3.3.5.1.1.2: Windows XP and Windows Server 2003 use UDP.

Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2 always use virtual channels.

Windows 8 and Windows Server 2012 always use virtual channels.

<19> Section 3.3.5.1.1.3: Windows 7 and Windows Server 2008 R2 servers will wait 10 seconds after receiving a Client Audio Formats and Version PDU. If the Quality Mode PDU is not received, the server uses the DYNAMIC_QUALITY quality mode (section 2.2.2.3).

<20> Section 3.3.5.1.1.4: Windows XP and Windows Server 2003 clients try to negotiate UDP by using the API function getsockname. If the function is successful, Windows clients advertise a UDP port. Otherwise, the clients use static virtual channels. For more information about the getsockname function, see [MSDN-getsockname].

Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2 always use static virtual channels, even if the client advertises a UDP port.

Windows 8 and Windows Server 2012 always use virtual channels, even if the client advertises a UDP port.

Windows Server 2003, Windows XP, Windows XP SP1, Windows XP SP2, and Windows XP SP3 servers use UDP, provided that the client advertises a UDP port.

<21> Section 3.3.5.1.1.5: Windows XP and Windows Server 2003 servers will wait 1 second after sending a UDP Training PDU for the Training Confirm PDU. If theTraining Confirm PDUs are not received, the server will retry up to 10 times before falling back on static virtual channels.

<22> Section 3.3.5.1.1.6:  Windows XP and Windows Server 2003 servers will not send a Crypt Key PDU if the Encryption Level in the RDP Listener settings is set to "Low".

<23> Section 3.3.5.2: Windows XP and Windows Server 2003 clients try to negotiate UDP by using the API function getsockname. If the function is successful, Windows clients advertise a UDP port. Otherwise, the clients use static virtual channels. For more information about the getsockname function, see [MSDN-getsockname].

Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2 always use static virtual channels, even if the client advertises a UDP port and the samples will be sent by using a WaveInfo PDU and a Wave PDU.

Windows 8 and Windows Server 2012 always use virtual channels, even if the client advertises a UDP port and the samples are sent by using a WaveInfo PDU and a Wave PDU, or a Wave2 PDU.

Windows XP and Windows XP SP1 servers use UDP and samples are sent using a Wave Encrypt PDU.

When the client version is less than 5, Windows Server 2003, Windows XP SP2, and Windows XP SP3 use UDP and samples are sent using a Wave Encrypt PDU. However, if the data size is greater than the maximum datagram size for the UDP socket, the samples are sent using a static virtual channel with a WaveInfo PDU and Wave PDU.

<24> Section 3.3.5.2: Windows XP and Windows Server 2003 clients try to negotiate UDP by using the API function getsockname. If the function is successful, Windows clients advertise a UDP port. Otherwise, the clients use static virtual channels. For more information about the getsockname function, see [MSDN-getsockname].

Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2 always use static virtual channels, even if the client advertises a UDP port and the samples will be sent by using a WaveInfo PDU and a Wave PDU.

Windows 8 and Windows Server 2012 always use virtual channels, even if the client advertises a UDP port and the samples are sent by using a WaveInfo PDU and a Wave PDU, or a Wave2 PDU.

Windows XP and Windows XP SP1 use UDP if the client advertises a UDP port and the samples will be sent by using a Wave Encrypt PDU.

If the client is less than 5 and the data size is greater than the maximum datagram size for the UDP socket, Windows Server 2003, Windows XP SP2, and Windows XP SP3 will use a static virtual channel, otherwise, the samples will be sent by using a Wave Encrypt PDU over UDP.

If the server is Windows Server 2003, Windows XP SP2, or Windows XP SP3, and the client is at least 5, the samples will be sent over UDP. If the data size is greater than the maximum datagram size for the UDP socket, samples will be sent by using UDP Wave PDUs and a UDP Wave Last PDU; otherwise, the samples will be sent by using a Wave Encrypt PDU.

The maximum datagram size for the UDP socket depends on system configuration parameters. Typically, the value is 1460 bytes.

<25> Section 3.3.5.2.1.3: Windows XP and Windows Server 2003 clients try to negotiate UDP by using the API function getsockname. If this function is successful, these clients advertise a UDP port. Otherwise, these clients use static virtual channels. For more information about the getsockname function, see [MSDN-getsockname].