Contents
1 Introduction
1.1 Glossary
1.2 References
1.2.1 Normative References
1.2.2 Informative References
1.3 Overview
1.3.1 Message Flows
1.3.1.1 Connection Sequence
1.3.1.2 Security-Enhanced Connection Sequence
1.3.1.3 Deactivation-Reactivation Sequence
1.3.1.4 Disconnection Sequences
1.3.1.4.1 User-Initiated on Client
1.3.1.4.2 User-Initiated on Server
1.3.1.4.3 Administrator-Initiated on Server
1.3.1.5 Automatic Reconnection
1.3.2 Server Error Reporting and Status Updates
1.3.3 Static Virtual Channels
1.3.4 Data Compression
1.3.5 Keyboard and Mouse Input
1.3.6 Basic Server Output
1.3.7 Controlling Server Graphics Output
1.3.8 Server Redirection
1.4 Relationship to Other Protocols
1.5 Prerequisites/Preconditions
1.6 Applicability Statement
1.7 Versioning and Capability Negotiation
1.8 Vendor-Extensible Fields
1.9 Standards Assignments
2 Messages
2.1 Transport
2.2 Message Syntax
2.2.1 Connection Sequence
2.2.1.1 Client X.224 Connection Request PDU
2.2.1.1.1 RDP Negotiation Request (RDP_NEG_REQ)
2.2.1.2 Server X.224 Connection Confirm PDU
2.2.1.2.1 RDP Negotiation Response (RDP_NEG_RSP)
2.2.1.2.2 RDP Negotiation Failure (RDP_NEG_FAILURE)
2.2.1.3 Client MCS Connect Initial PDU with GCC Conference Create Request
2.2.1.3.1 User Data Header (TS_UD_HEADER)
2.2.1.3.2 Client Core Data (TS_UD_CS_CORE)
2.2.1.3.3 Client Security Data (TS_UD_CS_SEC)
2.2.1.3.4 Client Network Data (TS_UD_CS_NET)
2.2.1.3.4.1 Channel Definition Structure (CHANNEL_DEF)
2.2.1.3.5 Client Cluster Data (TS_UD_CS_CLUSTER)
2.2.1.3.6 Client Monitor Data (TS_UD_CS_MONITOR)
2.2.1.3.6.1 Monitor Definition (TS_MONITOR_DEF)
2.2.1.4 Server MCS Connect Response PDU with GCC Conference Create Response
2.2.1.4.1 User Data Header (TS_UD_HEADER)
2.2.1.4.2 Server Core Data (TS_UD_SC_CORE)
2.2.1.4.3 Server Security Data (TS_UD_SC_SEC1)
2.2.1.4.3.1 Server Certificate (SERVER_CERTIFICATE)
2.2.1.4.3.1.1 Server Proprietary Certificate (PROPRIETARYSERVERCERTIFICATE)
2.2.1.4.3.1.1.1 RSA Public Key (RSA_PUBLIC_KEY)
2.2.1.4.4 Server Network Data (TS_UD_SC_NET)
2.2.1.5 Client MCS Erect Domain Request PDU
2.2.1.6 Client MCS Attach User Request PDU
2.2.1.7 Server MCS Attach User Confirm PDU
2.2.1.8 Client MCS Channel Join Request PDU
2.2.1.9 Server MCS Channel Join Confirm PDU
2.2.1.10 Client Security Exchange PDU
2.2.1.10.1 Security Exchange PDU Data (TS_SECURITY_PACKET)
2.2.1.11 Client Info PDU
2.2.1.11.1 Client Info PDU Data (CLIENT_INFO_PDU)
2.2.1.11.1.1 Info Packet (TS_INFO_PACKET)
2.2.1.11.1.1.1 Extended Info Packet (TS_EXTENDED_INFO_PACKET)
2.2.1.11.1.1.1.1 Time Zone Information (TS_TIME_ZONE_INFORMATION)
2.2.1.11.1.1.1.1.1 System Time (TS_SYSTEMTIME)
2.2.1.12 Server License Error PDU - Valid Client
2.2.1.12.1 Valid Client License Data (LICENSE_VALID_CLIENT_DATA)
2.2.1.12.1.1 Licensing Preamble (LICENSE_PREAMBLE)
2.2.1.12.1.2 Licensing Binary Blob (LICENSE_BINARY_BLOB)
2.2.1.12.1.3 Licensing Error Message (LICENSE_ERROR_MESSAGE)
2.2.1.13 Mandatory Capability Exchange
2.2.1.13.1 Server Demand Active PDU
2.2.1.13.1.1 Demand Active PDU Data (TS_DEMAND_ACTIVE_PDU)
2.2.1.13.1.1.1 Capability Set (TS_CAPS_SET)
2.2.1.13.2 Client Confirm Active PDU
2.2.1.13.2.1 Confirm Active PDU Data (TS_CONFIRM_ACTIVE_PDU)
2.2.1.14 Client Synchronize PDU
2.2.1.14.1 Synchronize PDU Data (TS_SYNCHRONIZE_PDU)
2.2.1.15 Client Control PDU - Cooperate
2.2.1.15.1 Control PDU Data (TS_CONTROL_PDU)
2.2.1.16 Client Control PDU - Request Control
2.2.1.17 Client Persistent Key List PDU
2.2.1.17.1 Persistent Key List PDU Data (TS_BITMAPCACHE_PERSISTENT_LIST_PDU)
2.2.1.17.1.1 Persistent List Entry (TS_BITMAPCACHE_PERSISTENT_LIST_ENTRY)
2.2.1.18 Client Font List PDU
2.2.1.18.1 Font List PDU Data (TS_FONT_LIST_PDU)
2.2.1.19 Server Synchronize PDU
2.2.1.20 Server Control PDU - Cooperate
2.2.1.21 Server Control PDU - Granted Control
2.2.1.22 Server Font Map PDU
2.2.1.22.1 Font Map PDU Data (TS_FONT_MAP_PDU)
2.2.2 Disconnection Sequences
2.2.2.1 Client Shutdown Request PDU
2.2.2.1.1 Shutdown Request PDU Data (TS_SHUTDOWN_REQ_PDU)
2.2.2.2 Server Shutdown Request Denied PDU
2.2.2.2.1 Shutdown Request Denied PDU Data (TS_SHUTDOWN_DENIED_PDU)
2.2.2.3 MCS Disconnect Provider Ultimatum PDU
2.2.3 Deactivation-Reactivation Sequence
2.2.3.1 Server Deactivate All PDU
2.2.3.1.1 Deactivate All PDU Data (TS_DEACTIVATE_ALL_PDU)
2.2.4 Auto-Reconnect Sequence
2.2.4.1 Server Auto-Reconnect Status PDU
2.2.4.1.1 Auto-Reconnect Status PDU Data (TS_AUTORECONNECT_STATUS_PDU)
2.2.4.2 Server Auto-Reconnect Packet (ARC_SC_PRIVATE_PACKET)
2.2.4.3 Client Auto-Reconnect Packet (ARC_CS_PRIVATE_PACKET)
2.2.5 Server Error Reporting and Status Updates
2.2.5.1 Server Set Error Info PDU
2.2.5.1.1 Set Error Info PDU Data (TS_SET_ERROR_INFO_PDU)
2.2.5.2 Server Status Info PDU
2.2.6 Static Virtual Channels
2.2.6.1 Virtual Channel PDU
2.2.6.1.1 Channel PDU Header (CHANNEL_PDU_HEADER)
2.2.7 Capability Sets
2.2.7.1 Mandatory Capability Sets
2.2.7.1.1 General Capability Set (TS_GENERAL_CAPABILITYSET)
2.2.7.1.2 Bitmap Capability Set (TS_BITMAP_CAPABILITYSET)
2.2.7.1.3 Order Capability Set (TS_ORDER_CAPABILITYSET)
2.2.7.1.4 Bitmap Cache Capability Set
2.2.7.1.4.1 Revision 1 (TS_BITMAPCACHE_CAPABILITYSET)
2.2.7.1.4.2 Revision 2 (TS_BITMAPCACHE_CAPABILITYSET_REV2)
2.2.7.1.4.2.1 Bitmap Cache Cell Info (TS_BITMAPCACHE_CELL_CACHE_INFO)
2.2.7.1.5 Pointer Capability Set (TS_POINTER_CAPABILITYSET)
2.2.7.1.6 Input Capability Set (TS_INPUT_CAPABILITYSET)
2.2.7.1.7 Brush Capability Set (TS_BRUSH_CAPABILITYSET)
2.2.7.1.8 Glyph Cache Capability Set (TS_GLYPHCACHE_CAPABILITYSET)
2.2.7.1.8.1 Cache Definition (TS_CACHE_DEFINITION)
2.2.7.1.9 Offscreen Bitmap Cache Capability Set (TS_OFFSCREEN_CAPABILITYSET)
2.2.7.1.10 Virtual Channel Capability Set (TS_VIRTUALCHANNEL_CAPABILITYSET)
2.2.7.1.11 Sound Capability Set (TS_SOUND_CAPABILITYSET)
2.2.7.2 Optional Capability Sets
2.2.7.2.1 Bitmap Cache Host Support Capability Set (TS_BITMAPCACHE_HOSTSUPPORT_CAPABILITYSET)
2.2.7.2.2 Control Capability Set (TS_CONTROL_CAPABILITYSET)
2.2.7.2.3 Window Activation Capability Set (TS_WINDOWACTIVATION_CAPABILITYSET)
2.2.7.2.4 Share Capability Set (TS_SHARE_CAPABILITYSET)
2.2.7.2.5 Font Capability Set (TS_FONT_CAPABILITYSET)
2.2.7.2.6 Multifragment Update Capability Set (TS_MULTIFRAGMENTUPDATE_CAPABILITYSET)
2.2.7.2.7 Large Pointer Capability Set (TS_LARGE_POINTER_CAPABILITYSET)
2.2.7.2.8 Desktop Composition Capability Set (TS_COMPDESK_CAPABILITYSET)
2.2.7.2.9 Surface Commands Capability Set (TS_SURFCMDS_CAPABILITYSET)
2.2.7.2.10 Bitmap Codecs Capability Set (TS_BITMAPCODECS_CAPABILITYSET)
2.2.7.2.10.1 Bitmap Codecs (TS_BITMAPCODECS)
2.2.7.2.10.1.1 Bitmap Codec (TS_BITMAPCODEC)
2.2.7.2.10.1.1.1 Globally Unique Identifier (GUID)
2.2.8 Keyboard and Mouse Input
2.2.8.1 Input PDU Packaging
2.2.8.1.1 Slow-Path (T.128) Formats
2.2.8.1.1.1 Share Headers
2.2.8.1.1.1.1 Share Control Header (TS_SHARECONTROLHEADER)
2.2.8.1.1.1.2 Share Data Header (TS_SHAREDATAHEADER)
2.2.8.1.1.2 Security Headers
2.2.8.1.1.2.1 Basic (TS_SECURITY_HEADER)
2.2.8.1.1.2.2 Non-FIPS (TS_SECURITY_HEADER1)
2.2.8.1.1.2.3 FIPS (TS_SECURITY_HEADER2)
2.2.8.1.1.3 Client Input Event PDU (TS_INPUT_PDU)
2.2.8.1.1.3.1 Client Input Event PDU Data (TS_INPUT_PDU_DATA)
2.2.8.1.1.3.1.1 Slow-Path Input Event (TS_INPUT_EVENT)
2.2.8.1.1.3.1.1.1 Keyboard Event (TS_KEYBOARD_EVENT)
2.2.8.1.1.3.1.1.2 Unicode Keyboard Event (TS_UNICODE_KEYBOARD_EVENT)
2.2.8.1.1.3.1.1.3 Mouse Event (TS_POINTER_EVENT)
2.2.8.1.1.3.1.1.4 Extended Mouse Event (TS_POINTERX_EVENT)
2.2.8.1.1.3.1.1.5 Synchronize Event (TS_SYNC_EVENT)
2.2.8.1.2 Client Fast-Path Input Event PDU (TS_FP_INPUT_PDU)
2.2.8.1.2.1 Fast-Path FIPS Information (TS_FP_FIPS_INFO)
2.2.8.1.2.2 Fast-Path Input Event (TS_FP_INPUT_EVENT)
2.2.8.1.2.2.1 Fast-Path Keyboard Event (TS_FP_KEYBOARD_EVENT)
2.2.8.1.2.2.2 Fast-Path Unicode Keyboard Event (TS_FP_UNICODE_KEYBOARD_EVENT)
2.2.8.1.2.2.3 Fast-Path Mouse Event (TS_FP_POINTER_EVENT)
2.2.8.1.2.2.4 Fast-Path Extended Mouse Event (TS_FP_POINTERX_EVENT)
2.2.8.1.2.2.5 Fast-Path Synchronize Event (TS_FP_SYNC_EVENT)
2.2.8.2 Keyboard Status PDUs
2.2.8.2.1 Server Set Keyboard Indicators PDU
2.2.8.2.1.1 Set Keyboard Indicators PDU Data (TS_SET_KEYBOARD_INDICATORS_PDU)
2.2.8.2.2 Server Set Keyboard IME Status PDU
2.2.8.2.2.1 Set Keyboard IME Status PDU Data (TS_SET_KEYBOARD_IME_STATUS_PDU)
2.2.9 Basic Output
2.2.9.1 Output PDU Packaging
2.2.9.1.1 Slow-Path (T.128) Format
2.2.9.1.1.1 Share Headers
2.2.9.1.1.2 Security Headers
2.2.9.1.1.3 Server Graphics Update PDU (TS_GRAPHICS_PDU)
2.2.9.1.1.3.1 Slow-Path Graphics Update (TS_GRAPHICS_UPDATE)
2.2.9.1.1.3.1.1 Palette Update (TS_UPDATE_PALETTE)
2.2.9.1.1.3.1.1.1 Palette Update Data (TS_UPDATE_PALETTE_DATA)
2.2.9.1.1.3.1.1.2 RGB Palette Entry (TS_PALETTE_ENTRY)
2.2.9.1.1.3.1.2 Bitmap Update (TS_UPDATE_BITMAP)
2.2.9.1.1.3.1.2.1 Bitmap Update Data (TS_UPDATE_BITMAP_DATA)
2.2.9.1.1.3.1.2.2 Bitmap Data (TS_BITMAP_DATA)
2.2.9.1.1.3.1.2.3 Compressed Data Header (TS_CD_HEADER)
2.2.9.1.1.3.1.2.4 RLE Compressed Bitmap Stream (RLE_BITMAP_STREAM)
2.2.9.1.1.3.1.3 Synchronize Update (TS_UPDATE_SYNC)
2.2.9.1.1.4 Server Pointer Update PDU (TS_POINTER_PDU)
2.2.9.1.1.4.1 Point (TS_POINT16)
2.2.9.1.1.4.2 Pointer Position Update (TS_POINTERPOSATTRIBUTE)
2.2.9.1.1.4.3 System Pointer Update (TS_SYSTEMPOINTERATTRIBUTE)
2.2.9.1.1.4.4 Color Pointer Update (TS_COLORPOINTERATTRIBUTE)
2.2.9.1.1.4.5 New Pointer Update (TS_POINTERATTRIBUTE)
2.2.9.1.1.4.6 Cached Pointer Update (TS_CACHEDPOINTERATTRIBUTE)
2.2.9.1.1.5 Server Play Sound PDU
2.2.9.1.1.5.1 Play Sound PDU Data (TS_PLAY_SOUND_PDU_DATA)
2.2.9.1.2 Server Fast-Path Update PDU (TS_FP_UPDATE_PDU)
2.2.9.1.2.1 Fast-Path Update (TS_FP_UPDATE)
2.2.9.1.2.1.1 Fast-Path Palette Update (TS_FP_UPDATE_PALETTE)
2.2.9.1.2.1.2 Fast-Path Bitmap Update (TS_FP_UPDATE_BITMAP)
2.2.9.1.2.1.3 Fast-Path Synchronize Update (TS_FP_UPDATE_SYNCHRONIZE)
2.2.9.1.2.1.4 Fast-Path Pointer Position Update (TS_FP_POINTERPOSATTRIBUTE)
2.2.9.1.2.1.5 Fast-Path System Pointer Hidden Update (TS_FP_SYSTEMPOINTERHIDDENATTRIBUTE)
2.2.9.1.2.1.6 Fast-Path System Pointer Default Update (TS_FP_SYSTEMPOINTERDEFAULTATTRIBUTE)
2.2.9.1.2.1.7 Fast-Path Color Pointer Update (TS_FP_COLORPOINTERATTRIBUTE)
2.2.9.1.2.1.8 Fast-Path New Pointer Update (TS_FP_POINTERATTRIBUTE)
2.2.9.1.2.1.9 Fast-Path Cached Pointer Update (TS_FP_CACHEDPOINTERATTRIBUTE)
2.2.9.1.2.1.10 Fast-Path Surface Commands Update (TS_FP_SURFCMDS)
2.2.9.1.2.1.10.1 Surface Command (TS_SURFCMD)
2.2.9.2 Surface Commands
2.2.9.2.1 Set Surface Bits Command (TS_SURFCMD_SET_SURF_BITS)
2.2.9.2.1.1 Extended Bitmap Data (TS_ BITMAP_DATA_EX)
2.2.9.2.2 Stream Surface Bits Command (TS_SURFCMD_STREAM_SURF_BITS)
2.2.9.2.3 Frame Marker Command (TS_FRAME_MARKER)
2.2.10 Logon Notifications
2.2.10.1 Server Save Session Info PDU
2.2.10.1.1 Save Session Info PDU Data (TS_SAVE_SESSION_INFO_PDU_DATA)
2.2.10.1.1.1 Logon Info Version 1 (TS_LOGON_INFO)
2.2.10.1.1.2 Logon Info Version 2 (TS_LOGON_INFO_VERSION_2)
2.2.10.1.1.3 Plain Notify (TS_PLAIN_NOTIFY)
2.2.10.1.1.4 Logon Info Extended (TS_LOGON_INFO_EXTENDED)
2.2.10.1.1.4.1 Logon Info Field (TS_LOGON_INFO_FIELD)
2.2.10.1.1.4.1.1 Logon Errors Info (TS_LOGON_ERRORS_INFO)
2.2.11 Controlling Server Graphics Output
2.2.11.1 Inclusive Rectangle (TS_RECTANGLE16)
2.2.11.2 Client Refresh Rect PDU
2.2.11.2.1 Refresh Rect PDU Data (TS_REFRESH_RECT_PDU)
2.2.11.3 Client Suppress Output PDU
2.2.11.3.1 Suppress Output PDU Data (TS_SUPPRESS_OUTPUT_PDU)
2.2.12 Display Update Notifications
2.2.12.1 Monitor Layout PDU
2.2.13 Server Redirection
2.2.13.1 Server Redirection Packet (RDP_SERVER_REDIRECTION_PACKET)
2.2.13.1.1 Target Net Addresses (TARGET_NET_ADDRESSES)
2.2.13.1.1.1 Target Net Address (TARGET_NET_ADDRESS)
2.2.13.2 Standard RDP Security
2.2.13.2.1 Standard Security Server Redirection PDU (TS_STANDARD_SECURITY_SERVER_REDIRECTION)
2.2.13.3 Enhanced RDP Security
2.2.13.3.1 Enhanced Security Server Redirection PDU (TS_ENHANCED_SECURITY_SERVER_REDIRECTION)
3 Protocol Details
3.1 Common Details
3.1.1 Abstract Data Model
3.1.2 Timers
3.1.3 Initialization
3.1.4 Higher-Layer Triggered Events
3.1.5 Message Processing Events and Sequencing Rules
3.1.5.1 Disconnection Sequences
3.1.5.1.1 Sending of MCS Disconnect Provider Ultimatum PDU
3.1.5.1.2 Processing of MCS Disconnect Provider Ultimatum PDU
3.1.5.2 Static Virtual Channels
3.1.5.2.1 Sending of Virtual Channel PDU
3.1.5.2.2 Processing of Virtual Channel PDU
3.1.5.2.2.1 Reassembly of Chunked Virtual Channel Data
3.1.6 Timer Events
3.1.7 Other Local Events
3.1.8 MPPC-Based Bulk Data Compression
3.1.8.1 Abstract Data Model
3.1.8.2 Compressing Data
3.1.8.2.1 Setting the Compression Flags
3.1.8.2.2 Operation of the Bulk Compressor
3.1.8.2.3 Data Compression Example
3.1.8.3 Decompressing Data
3.1.8.4 Compression Types
3.1.8.4.1 RDP 4.0
3.1.8.4.1.1 Literal Encoding
3.1.8.4.1.2 Copy-Tuple Encoding
3.1.8.4.1.2.1 Copy-Offset Encoding
3.1.8.4.1.2.2 Length-of-Match Encoding
3.1.8.4.2 RDP 5.0
3.1.8.4.2.1 Literal Encoding
3.1.8.4.2.2 Copy-Tuple Encoding
3.1.8.4.2.2.1 Copy-Offset Encoding
3.1.8.4.2.2.2 Length-of-Match Encoding
3.1.9 Interleaved RLE-Based Bitmap Compression
3.2 Client Details
3.2.1 Abstract Data Model
3.2.1.1 Received Server Data
3.2.1.2 Static Virtual Channel IDs
3.2.1.3 I/O Channel ID
3.2.1.4 User Channel ID
3.2.1.5 Server Channel ID
3.2.1.6 Server Capabilities
3.2.1.7 Share ID
3.2.1.8 Automatic Reconnection Cookie
3.2.1.9 Server Licensing Encryption Ability
3.2.1.10 Pointer Image Cache
3.2.1.11 Session Keys
3.2.1.12 Bitmap Caches
3.2.1.13 Persistent Bitmap Caches
3.2.1.14 Persisted Bitmap Keys
3.2.1.15 Connection Start Time
3.2.2 Timers
3.2.2.1 Connection Sequence Timeout Timer
3.2.3 Initialization
3.2.4 Higher-Layer Triggered Events
3.2.5 Message Processing Events and Sequencing Rules
3.2.5.1 Constructing a Client-to-Server Slow-Path PDU
3.2.5.2 Processing a Server-to-Client Slow-Path PDU
3.2.5.3 Connection Sequence
3.2.5.3.1 Sending X.224 Connection Request PDU
3.2.5.3.2 Processing X.224 Connection Confirm PDU
3.2.5.3.3 Sending MCS Connect Initial PDU with GCC Conference Create Request
3.2.5.3.4 Processing MCS Connect Response PDU with GCC Conference Create Response
3.2.5.3.5 Sending MCS Erect Domain Request PDU
3.2.5.3.6 Sending MCS Attach User Request PDU
3.2.5.3.7 Processing MCS Attach User Confirm PDU
3.2.5.3.8 Sending MCS Channel Join Request PDU(s)
3.2.5.3.9 Processing MCS Channel Join Confirm PDU(s)
3.2.5.3.10 Sending Security Exchange PDU
3.2.5.3.11 Sending Client Info PDU
3.2.5.3.12 Processing License Error PDU - Valid Client
3.2.5.3.13 Mandatory Capability Exchange
3.2.5.3.13.1 Processing Demand Active PDU
3.2.5.3.13.2 Sending Confirm Active PDU
3.2.5.3.14 Sending Synchronize PDU
3.2.5.3.15 Sending Control PDU - Cooperate
3.2.5.3.16 Sending Control PDU - Request Control
3.2.5.3.17 Sending Persistent Key List PDU(s)
3.2.5.3.18 Sending Font List PDU
3.2.5.3.19 Processing Synchronize PDU
3.2.5.3.20 Processing Control PDU - Cooperate
3.2.5.3.21 Processing Control PDU - Granted Control
3.2.5.3.22 Processing Font Map PDU
3.2.5.4 Disconnection Sequences
3.2.5.4.1 Sending Shutdown Request PDU
3.2.5.4.2 Processing Shutdown Request Denied PDU
3.2.5.5 Deactivation-Reconnection Sequence
3.2.5.5.1 Processing Deactivate All PDU
3.2.5.6 Auto-Reconnect Sequence
3.2.5.6.1 Processing Auto-Reconnect Status PDU
3.2.5.7 Server Error Reporting and Status Updates
3.2.5.7.1 Processing Set Error Info PDU
3.2.5.7.2 Processing Status Info PDU
3.2.5.8 Keyboard and Mouse Input
3.2.5.8.1 Input Event Notifications
3.2.5.8.1.1 Sending Slow-Path Input Event PDU
3.2.5.8.1.2 Sending Fast-Path Input Event PDU
3.2.5.8.2 Keyboard Status PDUs
3.2.5.8.2.1 Processing Set Keyboard Indicators PDU
3.2.5.8.2.2 Processing Set Keyboard IME Status PDU
3.2.5.9 Basic Output
3.2.5.9.1 Processing Slow-Path Graphics Update PDU
3.2.5.9.2 Processing Slow-Path Pointer Update PDU
3.2.5.9.3 Processing Fast-Path Update PDU
3.2.5.9.4 Sound
3.2.5.9.4.1 Processing Play Sound PDU
3.2.5.10 Logon Notifications
3.2.5.10.1 Processing Save Session Info PDU
3.2.5.11 Controlling Server Graphics Output
3.2.5.11.1 Sending Refresh Rect PDU
3.2.5.11.2 Sending Suppress Output PDU
3.2.5.12 Display Update Notifications
3.2.5.12.1 Processing Monitor Layout PDU
3.2.5.13 Server Redirection
3.2.5.13.1 Processing of the Server Redirection PDU
3.2.6 Timer Events
3.2.6.1 Client-Side Connection Sequence Timeout
3.2.7 Other Local Events
3.2.7.1 Disconnection Due to Network Error
3.3 Server Details
3.3.1 Abstract Data Model
3.3.1.1 Received Client Data
3.3.1.2 User Channel ID
3.3.1.3 I/O Channel ID
3.3.1.4 Server Channel ID
3.3.1.5 Client Licensing Encryption Ability
3.3.1.6 Client Capabilities
3.3.1.7 Cached Bitmap Keys
3.3.1.8 Pointer Image Cache
3.3.1.9 Session Keys
3.3.1.10 Automatic Reconnection Cookie
3.3.1.11 Connection Start Time
3.3.2 Timers
3.3.2.1 Connection Sequence Timeout Timer
3.3.3 Initialization
3.3.4 Higher-Layer Triggered Events
3.3.5 Message Processing Events and Sequencing Rules
3.3.5.1 Constructing a Server-to-Client Slow-Path PDU
3.3.5.2 Processing a Client-to-Server Slow-Path PDU
3.3.5.3 Connection Sequence
3.3.5.3.1 Processing X.224 Connection Request PDU
3.3.5.3.2 Sending X.224 Connection Confirm PDU
3.3.5.3.3 Processing MCS Connect Initial PDU with GCC Conference Create Request
3.3.5.3.3.1 Handling Errors in the GCC Conference Create Request Data
3.3.5.3.4 Sending MCS Connect Response PDU with GCC Conference Create Response
3.3.5.3.5 Processing MCS Erect Domain Request PDU
3.3.5.3.6 Processing MCS Attach User Request PDU
3.3.5.3.7 Sending MCS Attach User Confirm PDU
3.3.5.3.8 Processing MCS Channel Join Request PDU(s)
3.3.5.3.9 Sending MCS Channel Join Confirm PDU(s)
3.3.5.3.10 Processing Security Exchange PDU
3.3.5.3.11 Processing Client Info PDU
3.3.5.3.12 Sending License Error PDU - Valid Client
3.3.5.3.13 Mandatory Capability Exchange
3.3.5.3.13.1 Sending Demand Active PDU
3.3.5.3.13.2 Processing Confirm Active PDU
3.3.5.3.14 Processing Synchronize PDU
3.3.5.3.15 Processing Control PDU - Cooperate
3.3.5.3.16 Processing Control PDU - Request Control
3.3.5.3.17 Processing Persistent Key List PDU(s)
3.3.5.3.18 Processing Font List PDU
3.3.5.3.19 Sending Synchronize PDU
3.3.5.3.20 Sending Control PDU - Cooperate
3.3.5.3.21 Sending Control PDU - Granted Control
3.3.5.3.22 Sending Font Map PDU
3.3.5.4 Disconnection Sequences
3.3.5.4.1 Processing Shutdown Request PDU
3.3.5.4.2 Sending Shutdown Request Denied PDU
3.3.5.5 Deactivation-Reconnection Sequence
3.3.5.5.1 Sending Deactivate All PDU
3.3.5.6 Auto-Reconnect Sequence
3.3.5.6.1 Sending Auto-Reconnect Status PDU
3.3.5.7 Server Error Reporting and Status Updates
3.3.5.7.1 Sending Set Error Info PDU
3.3.5.7.1.1 User Authorization Failures
3.3.5.7.2 Sending Status Info PDU
3.3.5.8 Keyboard and Mouse Input
3.3.5.8.1 Input Event Notifications
3.3.5.8.1.1 Processing Slow-Path Input Event PDU
3.3.5.8.1.2 Processing Fast-Path Input Event PDU
3.3.5.8.2 Keyboard Status PDUs
3.3.5.8.2.1 Sending Set Keyboard Indicators PDU
3.3.5.8.2.2 Sending Set Keyboard IME Status PDU
3.3.5.9 Basic Output
3.3.5.9.1 Sending Slow-Path Graphics Update PDU
3.3.5.9.2 Sending Slow-Path Pointer Update PDU
3.3.5.9.3 Sending Fast-Path Update PDU
3.3.5.9.4 Sound
3.3.5.9.4.1 Sending Play Sound PDU
3.3.5.10 Logon Notifications
3.3.5.10.1 Sending Save Session Info PDU
3.3.5.11 Controlling Server Graphics Output
3.3.5.11.1 Processing Refresh Rect PDU
3.3.5.11.2 Processing Suppress Output PDU
3.3.5.12 Display Update Notifications
3.3.5.12.1 Sending Monitor Layout PDU
3.3.5.13 Server Redirection
3.3.5.13.1 Sending of the Server Redirection PDUs
3.3.6 Timer Events
3.3.6.1 Server-Side Connection Sequence Timeout
3.3.6.2 Auto-Reconnect Cookie Update
3.3.7 Other Local Events
4 Protocol Examples
4.1 Annotated Connection Sequence
4.1.1 Client X.224 Connection Request PDU
4.1.2 Server X.224 Connection Confirm PDU
4.1.3 Client MCS Connect Initial PDU with GCC Conference Create Request
4.1.4 Server MCS Connect Response PDU with GCC Conference Create Response
4.1.5 Client MCS Erect Domain Request PDU
4.1.6 Client MCS Attach User Request PDU
4.1.7 Server MCS Attach-User Confirm PDU
4.1.8 MCS Channel Join Request and Confirm PDUs
4.1.8.1 Channel 1007
4.1.8.1.1 Client Join Request PDU for Channel 1007 (User Channel)
4.1.8.1.2 Server Join Confirm PDU for Channel 1007 (User Channel)
4.1.8.2 Channel 1003
4.1.8.2.1 Client Join Request PDU for Channel 1003 (I/O Channel)
4.1.8.2.2 Server Join Confirm PDU for Channel 1003 (I/O Channel)
4.1.8.3 Channel 1004
4.1.8.3.1 Client Join Request PDU for Channel 1004 (rdpdr Channel)
4.1.8.3.2 Server Join Confirm PDU for Channel 1004 (rdpdr Channel)
4.1.8.4 Channel 1005
4.1.8.4.1 Client Join Request PDU for Channel 1005 (cliprdr Channel)
4.1.8.4.2 Server Join Confirm PDU for Channel 1005 (cliprdr Channel)
4.1.8.5 Channel 1006
4.1.8.5.1 Client Join Request PDU for Channel 1006 (rdpsnd Channel)
4.1.8.5.2 Server Join Confirm PDU for Channel 1006 (rdpsnd Channel)
4.1.9 Client Security Exchange PDU
4.1.10 Client Info PDU
4.1.11 Server License Error PDU - Valid Client
4.1.12 Server Demand Active PDU
4.1.13 Client Confirm Active PDU
4.1.14 Client Synchronize PDU
4.1.15 Client Control PDU - Cooperate
4.1.16 Client Control PDU - Request Control
4.1.17 Client Persistent Key List PDU
4.1.18 Client Font List PDU
4.1.19 Server Synchronize PDU
4.1.20 Server Control PDU - Cooperate
4.1.21 Server Control PDU - Granted Control
4.1.22 Server Font Map PDU
4.2 Annotated User-Initiated (on Client) Disconnection Sequence
4.2.1 Client Shutdown Request PDU
4.2.2 Server Shutdown Request Denied PDU
4.2.3 MCS Disconnect Provider Ultimatum PDU
4.3 Annotated Save Session Info PDU
4.3.1 Logon Info Version 2
4.3.2 Plain Notify
4.3.3 Logon Info Extended
4.4 Annotated Server-to-Client Virtual Channel PDU
4.5 Annotated Standard Security Server Redirection PDU
4.6 Annotated Enhanced Security Server Redirection PDU
4.7 Annotated Fast-Path Input Event PDU
4.8 Java Code to Encrypt and Decrypt a Sample Client Random
4.9 Java Code to Sign a Sample Proprietary Certificate Hash
5 Security
5.1 Security Considerations for Implementers
5.2 Index of Security Parameters
5.3 Standard RDP Security
5.3.1 Encryption Levels
5.3.2 Negotiating the Cryptographic Configuration
5.3.2.1 Cryptographic Negotiation Failures
5.3.3 Server Certificates
5.3.3.1 Proprietary Certificates
5.3.3.1.1 Terminal Services Signing Key
5.3.3.1.2 Signing a Proprietary Certificate
5.3.3.1.3 Validating a Proprietary Certificate
5.3.3.2 X.509 Certificate Chains
5.3.4 Client and Server Random Values
5.3.4.1 Encrypting Client Random
5.3.4.2 Decrypting Client Random
5.3.5 Initial Session Key Generation
5.3.5.1 Non-FIPS
5.3.5.2 FIPS
5.3.6 Encrypting and Decrypting the I/O Data Stream
5.3.6.1 Non-FIPS
5.3.6.1.1 Salted MAC Generation
5.3.6.2 FIPS
5.3.7 Session Key Updates
5.3.7.1 Non-FIPS
5.3.7.2 FIPS
5.3.8 Packet Layout in the I/O Data Stream
5.4 Enhanced RDP Security
5.4.1 Encryption Levels
5.4.2 Security-Enhanced Connection Sequence
5.4.2.1 Negotiation-Based Approach
5.4.2.2 Direct Approach
5.4.2.3 Changes to the Security Commencement Phase
5.4.2.4 Disabling Forced Encryption of Licensing Packets
5.4.3 Encrypting and Decrypting the I/O Data Stream
5.4.4 Packet Layout in the I/O Data Stream
5.4.5 External Security Protocols used by RDP
5.4.5.1 Transport Layer Security (TLS) 1.0
5.4.5.2 CredSSP
5.4.5.2.1 User Authorization Failures
5.5 Automatic Reconnection
6 Appendix A: Product Behavior
7 Change Tracking
8 Index