/// <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; }