protected override void DecodeTrans2Data() { if (this.smbData.Trans2_Data != null && this.smbData.Trans2_Data.Length > 0) { switch (this.informationLevel) { case QueryInformationLevel.SMB_INFO_STANDARD: this.trans2Data.Data = CifsMessageUtils.ToStuct < SMB_INFO_STANDARD_OF_TRANS2_QUERY_PATH_INFORMATION>(this.smbData.Trans2_Data); break; case QueryInformationLevel.SMB_INFO_QUERY_EA_SIZE: this.trans2Data.Data = CifsMessageUtils.ToStuct < SMB_INFO_QUERY_EA_SIZE_OF_TRANS2_QUERY_PATH_INFORMATION>(this.smbData.Trans2_Data); break; case QueryInformationLevel.SMB_INFO_QUERY_EAS_FROM_LIST: if (this.smbData.Trans2_Data != null && this.smbData.Trans2_Data.Length > 0) { using (MemoryStream memoryStream = new MemoryStream(this.smbData.Trans2_Data)) { using (Channel channel = new Channel(null, memoryStream)) { SMB_INFO_QUERY_EAS_FROM_LIST_OF_TRANS2_QUERY_PATH_INFORMATION data = new SMB_INFO_QUERY_EAS_FROM_LIST_OF_TRANS2_QUERY_PATH_INFORMATION(); data.SizeOfListInBytes = channel.Read <uint>(); uint sizeOfListInBytes = data.SizeOfListInBytes - sizeOfListInBytesLength; List <SMB_FEA> attributeList = new List <SMB_FEA>(); while (sizeOfListInBytes > 0) { SMB_FEA smbEa = channel.Read <SMB_FEA>(); attributeList.Add(smbEa); sizeOfListInBytes -= (uint)(EA.SMB_EA_FIXED_SIZE + smbEa.AttributeName.Length + smbEa.ValueName.Length); } data.ExtendedAttributeList = attributeList.ToArray(); this.trans2Data.Data = data; } } } break; case QueryInformationLevel.SMB_INFO_QUERY_ALL_EAS: if (this.smbData.Trans2_Data != null && this.smbData.Trans2_Data.Length > 0) { using (MemoryStream memoryStream = new MemoryStream(this.smbData.Trans2_Data)) { using (Channel channel = new Channel(null, memoryStream)) { SMB_INFO_QUERY_ALL_EAS_OF_TRANS2_QUERY_PATH_INFORMATION easData = new SMB_INFO_QUERY_ALL_EAS_OF_TRANS2_QUERY_PATH_INFORMATION(); easData.SizeOfListInBytes = channel.Read <uint>(); uint sizeOfList = easData.SizeOfListInBytes - sizeOfListInBytesLength; List <SMB_FEA> eaList = new List <SMB_FEA>(); while (sizeOfList > 0) { SMB_FEA smbEa = channel.Read <SMB_FEA>(); eaList.Add(smbEa); sizeOfList -= (uint)(EA.SMB_EA_FIXED_SIZE + smbEa.AttributeName.Length + smbEa.ValueName.Length); } easData.ExtendedAttributeList = eaList.ToArray(); this.trans2Data.Data = easData; } } } break; case QueryInformationLevel.SMB_QUERY_FILE_BASIC_INFO: this.trans2Data.Data = CifsMessageUtils.ToStuct < SMB_QUERY_FILE_BASIC_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>(this.smbData.Trans2_Data); break; case QueryInformationLevel.SMB_QUERY_FILE_STANDARD_INFO: this.trans2Data.Data = CifsMessageUtils.ToStuct < SMB_QUERY_FILE_STANDARD_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>(this.smbData.Trans2_Data); break; case QueryInformationLevel.SMB_QUERY_FILE_EA_INFO: this.trans2Data.Data = CifsMessageUtils.ToStuct < SMB_QUERY_FILE_EA_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>(this.smbData.Trans2_Data); break; case QueryInformationLevel.SMB_QUERY_FILE_NAME_INFO: this.trans2Data.Data = CifsMessageUtils.ToStuct < SMB_QUERY_FILE_NAME_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>(this.smbData.Trans2_Data); break; case QueryInformationLevel.SMB_QUERY_FILE_ALL_INFO: this.trans2Data.Data = CifsMessageUtils.ToStuct < SMB_QUERY_FILE_ALL_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>(this.smbData.Trans2_Data); break; case QueryInformationLevel.SMB_QUERY_FILE_ALT_NAME_INFO: this.trans2Data.Data = CifsMessageUtils.ToStuct < SMB_QUERY_FILE_ALT_NAME_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>(this.smbData.Trans2_Data); break; case QueryInformationLevel.SMB_QUERY_FILE_STREAM_INFO: this.trans2Data.Data = CifsMessageUtils.ToStuct < SMB_QUERY_FILE_STREAM_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>(this.smbData.Trans2_Data); break; case QueryInformationLevel.SMB_QUERY_FILE_COMPRESSION_INFO: this.trans2Data.Data = CifsMessageUtils.ToStuct < SMB_QUERY_FILE_COMPRESSION_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>(this.smbData.Trans2_Data); break; } } }
/// <summary> /// Encode the struct of Trans2Data into the byte array in SmbData.Trans2_Data /// </summary> protected override void EncodeTrans2Data() { if (this.trans2Data.Data != null) { Type type = this.trans2Data.Data.GetType(); if (type == typeof(SMB_INFO_STANDARD_OF_TRANS2_QUERY_PATH_INFORMATION)) { this.smbData.Trans2_Data = CifsMessageUtils.ToBytes < SMB_INFO_STANDARD_OF_TRANS2_QUERY_PATH_INFORMATION>( (SMB_INFO_STANDARD_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data); } else if (type == typeof(SMB_INFO_QUERY_EA_SIZE_OF_TRANS2_QUERY_PATH_INFORMATION)) { this.smbData.Trans2_Data = CifsMessageUtils.ToBytes < SMB_INFO_QUERY_EA_SIZE_OF_TRANS2_QUERY_PATH_INFORMATION>( (SMB_INFO_QUERY_EA_SIZE_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data); } else if (type == typeof(SMB_INFO_QUERY_EAS_FROM_LIST_OF_TRANS2_QUERY_PATH_INFORMATION)) { SMB_INFO_QUERY_EAS_FROM_LIST_OF_TRANS2_QUERY_PATH_INFORMATION data = (SMB_INFO_QUERY_EAS_FROM_LIST_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data; if (data.ExtendedAttributeList != null) { this.smbData.Trans2_Data = new byte[data.SizeOfListInBytes]; using (MemoryStream memoryStream = new MemoryStream(this.smbData.Trans2_Data)) { using (Channel channel = new Channel(null, memoryStream)) { channel.BeginWriteGroup(); channel.Write <uint>(data.SizeOfListInBytes); foreach (SMB_FEA smbEa in data.ExtendedAttributeList) { channel.Write <SMB_FEA>(smbEa); } channel.EndWriteGroup(); } } } } else if (type == typeof(SMB_INFO_QUERY_ALL_EAS_OF_TRANS2_QUERY_PATH_INFORMATION)) { SMB_INFO_QUERY_ALL_EAS_OF_TRANS2_QUERY_PATH_INFORMATION easData = (SMB_INFO_QUERY_ALL_EAS_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data; if (easData.ExtendedAttributeList != null) { this.smbData.Trans2_Data = new byte[easData.SizeOfListInBytes]; using (MemoryStream memoryStream = new MemoryStream(this.smbData.Trans2_Data)) { using (Channel channel = new Channel(null, memoryStream)) { channel.BeginWriteGroup(); channel.Write <uint>(easData.SizeOfListInBytes); foreach (SMB_FEA smbEa in easData.ExtendedAttributeList) { channel.Write <SMB_FEA>(smbEa); } channel.EndWriteGroup(); } } } } else if (type == typeof(SMB_QUERY_FILE_BASIC_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)) { this.smbData.Trans2_Data = CifsMessageUtils.ToBytes < SMB_QUERY_FILE_BASIC_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>( (SMB_QUERY_FILE_BASIC_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data); } else if (type == typeof(SMB_QUERY_FILE_STANDARD_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)) { this.smbData.Trans2_Data = CifsMessageUtils.ToBytes < SMB_QUERY_FILE_STANDARD_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>( (SMB_QUERY_FILE_STANDARD_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data); } else if (type == typeof(SMB_QUERY_FILE_EA_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)) { this.smbData.Trans2_Data = CifsMessageUtils.ToBytes < SMB_QUERY_FILE_EA_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>( (SMB_QUERY_FILE_EA_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data); } else if (type == typeof(SMB_QUERY_FILE_NAME_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)) { this.smbData.Trans2_Data = CifsMessageUtils.ToBytes < SMB_QUERY_FILE_NAME_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>( (SMB_QUERY_FILE_NAME_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data); } else if (type == typeof(SMB_QUERY_FILE_ALL_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)) { this.smbData.Trans2_Data = CifsMessageUtils.ToBytes < SMB_QUERY_FILE_ALL_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>( (SMB_QUERY_FILE_ALL_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data); } else if (type == typeof(SMB_QUERY_FILE_ALT_NAME_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)) { this.smbData.Trans2_Data = CifsMessageUtils.ToBytes < SMB_QUERY_FILE_ALT_NAME_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>( (SMB_QUERY_FILE_ALT_NAME_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data); } else if (type == typeof(SMB_QUERY_FILE_STREAM_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)) { this.smbData.Trans2_Data = CifsMessageUtils.ToBytes < SMB_QUERY_FILE_STREAM_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>( (SMB_QUERY_FILE_STREAM_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data); } else if (type == typeof(SMB_QUERY_FILE_COMPRESSION_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)) { this.smbData.Trans2_Data = CifsMessageUtils.ToBytes < SMB_QUERY_FILE_COMPRESSION_INFO_OF_TRANS2_QUERY_PATH_INFORMATION>( (SMB_QUERY_FILE_COMPRESSION_INFO_OF_TRANS2_QUERY_PATH_INFORMATION)this.trans2Data.Data); } else if (type == typeof(byte[])) { this.smbData.Trans2_Data = (byte[])this.trans2Data.Data; } else { // Branch for negative testing. } } else { this.smbData.Trans2_Data = new byte[0]; } }