/// <summary> /// Create SMB_COM_SESSION_SETUP_ANDX Server response packet /// </summary> /// <param name="connection">the connection identified the client</param> /// <param name = "uid"> /// the valid session id, must be response by server of the session setup request. /// </param> /// <param name = "action">A 16-bit field. The two lowest order bits have been defined </param> /// <returns>The SmbSessionSetupAndXResponsePacket </returns> /// <exception cref="ArgumentNullException">connection must not be null</exception> public virtual SmbSessionSetupImplicitNtlmAndxResponsePacket CreateSmbComSessionSetupImplicitNtlmResponse( SmbServerConnection connection, ushort uid, ActionValues action ) { if (connection == null) { throw new ArgumentNullException("connection"); } Cifs.SmbSessionSetupAndxResponsePacket packet = new Cifs.SmbSessionSetupAndxResponsePacket(); // create smb packet header packet.SmbHeader = CifsMessageUtils.CreateSmbHeader( SmbCommand.SMB_COM_SESSION_SETUP_ANDX, connection.ProcessId, connection.MessageId, uid, 0, (SmbFlags)connection.Capability.Flag, (SmbFlags2)connection.Capability.Flags2); // update smb parameters Cifs.SMB_COM_SESSION_SETUP_ANDX_Response_SMB_Parameters smbParameters = packet.SmbParameters; smbParameters.AndXCommand = SmbCommand.SMB_COM_NO_ANDX_COMMAND; smbParameters.Action = action; smbParameters.WordCount = (byte)(CifsMessageUtils.GetSize<Cifs.SMB_COM_SESSION_SETUP_ANDX_Response_SMB_Parameters>( smbParameters) / SmbCapability.NUM_BYTES_OF_WORD); // update smb data Cifs.SMB_COM_SESSION_SETUP_ANDX_Response_SMB_Data smbData = packet.SmbData; if (connection.Capability.IsUnicode) { smbData.Pad = new byte[1]; } else { smbData.Pad = new byte[0]; } smbData.NativeOS = CifsMessageUtils.ToSmbStringBytes( Environment.OSVersion.VersionString, connection.Capability.IsUnicode); smbData.NativeLanMan = CifsMessageUtils.ToSmbStringBytes( Environment.OSVersion.VersionString, connection.Capability.IsUnicode); smbData.PrimaryDomain = CifsMessageUtils.ToSmbStringBytes( Environment.UserDomainName, connection.Capability.IsUnicode); // update smbData.ByteCount smbData.ByteCount = 0; smbData.ByteCount += (ushort)smbData.Pad.Length; smbData.ByteCount += (ushort)smbData.NativeOS.Length; smbData.ByteCount += (ushort)smbData.NativeLanMan.Length; smbData.ByteCount += (ushort)smbData.PrimaryDomain.Length; // store the parameters and data to packet. packet.SmbParameters = smbParameters; packet.SmbData = smbData; return new SmbSessionSetupImplicitNtlmAndxResponsePacket(packet); }
/// <summary> /// initialize packet from base packet. /// </summary> /// <param name = "packet">the base packet to initialize this packet. </param> public SmbSessionSetupImplicitNtlmAndxResponsePacket(Cifs.SmbSessionSetupAndxResponsePacket packet) : base(packet) { }