>
>
> The UTF-16 equivalent for this in the byte order used by RDP would be:
>
>     43 6C 6F 75 53 74 6F 72 61 67 65 00
>
> Which is the equivalent of the string:
>
>     "ClouStorage"
>
> So you have apparently changed the UTF-16 string
> ("G\0u\0a\0c\0a\0m\0o\0l\0e\0\0\0") to something which is not encoded in
> UTF-16 ("ClouStorage"). Because RDP requires this to be UTF-16, it
> interprets it as such.
>
> - Mike
>
>
Mike,
I'm playing with configuring the drive name and looking at the FreeRDP
source code, and I'm not sure that the actual name is supposed to be UTF-16
encoded.

If I use xfreerdp to connect to a system I can specify the following flag:
/drive:tmp:/tmp

When I connect to the system, I see a drive in the Computer called "tmp on
linux-host" - which means it isn't passing through a drive letter, it's
passing through a filesystem name.  What I suspect is happening is that
this filesystem name is *not* supposed to be UTF-16 encoded and when you
pass the UTF-16 encoded string that begins with either "G\0" (for
"Guacamole", as is the default) or "C\0" (for "Cloud Storage", as Amarjeet
is using), it takes the first character, stops at the null terminator, and
then just uses that first character and calls it either "G on Guacamole
RDP" or "C on Guacamole RDP" - which, because it's a single capital letter,
makes it look like a drive letter, when it's actually technically a share
name (\\tsclient\C or \\tsclient\G or \\tsclient\tmp).

Looking at the FreeRDP source code, I see the following...

- In channels/drive/client/drive_main.c, starting around line 705
(stable-1.1 branch)[1], you see the processing for the name of the drive.
It looks like this just gets adding to a UINT8 stream with no encoding.
- In channels/drive/client/drive_main.c, starting around line 407
(stable-1.1 branch)[2], you see the handling for the label of the
filesystem.  There is definitely a conversion to UTF done, here, using the
ConvertToUnicode() function.

Am I seeing this correctly, or am I missing something, here?  I'm going to
do some testing and see if I can get a configurable drive name passed
through correctly.

Probably the most annoying thing is that this means that printer name and
drive name have to be dealt with separately (as the FreeRDP code does),
because the printer name definitely does have to be UTF-16 encoded.

-Nick

[1] -
https://github.com/FreeRDP/FreeRDP/blob/851f0979d5b0b45a7595cab7ab1dd2d41d4a73d1/channels/drive/client/drive_main.c#L407
[2] -
https://github.com/FreeRDP/FreeRDP/blob/851f0979d5b0b45a7595cab7ab1dd2d41d4a73d1/channels/drive/client/drive_main.c#L706

Reply via email to