/// <summary> /// Read data from server, start at the positon indicated by offset /// </summary> /// <param name="timeout">The pending time to get server's response</param> /// <param name="offset">From where it will read</param> /// <param name="length">The length of the data client wants to read</param> /// <param name="data">The read data</param> /// <returns> /// a uint value that specifies the status of response packet. /// </returns> /// <exception cref="System.InvalidOperationException">Thrown if there is any error occurred</exception> public override uint Read(TimeSpan timeout, ulong offset, uint length, out byte[] data) { this.internalTimeout = timeout; SmbReadAndxRequestPacket request = smbClient.CreateReadRequest(this.fid, (ushort)length, (uint)offset); if (this.isSignRequired) { request.Sign(this.NextSequenceNumber, this.sessionKey); } uint status = 0; SmbReadAndxResponsePacket response = this.SendAndExpectSmbPacket(request, internalTimeout, out status) as SmbReadAndxResponsePacket; data = ArrayUtility.SubArray <byte>(response.SmbData.Data, 0); return(SmbMessageUtils.CheckStatus(status)); }
/// <summary> /// Deep copy constructor. /// </summary> public SmbReadAndxResponsePacket(SmbReadAndxResponsePacket packet) : base(packet) { }
protected override SmbPacket CreateSmbResponsePacket( SmbPacket request, SmbHeader smbHeader, Channel channel) { SmbPacket smbPacket = null; // error packet SmbStatus packetStatus = (SmbStatus)smbHeader.Status; // error packet if (packetStatus != SmbStatus.STATUS_SUCCESS && packetStatus != SmbStatus.STATUS_MORE_PROCESSING_REQUIRED && packetStatus != SmbStatus.STATUS_BUFFER_OVERFLOW) { smbPacket = new SmbErrorResponsePacket(); smbPacket.SmbHeader = smbHeader; return(smbPacket); } // success packet switch (smbHeader.Command) { case SmbCommand.SMB_COM_NEGOTIATE: if (smbClient.Capability.IsSupportsExtendedSecurity) { smbPacket = new SmbNegotiateResponsePacket(); } else { smbPacket = new SmbNegotiateImplicitNtlmResponsePacket(); } break; case SmbCommand.SMB_COM_SESSION_SETUP_ANDX: if (smbClient.Capability.IsSupportsExtendedSecurity) { smbPacket = new SmbSessionSetupAndxResponsePacket(); } else { smbPacket = new SmbSessionSetupImplicitNtlmAndxResponsePacket(); } break; case SmbCommand.SMB_COM_TREE_CONNECT_ANDX: smbPacket = new SmbTreeConnectAndxResponsePacket(); break; case SmbCommand.SMB_COM_TREE_DISCONNECT: smbPacket = new SmbTreeDisconnectResponsePacket(); break; case SmbCommand.SMB_COM_LOGOFF_ANDX: smbPacket = new SmbLogoffAndxResponsePacket(); break; case SmbCommand.SMB_COM_NT_CREATE_ANDX: smbPacket = new SmbNtCreateAndxResponsePacket(); break; case SmbCommand.SMB_COM_CLOSE: smbPacket = new SmbCloseResponsePacket(); break; case SmbCommand.SMB_COM_OPEN_ANDX: smbPacket = new SmbOpenAndxResponsePacket(); break; case SmbCommand.SMB_COM_WRITE_ANDX: smbPacket = new SmbWriteAndxResponsePacket(); break; case SmbCommand.SMB_COM_READ_ANDX: smbPacket = new SmbReadAndxResponsePacket(); break; case SmbCommand.SMB_COM_TRANSACTION: smbPacket = this.CreateTransactionResponsePacket(request, smbHeader, channel); break; case SmbCommand.SMB_COM_TRANSACTION2: smbPacket = this.CreateTransaction2ResponsePacket(request, smbHeader, channel); break; case SmbCommand.SMB_COM_NT_TRANSACT: smbPacket = this.CreateNtTransactionResponsePacket(request, smbHeader, channel); break; default: break; } if (smbPacket != null) { smbPacket.SmbHeader = smbHeader; return(smbPacket); } return(base.CreateSmbResponsePacket(request, smbHeader, channel)); }
/// <summary> /// Verify whether the two response are equal or not /// </summary> /// <param name="readAndxResponsePacket1"> The SmbReadAndxResponsePacket For First</param> /// <param name="readAndxResponsePacket2"> The SmbReadAndxResponsePacket Response For Second</param> private bool VerifyReadAndxResponse(SmbReadAndxResponsePacket readAndxResponsePacket1, SmbReadAndxResponsePacket readAndxResponsePacket2) { return (readAndxResponsePacket1.AndxPacket.IsSignRequired == readAndxResponsePacket2.AndxPacket.IsSignRequired) && (readAndxResponsePacket1.AndxPacket.PacketBytes == readAndxResponsePacket2.AndxPacket.PacketBytes) && (readAndxResponsePacket1.AndxPacket.PacketType == readAndxResponsePacket2.AndxPacket.PacketType) && (readAndxResponsePacket1.IsSignRequired == readAndxResponsePacket2.IsSignRequired) && (readAndxResponsePacket1.PacketBytes.IsFixedSize == readAndxResponsePacket2.PacketBytes.IsFixedSize) && (readAndxResponsePacket1.PacketBytes.IsReadOnly == readAndxResponsePacket2.PacketBytes.IsReadOnly) && (readAndxResponsePacket1.PacketBytes.IsSynchronized == readAndxResponsePacket2.PacketBytes.IsSynchronized) && (readAndxResponsePacket1.PacketBytes.Length == readAndxResponsePacket2.PacketBytes.Length) && (readAndxResponsePacket1.PacketBytes.LongLength == readAndxResponsePacket2.PacketBytes.LongLength) && (readAndxResponsePacket1.PacketBytes.Rank == readAndxResponsePacket2.PacketBytes.Rank) && (readAndxResponsePacket1.PacketBytes.SyncRoot == readAndxResponsePacket2.PacketBytes.SyncRoot) && (readAndxResponsePacket1.PacketType == readAndxResponsePacket2.PacketType) && (readAndxResponsePacket1.SmbData.ByteCount == readAndxResponsePacket2.SmbData.ByteCount) && (readAndxResponsePacket1.SmbData.Data == readAndxResponsePacket2.SmbData.Data) && (readAndxResponsePacket1.SmbData.Pad == readAndxResponsePacket2.SmbData.Pad) && (readAndxResponsePacket1.SmbParameters.AndXCommand == readAndxResponsePacket2.SmbParameters.AndXCommand) && (readAndxResponsePacket1.SmbParameters.AndXOffset == readAndxResponsePacket2.SmbParameters.AndXOffset) && (readAndxResponsePacket1.SmbParameters.DataOffset == readAndxResponsePacket2.SmbParameters.DataOffset) && (readAndxResponsePacket1.SmbParameters.AndXReserved == readAndxResponsePacket2.SmbParameters.AndXReserved) && (readAndxResponsePacket1.SmbParameters.Available == readAndxResponsePacket2.SmbParameters.Available) && (readAndxResponsePacket1.SmbParameters.DataCompactionMode == readAndxResponsePacket2.SmbParameters.DataCompactionMode) && (readAndxResponsePacket1.SmbParameters.DataLength == readAndxResponsePacket2.SmbParameters.DataLength) && (readAndxResponsePacket1.SmbParameters.DataOffset == readAndxResponsePacket2.SmbParameters.DataOffset) && (readAndxResponsePacket1.SmbParameters.Reserved1 == readAndxResponsePacket2.SmbParameters.Reserved1) && (readAndxResponsePacket1.SmbParameters.Reserved2 == readAndxResponsePacket2.SmbParameters.Reserved2); }