Пример #1
0
        /// <summary>
        /// Build a Smb2CompressedPacket from a byte array.
        /// </summary>
        /// <param name="data">The byte array.</param>
        /// <param name="consumedLen">The consumed data length.</param>
        /// <param name="expectedLen">The expected data length.</param>
        internal override void FromBytes(byte[] data, out int consumedLen, out int expectedLen)
        {
            int minimumLength = Marshal.SizeOf(Header);

            if (data.Length < minimumLength)
            {
                throw new InvalidOleVariantTypeException("Not enough data for Compression_Transform_Header!");
            }
            int offset = 0;

            Header = TypeMarshal.ToStruct <Compression_Transform_Header>(data, ref offset);

            if (offset + Header.Offset > data.Length)
            {
                throw new InvalidOleVariantTypeException("Not enough data for Smb2CompressedPacket!");
            }
            UncompressedData = new byte[Header.Offset];
            Array.Copy(data, offset, UncompressedData, 0, Header.Offset);

            long compressedDataLength = data.Length - offset - Header.Offset;

            CompressedData = new byte[compressedDataLength];
            Array.Copy(data, offset + Header.Offset, CompressedData, 0, compressedDataLength);

            consumedLen = data.Length;
            expectedLen = 0;
        }
Пример #2
0
        static Smb2ChainedCompressedPacket()
        {
            var header = new Compression_Transform_Header();

            FirstPayloadHeaderOffset = TypeMarshal.GetBlockMemorySize(header.ProtocolId) + TypeMarshal.GetBlockMemorySize(header.OriginalCompressedSegmentSize);

            var payloadHeader = new SMB2_COMPRESSION_PAYLOAD_HEADER();

            FieldSizeOriginalPayloadSize = TypeMarshal.GetBlockMemorySize(payloadHeader.OriginalPayloadSize);
        }