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); }