Beispiel #1
0
        private void ReadValues(NdrBinaryReader Stream)
        {
            values = new object[Count];

            for (var i = 0; i < Count; i++)
            {
                switch (Type)
                {
                case ClaimType.CLAIM_TYPE_BOOLEAN:
                    values[i] = Convert.ToBoolean(Stream.ReadLong());
                    break;

                case ClaimType.CLAIM_TYPE_INT64:
                    values[i] = Stream.ReadLong();
                    break;

                case ClaimType.CLAIM_TYPE_UINT64:
                    values[i] = (ulong)Stream.ReadLong();
                    break;

                case ClaimType.CLAIM_TYPE_STRING:
                    values[i] = Stream.ReadString();
                    break;
                }
            }
        }
Beispiel #2
0
        internal void ReadValue(NdrBinaryReader stream)
        {
            Id = stream.ReadString();

            stream.Align(4);

            var count = stream.ReadInt();

            if (count != Count)
            {
                throw new InvalidDataException($"ValueCount {Count} doesn't match actual count {count} for claim {Id}.");
            }

            if (Type == ClaimType.CLAIM_TYPE_STRING)
            {
                var ptr = stream.ReadInt();

                if (count > 1 && ptr != 0)
                {
                    stream.Seek(8);
                }
            }

            ReadValues(stream);
        }
Beispiel #3
0
        public string ReadString(NdrBinaryReader reader)
        {
            if (pointer == 0)
            {
                return(null);
            }

            var result = reader.ReadString(maxLength);

            int expected = Length / 2;

            if (result.Length != expected)
            {
                throw new InvalidDataException($"Read length {result.Length} doesn't match expected length {expected}");
            }

            return(result);
        }