public SmbReadAndxResponsePacket CreateReadAndxResponse( CifsServerPerConnection connection, SmbReadAndxRequestPacket request, ushort available, byte[] data, SmbPacket andxPacket) { data = data ?? new byte[0]; SmbReadAndxResponsePacket response = new SmbReadAndxResponsePacket(); response.SmbHeader = CifsMessageUtils.CreateSmbHeader(connection, request); int padOffset = response.HeaderSize + Marshal.SizeOf(response.SmbParameters) + Marshal.SizeOf(response.SmbData.ByteCount); SMB_COM_READ_ANDX_Response_SMB_Parameters smbParameters = response.SmbParameters; smbParameters.AndXCommand = andxPacket != null ? andxPacket.SmbHeader.Command : SmbCommand.SMB_COM_NO_ANDX_COMMAND; smbParameters.AndXReserved = 0x00; smbParameters.Available = available; smbParameters.DataCompactionMode = 0x0000; smbParameters.Reserved1 = 0x0000; smbParameters.DataLength = (ushort)data.Length; smbParameters.DataOffset = (ushort)((padOffset + 3) & ~3); smbParameters.Reserved2 = new ushort[5]; smbParameters.AndXOffset = (ushort)(((padOffset + 3) & ~3) + data.Length); smbParameters.WordCount = (byte)(TypeMarshal.GetBlockMemorySize(smbParameters) / 2); response.SmbParameters = smbParameters; SMB_COM_READ_ANDX_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; response.AndxPacket = andxPacket; response.UpdateHeader(); return response; }