Messages Transport The Remote Desktop Protocol: USB Devices Virtual Channel Extension is designed to operate over dynamic virtual channels, as specified in . The dynamic virtual channel name is the -encoded string "URBDRC". The of a channel name when opening a dynamic virtual channel is specified in [MS-RDPEDYC] section 2.2.2.1. Message Syntax Shared Message Header (SHARED_MSG_HEADER) Every packet in this extension contains a common header.<1> 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 InterfaceId Mask MessageId FunctionId (optional) messagePayload (variable) ... InterfaceId (30 bits): A 30-bit field that represents the common identifier for the interface. Some interfaces have predefined default IDs. If the message uses a default interface ID, the message is interpreted for the associated interface. All other values MUST be retrieved either from a Query Interface response (QI_RSP) ( section 2.2.2.1.2) or from responses that contain interface IDs. The highest two bits of the NetInterfaceId field in a QI_RSP message MUST be ignored. This interface ID is valid until it is sent or received in an Interface Release (IFACE_RELEASE) message ([MS-RDPEXPS] section 2.2.2.2). After an IFACE_RELEASE message is processed, the ID is considered invalid. Mask (2 bits): The 2 bits of the Mask field MUST be set to one of the following values. Value Meaning STREAM_ID_STUB 0x2 Indicates that the SHARED_MSG_HEADER is being used in a response message. STREAM_ID_PROXY 0x1 Indicates that the SHARED_MSG_HEADER is not being used in a response message. STREAM_ID_NONE 0x0 Indicates that the SHARED_MSG_HEADER is used for interface manipulation capabilities exchange as specified in section . This value MUST NOT be used for any other messages. MessageId (4 bytes): A 32-bit unsigned integer. A unique ID for the request or response pair. Requests and responses are matched based on this ID coupled with the InterfaceId.
FunctionId (4 A 32-bit unsigned integer. This field MUST be present in all packets except response packets. Its value is either used in interface manipulation messages or defined for a specific interface. The following values are categorized by the interface for which they are defined. Common IDs for all interfaces are as follows. Value Meaning RIMCALL_RELEASE 0x00000001 Release the given interface ID. RIMCALL_QUERYINTERFACE 0x00000002 Query for a new interface. Capabilities Negotiator Interface IDs are as follows. Value Meaning RIM_EXCHANGE_CAPABILITY_REQUEST 0x00000100 The server sends the message. Client Request Completion Interface IDs are as follows. Value Meaning IOCONTROL_COMPLETION 0x00000100 The client sends the message. URB_COMPLETION 0x00000101 The client the message. URB_COMPLETION_NO_DATA 0x00000102 The client sends the message. Server USB Device Interface IDs are as follows. Value Meaning CANCEL_REQUEST 0x00000100 The server sends the message. REGISTER_REQUEST_CALLBACK 0x00000101 The server the message. IO_CONTROL 0x00000102 The server sends the message. INTERNAL_IO_CONTROL 0x00000103 The server the message. QUERY_DEVICE_TEXT 0x00000104 The server sends the message. TRANSFER_IN_REQUEST 0x00000105 The server the message.
21 7 20 61 25 L Local events client ( 49, 59) server ( 49, 53) M Message processing client 54 54 54 54 54 49 55 55 57 55 54 56 58 58 49 55 56 58 58 server 49 49 50 50 50 49 51 50 51 51 51 50 51 53 53 49 51 51 52 52 Messages 18 16 15 15 24 13 13 13 27 38 19 44 42 27 N 10 8 O Other local events 59 53 Overview 10 11 10 9 10 9 P 63 12 12 64 Q 22 22 R 8 8 8 20 11 24 24 24 15 16 S Security 63 63 Sequencing rules client 54 54 54 54 54 49 55
55 57 55 54 56 58 58 49 55 56 58 58 server 49 49 50 50 50 49 51 50 51 51 51 50 51 53 53 49 51 51 52 52 Server 49 48 overview ( 48, 49) higher-layer triggered events ( 48, 49) initialization ( 48, 49) local events ( 49, 53) message processing 49 49 50 50 50 49 51 50 51 51 51 50 51 53 53 49 51 51 52 52 53 47 sequencing 49 49 50 50 50 49 51 50 51 51 51 50 51 53 53 49 51 51 52 52 events ( 49, 53) timers ( 48, 49) 13 13 13 12 T Timer events client ( 49, 59) server ( 49, 53) Timers client ( 48, 53) server ( 48, 49) 65 61 23 23 13 Triggered events client ( 48, 53) server ( 48, 49) Triggered events - higher-layer 53 49 27 27 32 33 34 36 36 34 31 37 35 31 41 27 32 42 36 30 38 38