public byte[] GetBytes() { if (Commands.Count == 0) { throw new ArgumentException("Invalid command sequence"); } for (int index = 0; index < Commands.Count - 1; index++) { if (!(Commands[index] is SMBAndXCommand)) { throw new ArgumentException("Invalid command sequence"); } } SMB1Command lastCommand = Commands[Commands.Count - 1]; if (lastCommand is SMBAndXCommand) { ((SMBAndXCommand)lastCommand).AndXCommand = CommandName.SMB_COM_NO_ANDX_COMMAND; } List <byte[]> sequence = new List <byte[]>(); int length = SMB1Header.Length; byte[] commandBytes; for (int index = 0; index < Commands.Count - 1; index++) { SMBAndXCommand andXCommand = (SMBAndXCommand)Commands[index]; andXCommand.AndXCommand = Commands[index + 1].CommandName; commandBytes = Commands[index].GetBytes(Header.UnicodeFlag); ushort nextOffset = (ushort)(length + commandBytes.Length); SMBAndXCommand.WriteAndXOffset(commandBytes, 0, nextOffset); sequence.Add(commandBytes); length += commandBytes.Length; } commandBytes = lastCommand.GetBytes(Header.UnicodeFlag); sequence.Add(commandBytes); length += commandBytes.Length; Header.Command = Commands[0].CommandName; byte[] buffer = new byte[length]; Header.WriteBytes(buffer, 0); int offset = SMB1Header.Length; foreach (byte[] bytes in sequence) { ByteWriter.WriteBytes(buffer, ref offset, bytes); } return(buffer); }
public byte[] GetBytes() { if (Commands.Count == 0) { throw new ArgumentException("Invalid command sequence"); } for (int index = 0; index < Commands.Count - 1; index++) { if (!(Commands[index] is SMBAndXCommand)) { throw new ArgumentException("Invalid command sequence"); } } SMB1Command lastCommand = Commands[^ 1];
public SMB1Message(byte[] buffer) { Header = new SMB1Header(buffer); SMB1Command command = SMB1Command.ReadCommand(buffer, SMB1Header.Length, Header.Command, Header); Commands.Add(command); while (command is SMBAndXCommand smbAndXCommand) { if (smbAndXCommand.AndXCommand == CommandName.SMB_COM_NO_ANDX_COMMAND) { break; } command = SMB1Command.ReadCommand(buffer, smbAndXCommand.AndXOffset, smbAndXCommand.AndXCommand, Header); Commands.Add(command); } }