/// <summary>
 /// to decode the smb parameters: from the general SmbParameters to the concrete Smb Parameters.
 /// </summary>
 protected override void DecodeParameters()
 {
     if (this.smbParametersBlock.WordCount > 0)
     {
         this.smbParameters = TypeMarshal.ToStruct <SMB_COM_WRITE_ANDX_Response_SMB_Parameters>(
             TypeMarshal.ToBytes(this.smbParametersBlock));
     }
 }
        /// <summary>
        /// server response the write request from client.
        /// </summary>
        /// <param name="open">the file open between server and client</param>
        /// <param name="writtenCount">number of bytes in Write request</param>
        public override void SendWriteResponse(IFileServiceServerOpen open, int writtenCount)
        {
            CifsServerPerConnection connection = open.TreeConnect.Session.Connection as CifsServerPerConnection;

            foreach (SmbWriteAndxRequestPacket request in connection.PendingRequestTable)
            {
                if (request != null &&
                    request.SmbHeader.Uid == open.TreeConnect.Session.SessionId &&
                    request.SmbHeader.Tid == open.TreeConnect.TreeConnectId &&
                    request.SmbParameters.FID == open.FileId)
                {
                    SmbWriteAndxResponsePacket response = this.cifsServer.CreateWriteAndxResponse(
                        connection, request, 0, null);
                    SMB_COM_WRITE_ANDX_Response_SMB_Parameters smbParameters = response.SmbParameters;
                    smbParameters.Count    = (ushort)writtenCount;
                    response.SmbParameters = smbParameters;
                    this.cifsServer.SendPacket(response, connection);
                    return;
                }
            }
        }