/// <summary>
        /// Deep copy constructor.
        /// </summary>
        public SmbTransQueryNmpipeInfoSuccessResponsePacket(SmbTransQueryNmpipeInfoSuccessResponsePacket packet)
            : base(packet)
        {
            this.InitDefaultValue();

            this.transData.OutputBufferSize = packet.transData.OutputBufferSize;
            this.transData.InputBufferSize  = packet.transData.InputBufferSize;
            this.transData.MaximumInstances = packet.transData.MaximumInstances;
            this.transData.CurrentInstances = packet.transData.CurrentInstances;
            this.transData.PipeNameLength   = packet.transData.PipeNameLength;
            if (packet.transData.PipeName != null)
            {
                this.transData.PipeName = new byte[packet.transData.PipeName.Length];
                Array.Copy(packet.transData.PipeName, this.transData.PipeName, packet.transData.PipeName.Length);
            }
            if (packet.transData.Pad != null)
            {
                this.transData.Pad = new byte[packet.transData.Pad.Length];
                Array.Copy(packet.transData.Pad, this.transData.Pad, packet.transData.Pad.Length);
            }
        }
        /// <summary>
        /// Deep copy constructor.
        /// </summary>
        public SmbTransQueryNmpipeInfoSuccessResponsePacket(SmbTransQueryNmpipeInfoSuccessResponsePacket packet)
            : base(packet)
        {
            this.InitDefaultValue();

            this.transData.OutputBufferSize = packet.transData.OutputBufferSize;
            this.transData.InputBufferSize = packet.transData.InputBufferSize;
            this.transData.MaximumInstances = packet.transData.MaximumInstances;
            this.transData.CurrentInstances = packet.transData.CurrentInstances;
            this.transData.PipeNameLength = packet.transData.PipeNameLength;
            if (packet.transData.PipeName != null)
            {
                this.transData.PipeName = new byte[packet.transData.PipeName.Length];
                Array.Copy(packet.transData.PipeName, this.transData.PipeName, packet.transData.PipeName.Length);
            }
            if (packet.transData.Pad != null)
            {
                this.transData.Pad = new byte[packet.transData.Pad.Length];
                Array.Copy(packet.transData.Pad, this.transData.Pad, packet.transData.Pad.Length);
            }
        }
        public SmbTransQueryNmpipeInfoSuccessResponsePacket CreateTransQueryNmpipeInfoSuccessResponse(
            CifsServerPerConnection connection,
            SmbTransQueryNmpipeInfoRequestPacket request,
            ushort outputBufferSize,
            ushort inputBufferSize,
            byte maximumInstances,
            byte currentInstances,
            string pipeName
            )
        {
            SmbTransQueryNmpipeInfoSuccessResponsePacket response = new SmbTransQueryNmpipeInfoSuccessResponsePacket();
            response.SmbHeader = CifsMessageUtils.CreateSmbHeader(connection, request);

            bool isUnicode = (response.SmbHeader.Flags2 & SmbFlags2.SMB_FLAGS2_UNICODE) == SmbFlags2.SMB_FLAGS2_UNICODE;
            TRANS_QUERY_NMPIPE_INFO_Response_Trans_Data transData = response.TransData;
            transData.OutputBufferSize = outputBufferSize;
            transData.InputBufferSize = inputBufferSize;
            transData.MaximumInstances = maximumInstances;
            transData.CurrentInstances = currentInstances;
            transData.PipeName = CifsMessageUtils.ToSmbStringBytes(pipeName, isUnicode);
            transData.PipeNameLength = (byte)transData.PipeName.Length;
            transData.Pad = new byte[isUnicode? 1 : 0];
            response.TransData = transData;

            response.UpdateCountAndOffset();

            return response;
        }