示例#1
0
        internal void clientFormatDataResponse()
        {
            RdpPacket packet = new RdpPacket();

            packet.WriteLittleEndian16((short)MsgType.CB_FORMAT_DATA_RESPONSE);
            packet.WriteLittleEndian16((short)MsgFlags.CB_RESPONSE_OK);
            packet.WriteLittleEndian32(520 + 76 + FourButesAlignLen); // length

            // cItems
            packet.WriteLittleEndian32(1); // 1 файл в списке файлов буфера обмена

            // File Descriptor
            packet.WriteLittleEndian32((int)(FD_FLAGS.FD_ATTRIBUTES));
            packet.WritePadding(32);                        // Padding 32
            packet.WriteLittleEndian32((int)(FILE_ATTRIBUTE.FILE_ATTRIBUTE_NORMAL));
            packet.WritePadding(16);                        // Padding 16
            packet.WriteLittleEndian64(DateTime.Now.Ticks); // lastWriteTime
            packet.WriteLittleEndianU32((uint)FileSizeHigh);
            packet.WriteLittleEndianU32((uint)FileSizeLow);

            // Формируем строку, содержащую нулевой байт после каждого символа
            string tempStr = "";

            foreach (var ch in FileName)
            {
                tempStr += ch + "\0";
            }

            // Получаем байты строки
            var bytes = ASCIIEncoding.GetBytes(tempStr, false).ToList();

            if (bytes.Count > 520)
            {
                packet.Write(bytes.ToArray(), 0, 520);
            }
            else
            {
                int endPos = 520 - bytes.Count;

                for (int i = 0; i < endPos; i++)
                {
                    bytes.Add(0x00);
                }

                packet.Write(bytes.ToArray(), 0, bytes.Count);
            }

            packet.WritePadding(FourButesAlign); // Add four bytes

            send(packet);
        }