/// <summary>
        /// convert the payload of transaction2 packet from sub class format to base class format, that is 
        /// Smb format to Cifs format. 
        /// </summary>
        /// <param name = "subClassFormatPayload">the sub class format, Smb format </param>
        /// <returns>the base class format, Cifs format </returns>
        internal static Cifs.SMB_COM_TRANSACTION2_Request_SMB_Parameters ConvertTransaction2PacketPayload(
            Smb.SMB_COM_TRANSACTION2_Request_SMB_Parameters subClassFormatPayload)
        {
            Cifs.SMB_COM_TRANSACTION2_Request_SMB_Parameters
                baseClassFormatPayload = new Cifs.SMB_COM_TRANSACTION2_Request_SMB_Parameters();

            baseClassFormatPayload.WordCount = subClassFormatPayload.WordCount;
            baseClassFormatPayload.TotalParameterCount = subClassFormatPayload.TotalParameterCount;
            baseClassFormatPayload.TotalDataCount = subClassFormatPayload.TotalDataCount;
            baseClassFormatPayload.MaxParameterCount = subClassFormatPayload.MaxParameterCount;
            baseClassFormatPayload.MaxDataCount = subClassFormatPayload.MaxDataCount;
            baseClassFormatPayload.MaxSetupCount = subClassFormatPayload.MaxSetupCount;
            baseClassFormatPayload.Reserved1 = subClassFormatPayload.Reserved1;
            baseClassFormatPayload.Flags = subClassFormatPayload.Flags;
            baseClassFormatPayload.Timeout = subClassFormatPayload.Timeout;
            baseClassFormatPayload.Reserved2 = subClassFormatPayload.Reserved2;
            baseClassFormatPayload.ParameterCount = subClassFormatPayload.ParameterCount;
            baseClassFormatPayload.ParameterOffset = subClassFormatPayload.ParameterOffset;
            baseClassFormatPayload.DataCount = subClassFormatPayload.DataCount;
            baseClassFormatPayload.DataOffset = subClassFormatPayload.DataOffset;
            baseClassFormatPayload.SetupCount = subClassFormatPayload.SetupCount;
            baseClassFormatPayload.Reserved3 = subClassFormatPayload.Reserved3;
            baseClassFormatPayload.Setup = new ushort[1];
            baseClassFormatPayload.Setup[0] = subClassFormatPayload.Subcommand;

            return baseClassFormatPayload;
        }
        /// <summary>
        /// convert the payload of write response packet from sub class format to base class format, that is Smb
        /// to Cifs format.
        /// </summary>
        /// <param name="subClassFormatPayload">the sub class format, Smb format.</param>
        /// <returns>the base class format, Cifs format</returns>
        internal static Cifs.SMB_COM_WRITE_ANDX_Response_SMB_Parameters ConvertSmbComWriteResponsePacketPayload(
            Smb.SMB_COM_WRITE_ANDX_Response_SMB_Parameters subClassFormatPayload)
        {
            Cifs.SMB_COM_WRITE_ANDX_Response_SMB_Parameters
                baseClassFormatPayload = new Cifs.SMB_COM_WRITE_ANDX_Response_SMB_Parameters();

            baseClassFormatPayload.WordCount = subClassFormatPayload.WordCount;
            baseClassFormatPayload.AndXCommand = subClassFormatPayload.AndXCommand;
            baseClassFormatPayload.AndXReserved = subClassFormatPayload.AndXReserved;
            baseClassFormatPayload.AndXOffset = subClassFormatPayload.AndXOffset;
            baseClassFormatPayload.Count = subClassFormatPayload.Count;
            baseClassFormatPayload.Available = subClassFormatPayload.Available;
            // save CountHigh to high 2 bytes in Reserved.
            baseClassFormatPayload.Reserved = (uint)(subClassFormatPayload.Reserved << 16);
            baseClassFormatPayload.Reserved |= subClassFormatPayload.CountHigh;

            return baseClassFormatPayload;
        }
        /// <summary>
        /// convert the payload of write request packet from sub class format to base class format, that is Smb
        /// to Cifs format.
        /// </summary>
        /// <param name="subClassFormatPayload">the sub class format, Smb format.</param>
        /// <returns>the base class format, Cifs format</returns>
        internal static Cifs.SMB_COM_WRITE_ANDX_Request_SMB_Parameters ConvertSmbComWriteRequestPacketPayload(
            Smb.SMB_COM_WRITE_ANDX_Request_SMB_Parameters subClassFormatPayload)
        {
            Cifs.SMB_COM_WRITE_ANDX_Request_SMB_Parameters
                baseClassFormatPayload = new Cifs.SMB_COM_WRITE_ANDX_Request_SMB_Parameters();

            baseClassFormatPayload.WordCount = subClassFormatPayload.WordCount;
            baseClassFormatPayload.AndXCommand = subClassFormatPayload.AndXCommand;
            baseClassFormatPayload.AndXReserved = subClassFormatPayload.AndXReserved;
            baseClassFormatPayload.AndXOffset = subClassFormatPayload.AndXOffset;
            baseClassFormatPayload.FID = subClassFormatPayload.FID;
            baseClassFormatPayload.Offset = subClassFormatPayload.Offset;
            baseClassFormatPayload.Timeout = subClassFormatPayload.Timeout;
            baseClassFormatPayload.WriteMode = subClassFormatPayload.WriteMode;
            baseClassFormatPayload.Remaining = subClassFormatPayload.Remaining;
            baseClassFormatPayload.Reserved = subClassFormatPayload.DataLengthHigh;
            baseClassFormatPayload.DataLength = subClassFormatPayload.DataLength;
            baseClassFormatPayload.DataOffset = subClassFormatPayload.DataOffset;
            baseClassFormatPayload.OffsetHigh = subClassFormatPayload.OffsetHigh;

            return baseClassFormatPayload;
        }
        /// <summary>
        /// convert the payload of tree connect packet from sub class format to base class format, that is Smb
        /// to Cifs format.
        /// </summary>
        /// <param name="subClassFormatPayload">the sub class format, Smb format.</param>
        /// <returns>the base class format, Cifs format</returns>
        internal static Cifs.SMB_COM_TREE_CONNECT_ANDX_Response_SMB_Parameters ConvertSmbComTreeConnectPacketPayload(
            Smb.SMB_COM_TREE_CONNECT_ANDX_Response_SMB_Parameters subClassFormatPayload)
        {
            Cifs.SMB_COM_TREE_CONNECT_ANDX_Response_SMB_Parameters
                baseClassFormatPayload = new Cifs.SMB_COM_TREE_CONNECT_ANDX_Response_SMB_Parameters();

            baseClassFormatPayload.WordCount = subClassFormatPayload.WordCount;
            baseClassFormatPayload.AndXCommand = subClassFormatPayload.AndXCommand;
            baseClassFormatPayload.AndXReserved = subClassFormatPayload.AndXReserved;
            baseClassFormatPayload.AndXOffset = subClassFormatPayload.AndXOffset;
            baseClassFormatPayload.OptionalSupport = subClassFormatPayload.OptionalSupport;

            return baseClassFormatPayload;
        }
        /// <summary>
        /// convert the payload of read response packet from sub class format to base class format, that is
        /// Smb to Cifs format.
        /// </summary>
        /// <param name="subClassFormatPayload">the sub class format, Smb format.</param>
        /// <returns>the base class format, Cifs format</returns>
        internal static Cifs.SMB_COM_READ_ANDX_Response_SMB_Parameters ConvertSmbComReadResponsePacketPayload(
            Smb.SMB_COM_READ_ANDX_Response_SMB_Parameters subClassFormatPayload)
        {
            Cifs.SMB_COM_READ_ANDX_Response_SMB_Parameters
                baseClassFormatPayload = new Cifs.SMB_COM_READ_ANDX_Response_SMB_Parameters();

            baseClassFormatPayload.WordCount = subClassFormatPayload.WordCount;
            baseClassFormatPayload.AndXCommand = subClassFormatPayload.AndXCommand;
            baseClassFormatPayload.AndXReserved = subClassFormatPayload.AndXReserved;
            baseClassFormatPayload.AndXOffset = subClassFormatPayload.AndXOffset;
            baseClassFormatPayload.Available = subClassFormatPayload.Available;
            baseClassFormatPayload.DataCompactionMode = subClassFormatPayload.DataCompactionMode;
            baseClassFormatPayload.Reserved1 = subClassFormatPayload.Reserved1;
            baseClassFormatPayload.DataLength = subClassFormatPayload.DataLength;
            baseClassFormatPayload.DataOffset = subClassFormatPayload.DataOffset;
            // reserved2 must be 5 words.
            baseClassFormatPayload.Reserved2 = new ushort[5];
            // store DataLengthHigh to the first ushort of base.
            baseClassFormatPayload.Reserved2[0] = subClassFormatPayload.DataLengthHigh;
            baseClassFormatPayload.Reserved2[1] = subClassFormatPayload.Reserved2[0];
            baseClassFormatPayload.Reserved2[2] = subClassFormatPayload.Reserved2[1];
            baseClassFormatPayload.Reserved2[3] = subClassFormatPayload.Reserved2[2];
            baseClassFormatPayload.Reserved2[4] = subClassFormatPayload.Reserved2[3];

            return baseClassFormatPayload;
        }
        /// <summary>
        /// convert the payload of tree connect packet from sub class format to base class format, that is Smb
        /// to Cifs format.
        /// </summary>
        /// <param name="subClassFormatPayload">the sub class format, Smb format.</param>
        /// <returns>the base class format, Cifs format</returns>
        internal static Cifs.SMB_COM_NT_CREATE_ANDX_Response_SMB_Parameters ConvertSmbComCreatePacketPayload(
            Smb.SMB_COM_NT_CREATE_ANDX_Response_SMB_Parameters subClassFormatPayload)
        {
            Cifs.SMB_COM_NT_CREATE_ANDX_Response_SMB_Parameters
                baseClassFormatPayload = new Cifs.SMB_COM_NT_CREATE_ANDX_Response_SMB_Parameters();

            baseClassFormatPayload.WordCount = subClassFormatPayload.WordCount;
            baseClassFormatPayload.AndXCommand = subClassFormatPayload.AndXCommand;
            baseClassFormatPayload.AndXReserved = subClassFormatPayload.AndXReserved;
            baseClassFormatPayload.AndXOffset = subClassFormatPayload.AndXOffset;
            baseClassFormatPayload.OplockLevel = subClassFormatPayload.OplockLevel;
            baseClassFormatPayload.FID = subClassFormatPayload.FID;
            baseClassFormatPayload.CreateDisposition = (NtTransactCreateDisposition)subClassFormatPayload.CreationAction;
            baseClassFormatPayload.CreateTime = subClassFormatPayload.CreateTime;
            baseClassFormatPayload.LastAccessTime = subClassFormatPayload.LastAccessTime;
            baseClassFormatPayload.LastWriteTime = subClassFormatPayload.LastWriteTime;
            baseClassFormatPayload.LastChangeTime = subClassFormatPayload.LastChangeTime;
            baseClassFormatPayload.ExtFileAttributes = (SMB_EXT_FILE_ATTR)subClassFormatPayload.ExtFileAttributes;
            baseClassFormatPayload.AllocationSize = subClassFormatPayload.AllocationSize;
            baseClassFormatPayload.EndOfFile = subClassFormatPayload.EndOfFile;
            baseClassFormatPayload.ResourceType = subClassFormatPayload.ResourceType;
            baseClassFormatPayload.NMPipeStatus = subClassFormatPayload.NMPipeStatus_or_FileStatusFlags;
            baseClassFormatPayload.Directory = subClassFormatPayload.Directory;

            return baseClassFormatPayload;
        }