Example #1
0
        /// <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>
        /// to decode the smb parameters: from the general SmbParameters to the concrete Smb Parameters.
        /// </summary>
        protected override void DecodeParameters()
        {
            // if smb packet, the word count must be 7.
            // end with more 2-int fields: MaximalShareAccessRights and GuestMaximalShareAccessRights.
            if (this.smbParametersBlock.WordCount == 7)
            {
                this.SmbParameters = CifsMessageUtils.ToStuct <SMB_COM_TREE_CONNECT_ANDX_Response_SMB_Parameters>(
                    CifsMessageUtils.ToBytes <SmbParameters>(this.smbParametersBlock));
            }
            // if cifs packet, the word count must be 3.
            else if (this.smbParametersBlock.WordCount == 3)
            {
                Cifs.SMB_COM_TREE_CONNECT_ANDX_Response_SMB_Parameters param =
                    CifsMessageUtils.ToStuct <Cifs.SMB_COM_TREE_CONNECT_ANDX_Response_SMB_Parameters>(
                        CifsMessageUtils.ToBytes <SmbParameters>(this.smbParametersBlock));

                this.SmbParameters = SmbMessageUtils.ConvertSmbComTreeConnectPacketPayload(param);
            }
            else
            {
                this.smbParameters.WordCount = this.smbParametersBlock.WordCount;
            }
        }
        /// <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;
        }