Exemplo n.º 1
0
        internal void Read(byte[] cache)
        {
            this.Credentials.Clear();
            this.Header.Clear();

            using (var buffer = new NdrBuffer(cache, align: false))
            {
                var magic = buffer.Read(1)[0];

                if (magic != Magic)
                {
                    throw new InvalidOperationException($"Unknown file format. Expected 0x{Magic}; Actual 0x{magic}.");
                }

                var version = buffer.Read(1)[0];

                if (version != ExpectedVersion)
                {
                    throw new InvalidOperationException($"Unknown file format version. Expected 0x{ExpectedVersion}; Actual 0x{version}.");
                }

                try
                {
                    this.ReadHeader(buffer);
                    this.DefaultPrincipalName = ReadPrincipal(buffer);

                    this.ReadCredentials(buffer);
                }
                catch (ArgumentException)
                {
                    throw new InvalidDataException($"The cache file appears corrupt around byte offset {buffer.Offset}");
                }
            }
        }