/// <summary> /// Deep copy constructor. /// </summary> public SmbReadMpxResponsePacket(SmbReadMpxResponsePacket packet) : base(packet) { this.InitDefaultValue(); this.smbParameters.WordCount = packet.SmbParameters.WordCount; this.smbParameters.Offset = packet.SmbParameters.Offset; this.smbParameters.Count = packet.SmbParameters.Count; this.smbParameters.Remaining = packet.SmbParameters.Remaining; this.smbParameters.DataCompactionMode = packet.SmbParameters.DataCompactionMode; this.smbParameters.Reserved = packet.SmbParameters.Reserved; this.smbParameters.DataLength = packet.SmbParameters.DataLength; this.smbParameters.DataOffset = packet.SmbParameters.DataOffset; this.smbData.ByteCount = packet.SmbData.ByteCount; if (packet.smbData.Pad != null) { this.smbData.Pad = new byte[packet.smbData.Pad.Length]; Array.Copy(packet.smbData.Pad, this.smbData.Pad, packet.smbData.Pad.Length); } else { this.smbData.Pad = new byte[0]; } if (packet.smbData.Data != null) { this.smbData.Data = new byte[packet.smbData.Data.Length]; Array.Copy(packet.smbData.Data, this.smbData.Data, packet.smbData.Data.Length); } else { this.smbData.Data = new byte[0]; } }
public SmbReadMpxResponsePacket CreateReadMpxResponse( CifsServerPerConnection connection, SmbReadMpxRequestPacket request, ushort offset, ushort count, ushort remaining, byte[] data) { data = data ?? new byte[0]; SmbReadMpxResponsePacket response = new SmbReadMpxResponsePacket(); response.SmbHeader = CifsMessageUtils.CreateSmbHeader(connection, request); int padOffset = Marshal.SizeOf(response.SmbParameters) + sizeof(ushort); SMB_COM_READ_MPX_Response_SMB_Parameters smbParameters = response.SmbParameters; smbParameters.Offset = offset; smbParameters.Count = count; smbParameters.Remaining = remaining; smbParameters.DataCompactionMode = 0x0000; smbParameters.Reserved = 0x0000; smbParameters.DataLength = (ushort)data.Length; smbParameters.DataOffset = (ushort)((padOffset + 3) & ~3); smbParameters.WordCount = (byte)(TypeMarshal.GetBlockMemorySize(smbParameters) / 2); response.SmbParameters = smbParameters; SMB_COM_READ_MPX_Response_SMB_Data smbData = response.SmbData; smbData.Pad = new byte[response.SmbParameters.DataOffset - padOffset]; smbData.Data = data; smbData.ByteCount = (ushort)(response.SmbParameters.DataOffset + data.Length); response.SmbData = smbData; return response; }