/// <summary> /// initialize packet from base packet. /// </summary> /// <param name = "packet">the base packet to initialize this packet. </param> public SmbNtTransFsctlSrvEnumerateSnapshotsResponsePacket(Cifs.SmbNtTransactIoctlResponsePacket packet) : base(packet) { this.ntTransData = CifsMessageUtils.ToStuct<NT_TRANSACT_ENUMERATE_SNAPSHOTS_Response_NT_Trans_Data>( packet.NtTransData.Data); }
/// <summary> /// Encode the struct of NtTransData into the byte array in SmbData.NT_Trans_Data /// </summary> protected override void EncodeNtTransData() { List<byte> data = new List<byte>(); foreach (string snapshot in SnapShots) { byte[] bytes = Encoding.Unicode.GetBytes(snapshot + "\0"); data.AddRange(bytes); } data.AddRange(new byte[2]); NT_TRANSACT_ENUMERATE_SNAPSHOTS_Response_NT_Trans_Data snapshotsNtTransData = new NT_TRANSACT_ENUMERATE_SNAPSHOTS_Response_NT_Trans_Data(); snapshotsNtTransData.NumberOfSnapShots = this.ntTransData.NumberOfSnapShots; snapshotsNtTransData.NumberOfSnapShotsReturned = this.ntTransData.NumberOfSnapShotsReturned; snapshotsNtTransData.SnapShotArraySize = (uint)data.Count; snapshotsNtTransData.snapShotMultiSZ = data.ToArray(); this.NtTransData = snapshotsNtTransData; this.smbData.Data = CifsMessageUtils.ToBytes<NT_TRANSACT_ENUMERATE_SNAPSHOTS_Response_NT_Trans_Data>(this.NtTransData); }
/// <summary> /// to decode the NtTrans data: from the general NtTransDada to the concrete NtTrans Data. /// </summary> protected override void DecodeNtTransData() { NT_TRANSACT_ENUMERATE_SNAPSHOTS_Response_NT_Trans_Data data = new NT_TRANSACT_ENUMERATE_SNAPSHOTS_Response_NT_Trans_Data(); using (MemoryStream stream = new MemoryStream(this.smbData.Data)) { using (Channel channel = new Channel(null, stream)) { data.NumberOfSnapShots = channel.Read<uint>(); data.NumberOfSnapShotsReturned = channel.Read<uint>(); data.SnapShotArraySize = channel.Read<uint>(); if (data.NumberOfSnapShotsReturned > 0) { data.snapShotMultiSZ = channel.ReadBytes((int)data.SnapShotArraySize); } } } this.NtTransData = data; if (this.ntTransData.snapShotMultiSZ == null || this.ntTransData.SnapShotArraySize <= 2) { return; } string snapshot = Encoding.Unicode.GetString(this.ntTransData.snapShotMultiSZ); this.SnapShots = new Collection<string>(snapshot.Trim('\0').Split('\0')); }