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