The TS_UD_CS_NET packet contains a list of requested virtual channels.
file:///C:/ts_dev/TestSuites/MS-RDPBCGR/TestSuite/Src/TD/latest_XMLS_16may/RDPBCGR/ _rfc_ms-rdpbcgr2_1_1_3_4.xml
コード例 #1
0
        public void VerifyStructure(TS_UD_CS_NET net)
        {
            Site.CaptureRequirementIfAreEqual<TS_UD_HEADER_type_Values>(net.header.type, TS_UD_HEADER_type_Values.CS_NET,
                225,
                "In Client Network Data (TS_UD_CS_NET), the User Data Header type field MUST be set to CS_NET (0xC003).");
            Site.CaptureRequirementIfIsTrue(net.channelCount <= 31,
                228,
                "[In Client Network Data (TS_UD_CS_NET)]channelCount (4 bytes): In Client Network Data, the maximum allowed value for channelCount is 31.");
            Site.CaptureRequirementIfAreEqual<int>(net.channelDefArray.Count, (int)net.channelCount,
                230,
                "In Client Network Data, the number of CHANNEL_DEF structures which follows is given by the channelCount field.");
            const uint options = (uint)Channel_Options.INITIALIZED | (uint)Channel_Options.ENCRYPT_RDP
                | (uint)Channel_Options.ENCRYPT_SC | (uint)Channel_Options.ENCRYPT_CS
                | (uint)Channel_Options.PRI_HIGH | (uint)Channel_Options.PRI_MED
                | (uint)Channel_Options.PRI_LOW | (uint)Channel_Options.COMPRESS_RDP
                | (uint)Channel_Options.COMPRESS | (uint)Channel_Options.SHOW_PROTOCOL
                | (uint)Channel_Options.REMOTE_CONTROL_PERSISTENT;
            const uint negOptions = ~options;
            for (int i = 0; i < net.channelCount; i++)
            {
                site.CaptureRequirementIfIsTrue(((uint)net.channelDefArray[i].options & negOptions) == 0, 234,
                    @"In Channel Definition Structure (CHANNEL_DEF), the options field can take one of the following values"
                    + @" CHANNEL_OPTION_INITIALIZED 0x80000000, CHANNEL_OPTION_ENCRYPT_RDP 0x40000000, CHANNEL_OPTION_ENCRYPT_SC"
                    + @" 0x20000000, CHANNEL_OPTION_ENCRYPT_CS 0x10000000, CHANNEL_OPTION_PRI_HIGH 0x08000000, CHANNEL_OPTION_PRI_MED"
                    + @" 0x04000000,CHANNEL_OPTION_PRI_LOW 0x02000000, CHANNEL_OPTION_COMPRESS_RDP 0x00800000, CHANNEL_OPTION_COMPRESS"
                    + @" 0x00400000, CHANNEL_OPTION_SHOW_PROTOCOL 0x00200000, REMOTE_CONTROL_PERSISTENT 0x00100000");

            }
        }
コード例 #2
0
        /// <summary>
        /// Parse TS_UD_CS_NET
        /// (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_UD_CS_NET</returns>
        private TS_UD_CS_NET ParseTsUdCsNet(byte[] data, ref int currentIndex)
        {
            TS_UD_CS_NET netData = new TS_UD_CS_NET();

            // TS_UD_CS_NET: Header
            netData.header.type = (TS_UD_HEADER_type_Values)ParseUInt16(data, ref currentIndex, false);
            netData.header.length = ParseUInt16(data, ref currentIndex, false);

            // TS_UD_SC_NET: channelCount
            netData.channelCount = ParseUInt32(data, ref currentIndex, false);

            // TS_UD_SC_NET: channelIdArray
            netData.channelDefArray = new List<CHANNEL_DEF>();
            for (int i = 0; i < netData.channelCount; i++)
            {
                CHANNEL_DEF channelDef;
                byte[] name = GetBytes(data, ref currentIndex, 8);
                ASCIIEncoding converter = new ASCIIEncoding();
                channelDef.name = converter.GetString(name) ;
                channelDef.options = (Channel_Options)ParseUInt32(data, ref currentIndex, false);
                netData.channelDefArray.Add(channelDef);
            }

            return netData;
        }