Revision Summary Date Revision History Revision Comments 7/20/2007 0.1 Major MCPP Milestone 5 Initial Availability 9/28/2007 1.0 Major Updated and revised the technical content. 10/23/2007 2.0 Major Updated and revised the technical content. 11/30/2007 2.1 Minor Clarified the meaning of the technical content. 1/25/2008 2.1.1 Editorial Changed language and formatting in the technical content. 3/14/2008 2.1.2 Editorial Changed language and formatting in the technical content. 5/16/2008 2.1.3 Editorial Changed language and formatting in the technical content. 6/20/2008 2.2 Minor Clarified the meaning of the technical content. 7/25/2008 3.0 Updated and revised the technical content.
language, or formatting of the technical content. 11/19/2010 15.0 None No changes to the meaning, language, or formatting of the technical content. 1/7/2011 15.0 None No changes to the meaning, language, or formatting of the technical content. 2/11/2011 16.0 Major Updated and revised the technical content. 3/25/2011 17.0 Major Updated and revised the technical content. 5/6/2011 17.0 None No changes to the meaning, language, or formatting of the technical content. 6/17/2011 17.1 Minor Clarified the meaning of the technical content. 9/23/2011 17.1 None No changes to the meaning, language, or formatting of the
formatting of the technical content. 5/15/2014 21.0 None No changes to the meaning, language, or formatting of the technical content. 6/30/2015 22.0 Major Significantly changed the technical content. 10/16/2015 22.0 None No changes to the meaning, language, or formatting of the technical content. 7/14/2016 23.0 Major Significantly changed the technical content. 6/1/2017 24.0 Major Significantly changed the technical content. 9/15/2017 25.0 Significantly changed the technical content. 12/1/2017 25.1 Minor Clarified the meaning of the technical content. 9/12/2018 26.0 Major Significantly changed the technical content.
... Length Offset ... Padding (20 bytes) ... ... DeviceIoRequest (24 bytes): A DR_DEVICE_IOREQUEST header. The MajorFunction field in this header MUST be set to IRP_MJ_READ. Length (4 bytes): A 32-bit unsigned integer. This field specifies the maximum number of bytes to be read from the device. Offset (8 bytes): A 64-bit unsigned integer. This field specifies the file offset where the read operation is performed. Padding (20 bytes): An array of 20 bytes. Reserved. This field can be set to any value and MUST be ignored. Device Request (DR_WRITE_REQ) This header initiates a write request. This message can have different purposes depending on the device for which it is issued. The device type is determined by the DeviceId field in the header. 0 1 2 3 4 5 6 7 8 9 1 0 1 2 3 4 5 6 7 8 9 2 0 1 2 3 4 5 6 7 8 9 3 0 1 DeviceIoRequest (24 bytes) ... ... Length Offset ... Padding (20 bytes) ... ... WriteData (variable)
DeviceIoReply (16 bytes): A header. The CompletionId field of this header MUST match a message that had the MajorFunction field set to IRP_MJ_WRITE. Length (4 bytes): A 32-bit unsigned integer that specifies the number of bytes written in response to the write request. Padding (1 byte): An 8-bit unsigned integer intended to allow the client minor flexibility in determining the overall packet length. This field is unused and MUST be ignored. Device Control Response (DR_CONTROL_RSP) A message with this header describes a response to a . 0 1 2 3 4 5 6 7 8 9 1 0 1 2 3 4 5 6 7 8 9 2 0 1 2 3 4 5 6 7 8 9 3 0 1 DeviceIoReply (16 bytes) ... ... OutputBufferLength OutputBuffer (variable) ... DeviceIoReply (16 bytes): A header. The CompletionId field of this header MUST match a that had the MajorFunction field set to IRP_MJ_DEVICE_CONTROL. OutputBufferLength (4 bytes): A 32-bit unsigned integer that specifies the number of bytes in the OutputBuffer field. OutputBuffer (variable): A variable-length array of bytes whose size is specified by the OutputBufferLength field. RDP_LOCK_INFO The RDP_LOCK_INFO packet specifies the region of the file to lock or unlock. 0 1 2 3 4 5 6 7 8 9 1 0 1 2 3 4 5 6 7 8 9 2 0 1 2 3 4 5 6 7 8 9 3 0 1 Length ... Offset ... Length (8 A 64-bit unsigned integer that specifies the length of the region. A value of zero is valid and MUST result in locking the zero length region.
Offset (8 bytes): A 64-bit unsigned integer that specifies the offset at which the region starts. Initialization Messages Server Device Announce Response (DR_CORE_DEVICE_ANNOUNCE_RSP) The responds to a with this message. 0 1 2 3 4 5 6 7 8 9 1 0 1 2 3 4 5 6 7 8 9 2 0 1 2 3 4 5 6 7 8 9 3 0 1 Header DeviceId ResultCode Header (4 bytes): An header. The Component field MUST be set to RDPDR_CTYP_CORE, and the PacketId field MUST be set to PAKID_CORE_DEVICE_REPLY. DeviceId (4 bytes): A 32-bit unsigned integer. This ID MUST be the same as one of the IDs specified in the Client Device List Announce Request message. The server sends a separate Server Device Announce Response message for each announced device. ResultCode (4 bytes): A 32-bit unsigned integer that specifies the NTSTATUS code that indicates the success or failure of device initialization. NTSTATUS codes are specified in section 2.3. Server Announce Request (DR_CORE_SERVER_ANNOUNCE_REQ) The server initiates the protocol with this message. 0 1 2 3 4 5 6 7 8 9 1 0 1 2 3 4 5 6 7 8 9 2 0 1 2 3 4 5 6 7 8 9 3 0 1 Header VersionMajor VersionMinor ClientId Header (4 bytes): An header. The Component field MUST be set to RDPDR_CTYP_CORE, and the PacketId field MUST be set to PAKID_CORE_SERVER_ANNOUNCE. VersionMajor (2 bytes): A 16-bit unsigned integer that specifies the server major version number. This field MUST be set to 0x0001. VersionMinor (2 bytes): A 16-bit unsigned integer that specifies the server minor version number. This field MUST be set to one of several values<8>. ClientId (4 bytes): A 32-bit unsigned integer that specifies the unique ID generated by the server as specified in section . Client Announce Reply (DR_CORE_CLIENT_ANNOUNCE_RSP) The replies to the message.
0x00000002 RDPDR_IRP_MJ_CLOSE 0x00000004 Unused, always set. RDPDR_IRP_MJ_READ 0x00000008 Unused, always set. RDPDR_IRP_MJ_WRITE 0x00000010 Unused, always set. RDPDR_IRP_MJ_FLUSH_BUFFERS 0x00000020 Unused, always set. RDPDR_IRP_MJ_SHUTDOWN 0x00000040 Unused, always set. RDPDR_IRP_MJ_DEVICE_CONTROL 0x00000080 Unused, always set. RDPDR_IRP_MJ_QUERY_VOLUME_INFORMATION 0x00000100 Unused, always set. RDPDR_IRP_MJ_SET_VOLUME_INFORMATION 0x00000200 Unused, always set. RDPDR_IRP_MJ_QUERY_INFORMATION 0x00000400 Unused, always set. RDPDR_IRP_MJ_SET_INFORMATION 0x00000800 Unused, always set. RDPDR_IRP_MJ_DIRECTORY_CONTROL 0x00001000 Unused, always set. RDPDR_IRP_MJ_LOCK_CONTROL 0x00002000 Unused, always set. RDPDR_IRP_MJ_QUERY_SECURITY 0x00004000 Enable Security requests (IRP_MJ_QUERY_SECURITY). RDPDR_IRP_MJ_SET_SECURITY 0x00008000 Enable Set Security requests (IRP_MJ_SET_SECURITY). ioCode2 (4 bytes): A 32-bit unsigned integer that is currently reserved for future use, and MUST be set to 0. extendedPDU (4 A 32-bit unsigned integer that specifies extended flags. This field MUST be set as a bitmask of the following values. Value Meaning RDPDR_DEVICE_REMOVE_PDUS 0x00000001 Allow the client to send packets. RDPDR_CLIENT_DISPLAY_NAME_PDU 0x00000002 Unused, always set.
0 1 2 3 4 5 6 7 8 9 1 0 1 2 3 4 5 6 7 8 9 2 0 1 2 3 4 5 6 7 8 9 3 0 1 Header ... Header (8 bytes): A header. The CapabilityType field of this header MUST be set to CAP_DRIVE_TYPE, and the Version field MUST be set to DRIVE_CAPABILITY_VERSION_02. Card Capability Set (SMARTCARD_CAPS_SET) This packet is embedded into and messages. It indicates that smart card devices are supported.<10> 0 1 2 3 4 5 6 7 8 9 1 0 1 2 3 4 5 6 7 8 9 2 0 1 2 3 4 5 6 7 8 9 3 0 1 Header ... Header (8 bytes): A header. The CapabilityType field of this header MUST be set to CAP_SMARTCARD_TYPE, and the Version field MUST be set to 0x00000001. Client Core Capability Response (DR_CORE_CAPABILITY_RSP) This packet is identical to with the exception that the PacketId field in MUST be set to PAKID_CORE_CLIENT_CAPABILITY. Client Device List Announce Request (DR_CORE_DEVICELIST_ANNOUNCE_REQ) The client announces the list of devices to redirect on the server. 0 1 2 3 4 5 6 7 8 9 1 0 1 2 3 4 5 6 7 8 9 2 0 1 2 3 4 5 6 7 8 9 3 0 1 Header DeviceCount DeviceList (variable) ... Header (4 An header. The Component field MUST be set to RDPDR_CTYP_CORE, and the PacketId field MUST be set to PAKID_CORE_DEVICELIST_ANNOUNCE. DeviceCount (4 bytes): A 32-bit unsigned integer that specifies the number of items in the DeviceList array. DeviceList (variable): A variable-length array of headers. This field specifies a list of devices that are being announced. The number of entries is specified by the DeviceCount field. There is no
Index A Abstract data model client ( 56, 59) server ( 56, 64) 13 C 13 35 15 16 87 Client ( 56, 59) abstract data model ( 56, 59) higher-layer triggered events ( 57, 60) initialization ( 57, 60) events ( 59, 64) message processing ( 57, 60) 64 sequencing rules ( 57, 60) timer events ( 59, 64) timers ( 56, 60) 35 14 D Data model - abstract client ( 56, 59) server ( 56, 64) 14 17 21 25 23 27 31 35 29 30 28 35 28 31 30 20 24 24 18 36 37 38 49 39 50 48 37 48 47 54 46 53 45 53 42 52 40 50 38 49 43 52 41 51 38 50 21 26 22 26 61 12 36 35 E 69 70 72 73 74 77 74 73 82 81 79 78 75 80 79 77 71 77 70 71 74 71 73 70 77 82 80 79 74 80 78 76 71
F 13 G 32 9 H Higher-layer triggered events client ( 57, 60) server ( 57, 64) I 84 84 10 Initialization client ( 57, 60) server ( 57, 64) 28 9 L Local events client ( 59, 64) server ( 59, 68) M Message processing client ( 57, 60) 61 61 60 server ( 57, 64) 61 61 60 Messages 14 61 36 28 14 14 14 N 10 O Other local events 64 68 10 10 P 84 34 12 12 34 85 Protocol Details 56 10 R 44 28 14 10 10 10 12 S Security 84 84 84 Sequencing client ( 57, 60) server ( 57, 64) Server ( 56, 64) abstract data model ( 56, 64) triggered events ( 57, 64) initialization ( 57, 64) local events ( 59, 68) message processing ( 57, 64) 68 sequencing rules ( 57, 64) timer events ( 59, 68) timers ( 56, 64) 35 13 14 T events client ( 59, 64) server ( 59, 68) Timers client ( 56, 60) server ( 56, 64) 87 14 Triggered events - higher-layer client ( 57, 60) server ( 57, 64) V 13 13