The TS_EXTENDED_INFO_PACKET structure contains user information specific to RDP 5.0, RDP 5.1, and RDP 5.2.
file:///C:/ts_dev/TestSuites/MS-RDPBCGR/TestSuite/Src/TD/latest_XMLS_16may/RDPBCGR/ _rfc_ms-rdpbcgr2_1_1_11_1_1_1.xml
        /// <summary>
        /// Parse TS_EXTENDED_INFO_PACKET
        /// (parser index is updated according to parsed length)
        /// </summary>
        /// <param name="data">data to be parsed</param>
        /// <param name="currentIndex">current parser index</param>
        /// <returns>TS_EXTENDED_INFO_PACKET</returns>
        private TS_EXTENDED_INFO_PACKET ParseExtendedInfo(byte[] data, ref int currentIndex, Encoding converter)
        {
            TS_EXTENDED_INFO_PACKET extData = new TS_EXTENDED_INFO_PACKET();
            extData.clientAddressFamily = (clientAddressFamily_Values)ParseUInt16(data, ref currentIndex, false);

            extData.cbClientAddress = ParseUInt16(data, ref currentIndex, false);
            byte[] clientAddress = GetBytes(data, ref currentIndex, extData.cbClientAddress);
            extData.clientAddress = converter.GetString(clientAddress);

            extData.cbClientDir = ParseUInt16(data, ref currentIndex, false);
            byte[] clientDir = GetBytes(data, ref currentIndex, extData.cbClientDir);
            extData.clientDir = converter.GetString(clientDir);

            extData.clientTimeZone = ParseTimeZone(data, ref currentIndex);
            extData.clientSessionId = ParseUInt32(data, ref currentIndex, false);
            extData.performanceFlags = (performanceFlags_Values)ParseUInt32(data, ref currentIndex, false);
            extData.cbAutoReconnectLen = ParseUInt16(data, ref currentIndex, false);
            if (extData.cbAutoReconnectLen != 0)
            {
                extData.autoReconnectCookie = ParseAutoReconnectCookie(data, ref currentIndex);
            }
            if(currentIndex < data.Length)
                extData.reserved1 = new UInt16Class(ParseUInt16(data, ref currentIndex, false));
            if (currentIndex < data.Length)
                extData.reserved2 = new UInt16Class(ParseUInt16(data, ref currentIndex, false));
            if (currentIndex < data.Length)
            {
                extData.cbDynamicDSTTimeZoneKeyName = new UInt16Class(ParseUInt16(data, ref currentIndex, false));
                if (extData.cbDynamicDSTTimeZoneKeyName.actualData != 0)
                {
                    byte[] timeZoneKeyName = GetBytes(data, ref currentIndex, extData.cbDynamicDSTTimeZoneKeyName.actualData);
                    extData.dynamicDSTTimeZoneKeyName = converter.GetString(timeZoneKeyName);
                }
            }
            if (currentIndex < data.Length)
                extData.dynamicDaylightTimeDisabled = new UInt16Class(ParseUInt16(data, ref currentIndex, false));

            return extData;
        }