/// <summary> /// Deep copy constructor. /// </summary> public SmbSearchResponsePacket(SmbSearchResponsePacket packet) : base(packet) { this.InitDefaultValue(); this.smbParameters.WordCount = packet.SmbParameters.WordCount; this.smbParameters.Count = packet.SmbParameters.Count; this.smbData.ByteCount = packet.SmbData.ByteCount; this.smbData.BufferFormat = packet.SmbData.BufferFormat; this.smbData.DataLength = packet.SmbData.DataLength; ushort dirInformationLength = 43; this.smbData.DirectoryInformationData = new SMB_Directory_Information[packet.smbData.DataLength / dirInformationLength]; if (packet.smbData.DirectoryInformationData != null) { Array.Copy(packet.smbData.DirectoryInformationData, this.smbData.DirectoryInformationData, packet.smbData.DirectoryInformationData.Length); } else { this.smbData.DirectoryInformationData = new SMB_Directory_Information[0]; } }
public SmbSearchResponsePacket CreateSearchResponse( CifsServerPerConnection connection, SmbSearchRequestPacket request, SMB_Directory_Information[] directoryInformationData) { directoryInformationData = directoryInformationData ?? new SMB_Directory_Information[0]; SmbSearchResponsePacket response = new SmbSearchResponsePacket(); response.SmbHeader = CifsMessageUtils.CreateSmbHeader(connection, request); SMB_COM_SEARCH_Response_SMB_Parameters smbParameters = response.SmbParameters; smbParameters.Count = (ushort)directoryInformationData.Length; smbParameters.WordCount = (byte)(TypeMarshal.GetBlockMemorySize(smbParameters) / 2); response.SmbParameters = smbParameters; ushort dataLength = 0; foreach (SMB_Directory_Information info in directoryInformationData) { dataLength += (ushort)TypeMarshal.GetBlockMemorySize(info); } SMB_COM_SEARCH_Response_SMB_Data smbData = response.SmbData; smbData.BufferFormat = 0x05; smbData.DirectoryInformationData = directoryInformationData; smbData.DataLength = dataLength; smbData.ByteCount = (ushort)(dataLength + 0x03); response.SmbData = smbData; return response; }