The CHANNEL_PDU_HEADER MUST precede all opaque static virtual channel traffic chunks transmitted via RDP between client and server.
file:///C:/ts_dev/TestSuites/MS-RDPBCGR/TestSuite/Src/TD/latest_XMLS_16may/RDPBCGR/ _rfc_ms-rdpbcgr2_1_6_1_1a.xml
        /// <summary>
        /// Parse CHANNEL_PDU_HEADER
        /// (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>CHANNEL_PDU_HEADER</returns>
        CHANNEL_PDU_HEADER ParseChannelPduHeader(byte[] data, ref int currentIndex)
        {
            CHANNEL_PDU_HEADER header = new CHANNEL_PDU_HEADER();

            // CHANNEL_PDU_HEADER: length
            header.length = ParseUInt32(data, ref currentIndex, false);

            // CHANNEL_PDU_HEADER: flags
            header.flags = (CHANNEL_PDU_HEADER_flags_Values)ParseUInt32(data, ref currentIndex, false);

            return header;
        }
        /// <summary>
        /// Send static virtual channel data
        /// </summary>
        /// <param name="channelId">Channel ID</param>
        /// <param name="channelPduHeader">Channel PDU Header</param>
        /// <param name="SVCData"></param>
        public void SendPacket(UInt16 channelId, CHANNEL_PDU_HEADER channelPduHeader, byte[] SVCData)
        {
            Virtual_Channel_RAW_Server_Pdu rawPdu = new Virtual_Channel_RAW_Server_Pdu(context);
            rawPdu.channelPduHeader = channelPduHeader;
            rawPdu.virtualChannelData = SVCData;

            RdpbcgrUtility.FillCommonHeader(ref rawPdu.commonHeader,
                                     TS_SECURITY_HEADER_flags_Values.SEC_IGNORE_SEQNO
                                     | TS_SECURITY_HEADER_flags_Values.SEC_RESET_SEQNO,
                                     context,
                                     channelId);

            context.Server.SendPdu(context, rawPdu);
        }