private void LoadResourceValues(ResourceReader.ResourceCacheItem[] store)
        {
            object obj = this.readerLock;

            lock (obj)
            {
                for (int i = 0; i < this.resourceCount; i++)
                {
                    ResourceReader.ResourceInfo resourceInfo = this.infos[i];
                    if (resourceInfo.TypeIndex == -1)
                    {
                        store[i] = new ResourceReader.ResourceCacheItem(resourceInfo.ResourceName, null);
                    }
                    else
                    {
                        this.reader.BaseStream.Seek(resourceInfo.ValuePosition, SeekOrigin.Begin);
                        object value;
                        if (this.resource_ver == 2)
                        {
                            value = this.ReadValueVer2(resourceInfo.TypeIndex);
                        }
                        else
                        {
                            value = this.ReadValueVer1(Type.GetType(this.typeNames[resourceInfo.TypeIndex], true));
                        }
                        store[i] = new ResourceReader.ResourceCacheItem(resourceInfo.ResourceName, value);
                    }
                }
            }
        }
        private void CreateResourceInfo(long position, ref ResourceReader.ResourceInfo info)
        {
            long offset = position + this.nameSectionOffset;

            this.reader.BaseStream.Seek(offset, SeekOrigin.Begin);
            int num = this.Read7BitEncodedInt();

            byte[] array = new byte[num];
            this.reader.Read(array, 0, num);
            string @string = Encoding.Unicode.GetString(array);
            long   offset2 = (long)(this.reader.ReadInt32() + this.dataSectionOffset);

            this.reader.BaseStream.Seek(offset2, SeekOrigin.Begin);
            int type_index = this.Read7BitEncodedInt();

            info = new ResourceReader.ResourceInfo(@string, this.reader.BaseStream.Position, type_index);
        }
        internal unsafe UnmanagedMemoryStream ResourceValueAsStream(string name, int index)
        {
            ResourceReader.ResourceInfo resourceInfo = this.infos[index];
            if (resourceInfo.TypeIndex != 33)
            {
                throw new InvalidOperationException(string.Format("Resource '{0}' was not a Stream. Use GetObject() instead.", name));
            }
            object obj = this.readerLock;
            UnmanagedMemoryStream result;

            lock (obj)
            {
                this.reader.BaseStream.Seek(resourceInfo.ValuePosition, SeekOrigin.Begin);
                long num = (long)this.reader.ReadInt32();
                UnmanagedMemoryStream unmanagedMemoryStream = this.reader.BaseStream as UnmanagedMemoryStream;
                if (unmanagedMemoryStream != null)
                {
                    result = new UnmanagedMemoryStream(unmanagedMemoryStream.PositionPointer, num);
                }
                else
                {
                    IntPtr ptr     = Marshal.AllocHGlobal((int)num);
                    byte * pointer = (byte *)ptr.ToPointer();
                    UnmanagedMemoryStream unmanagedMemoryStream2 = new UnmanagedMemoryStream(pointer, num, num, FileAccess.ReadWrite);
                    unmanagedMemoryStream2.Closed += delegate(object o, EventArgs e)
                    {
                        Marshal.FreeHGlobal(ptr);
                    };
                    byte[] array = new byte[(num >= 1024L) ? 1024L : num];
                    while (num > 0L)
                    {
                        int num2 = this.reader.Read(array, 0, (int)Math.Min((long)array.Length, num));
                        if (num2 == 0)
                        {
                            throw new FormatException("The resource data is corrupt. Resource stream ended");
                        }
                        unmanagedMemoryStream2.Write(array, 0, num2);
                        num -= (long)num2;
                    }
                    unmanagedMemoryStream2.Seek(0L, SeekOrigin.Begin);
                    result = unmanagedMemoryStream2;
                }
            }
            return(result);
        }
        private void GetResourceDataAt(int index, out string resourceType, out byte[] data)
        {
            ResourceReader.ResourceInfo resourceInfo = this.infos[index];
            int typeIndex = resourceInfo.TypeIndex;

            if (typeIndex == -1)
            {
                throw new FormatException("The resource data is corrupt");
            }
            object obj = this.readerLock;

            lock (obj)
            {
                this.reader.BaseStream.Seek(resourceInfo.ValuePosition, SeekOrigin.Begin);
                long position = this.reader.BaseStream.Position;
                if (this.resource_ver == 2)
                {
                    if (typeIndex >= 64)
                    {
                        int num = typeIndex - 64;
                        if (num >= this.typeNames.Length)
                        {
                            throw new FormatException("The resource data is corrupt. Invalid index to types");
                        }
                        resourceType = this.typeNames[num];
                    }
                    else
                    {
                        resourceType = "ResourceTypeCode." + (PredefinedResourceType)typeIndex;
                    }
                    this.ReadValueVer2(typeIndex);
                }
                else
                {
                    resourceType = "ResourceTypeCode.Null";
                    this.ReadValueVer1(Type.GetType(this.typeNames[typeIndex], true));
                }
                int num2 = (int)(this.reader.BaseStream.Position - position);
                this.reader.BaseStream.Seek((long)(-(long)num2), SeekOrigin.Current);
                data = new byte[num2];
                this.reader.BaseStream.Read(data, 0, num2);
            }
        }